日期:2025/04/06 01:42来源:未知 人气:52
今天介绍java的反射,其实以后使用的框架就是反射+注解+设计模式。
那么反射可以做什么?反射可以得到类的任何信息,如成员变量,成员方法,构造器,注解等,包括私有的。
获取class类的对象:
法1.通过Class类中的静态方法forName。
Class clazz1 = Class.forName("全限定类名"); //通过Class类中的静态方法forName,直接获取到一个类的字节码文件对象,此时该类还是源文件阶段,并没有变为字节码文件。
法2.用该字节码文件对象,类名字.class的方式获取。
Class clazz2 = Person.class; //当类被加载成.class文件时,此时Person类变成了.class,在获取该字节码文件对象,也就是获取自己, 该类处于字节码阶段。
法3.通过该类的实例获得
Class clazz3 = p.getClass(); //通过类的实例获取该类的字节码文件对象,该类处于创建对象阶段。
获取类的所有公共构造方法:
Constructor[] cs = c.getConstructors();//获取公告的构造器
System.out.println(cs.length+":"+Arrays.toString(cs));
获取类的某个公共构造方法:
//获取公告的指定的构造器
Constructor ct = c.getConstructor(java.lang.String.class);
System.out.println(ct);
获取所有的构造方法,包括私有的:
//获得私有和公共的构造器
Constructor[] cs2 = c.getDeclaredConstructors();
System.out.println(cs2.length+":"+Arrays.toString(cs2));
通过获得的构造器创建对象
Constructor ct = c.getConstructor();
Object o = ct.newInstance();
Person p = (Person) o; // 再转回指定的类型即可
通过类获取所有变量
Field[] fields = c.getFields();
通过类获取指定变量
Field declaredField = c.getDeclaredField("name");
通过类获取所有方法
Method[] methods = c.getMethods();
通过类获取指定方法,参数为(该方法名,该方法参数的类对象)
Method d = c.getDeclaredMethod("setName", String.class);