java反射详解及说明

首先写一个Person类:

 1 package lltse.base.reflectdemo;
 2
 3 public class Person
 4 {
 5
 6     private String name;
 7
 8     public String getName() {
 9         return name;
10     }
11
12
13
14     public void setName(String name) {
15         this.name = name;
16     }
17
18
19
20     public int getSex() {
21         return sex;
22     }
23
24
25
26     public void setSex(int sex) {
27         this.sex = sex;
28     }
29
30
31
32     public int getAge() {
33         return age;
34     }
35
36
37
38     public void setAge(int age) {
39         this.age = age;
40     }
41
42
43
44     private int sex;
45
46     private int age;
47
48     public Person(String name,int sex,int age)
49     {
50         this.name = name;
51         this.sex = sex;
52         this.age = age;
53     }
54
55     public Person()
56     {
57     }
58
59     /**
60      * @param args
61      */
62     public static void main(String[] args) {
63         // TODO Auto-generated method stub
64
65     }
66
67
68     public int show(String name,int age)
69     {
70         System.out.println("showInfo:>>>:name"+name+"age:>>>"+age);
71         return age;
72     }
73
74     public static String getName(String name)
75     {
76         return name;
77     }
78 }

其次是测试反射的相关方法

 1 package lltse.base.reflectdemo;
 2
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.InvocationTargetException;
 5 import java.lang.reflect.Method;
 6
 7 public class ReflectTest
 8 {
 9     /**
10      * @param args
11      * @throws ClassNotFoundException
12      * @throws SecurityException
13      * @throws NoSuchMethodException
14      * @throws InvocationTargetException
15      * @throws IllegalArgumentException
16      * @throws IllegalAccessException
17      * @throws InstantiationException
18      */
19     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException
20     {
21         //获取Class方法一
22         //Person person = new Person();
23         //Class personClazz1 = person.getClass();
24
25         //获取Class方法二
26         Class  personClazz2 = Person.class;
27
28         //获取Class方法三
29         Class personClazz3 = Class.forName("lltse.base.reflectdemo.Person");
30
31         //活动完整的包名和类名
32         System.out.println("personClazz3.getName():>>>"+personClazz3.getName());
33
34         /* 返回一个包含某些 Method 对象的数组,这些对象反映此 Class
35         对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。*/
36         Method[] methods = personClazz3.getMethods();
37
38          /*返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,
39          包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。*/
40         Method[] declaredMethods = personClazz3.getDeclaredMethods();
41
42
43         for(int i=0;i<methods.length;i++)
44         {
45             System.out.println(methods[i].getName());
46         }
47
48         //返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。
49         Constructor[] constructors = personClazz3.getConstructors();
50
51         for(int t=0;t<constructors.length;t++)
52         {
53             System.out.println("constructors["+t+"]:>>>>"+constructors[t]);
54         }
55
56         //实例化类对象
57         Person p = (Person)personClazz3.newInstance();
58         //返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
59         Method method = personClazz3.getMethod("show", new Class[]{String.class,int.class});
60
61         //对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。p代表被实例化的类对象
62         int returnValue = (int)method.invoke(p, "zhangsan",30);
63         System.out.println("returnValue:>>>"+returnValue);
64
65         /*如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。
66         如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。*/
67
68         Method method2 = personClazz3.getMethod("getName", new Class[]{String.class});
69         String name = (String)method2.invoke(null, "test");
70         System.out.println("name:>>>"+name);
71
72
73     }
74
75
76
77 }
时间: 2024-10-01 05:27:04

java反射详解及说明的相关文章

java 反射 详解

本文来自:blog.csdn.net/ljphhj JAVA反射机制:   通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们. 理论的东东太多也没用,下面我们看看实践 Demo - Demo: package cn.lee.demo; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import

Java反射详解

Java反射详解 分类:java, 基础日期:2012-07-20作者:ticmy 19 反射,是Java中非常重要的一个功能,如果没有反射,可以说很多框架都难以实现. 什么是反射?说白了就是可以通过Java代码获取装载到方法区的类信息的手段. 当装载一个类时,会在方法区产生一个数据结构,该结构中包含着装载的类的相关信息.字节码可以看成是数据流,那么方法区的这种数据结构可以说是字节码数据流的结构化表现.装载的最终产物就是java.lang.Class类的一个对象,它是Java程序与方法区内部数据

java反射详解 (转至 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html)

本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /**  * 通过一个对象获得完整的包名和类名  * */ class Demo{     //other codes... } class hello{     pu

Java 反射详解 转载

java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ·获取一个对象的父类与实现的接口 ·获取某个类中的全部构造函数 - 详见下例 ·通过反射机制实例化一个类的对象 ·获取某个类的全部属性 ·获取某个类的全部方法 ·通过反射机制调用某个类的方法 ·通过反射机制操作某个类的属性 ·反射机制的动态代理 4反射机制的应用实例 ·在泛型为Integer的Arr

Java 反射详解

反射反射,程序员的快乐,今天你快乐了吗?如果你不快乐,没关系,接下来让你快乐起来! 一.什么是反射? 通过百度百科我们可以知道,Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:并且能改变它的属性.而这也是Java被视为动态(或准动态,为啥要说是准动态,因为一般而言的动态语言定义是程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言.从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C

转 java反射详解

本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /**  * 通过一个对象获得完整的包名和类名  * */ class Demo{     //other codes... } class hello{     publ

java反射详解(转)

本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /**  * 通过一个对象获得完整的包名和类名  * */ class Demo{     //other codes... } class hello{     publ

【转】java反射详解

转自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /**  * 通过一个对象获得完整

Java虚拟机详解——JVM常见问题总结

[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考之前的系列文章,尤其是那篇:Java虚拟机详解04--GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾回收.类加载机制. 先把本文的目录画一个思维导图:(图的源文件在本文末尾) 一.Java引用的四种状态: 强引用:  用的最广.我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它,这就是强引用. * 如果一个对象具有强引用,那垃圾回收器绝不会回收它*.当内存空间不足,Java虚拟机宁