-------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-------
1.反射的概念
反射机制指的是程序在运行时能够获取自身的信心。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。
2.反射机制的作用
通过反射机制访问java对象的属性、方法、构造函数
反射就是把Java类中的各种成分映射成相应的java类
3.反射机制的实用
Class 获取字节的方式
Class cls1=Data.class;
调用 类名.Class,可以获取该类的字节码
public static void main(String[] args) {
String str1="abc";
//获取str1字节码
Class cls1=str1.getClass();
System.out.println(cls1);
}
调用 对象.getClass()
,如上述代码str1.getClass返回String类对应的Class对象(得到一个类的字节码)。
Class.forName("java.lang.String"); //会抛出异常(ClassNotFoundException)
通过Class.forName("类名"),可以同样可以获取类名的字节码。
boolean isPrimitive() 判断指定的Class对象是否是一个基本类型,返回boolean类型。
Field类 代表某个类中的一个成员变量
class Reflecpoint{
private int x;
public int y;
//构造函数
public Reflecpoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
//反射类
public class Method {
public static void main(String[] args) throws Exception{
Reflecpoint pt1=new Reflecpoint(3, 9);
//得到类的成员变量,先要得到该类的字节码
//fieldY(共有的)不是对象身上的变量,而是类上,要用它去取某个对象上对应的值
Field fieldY=pt1.getClass().getField("y");
System.out.println(fieldY.get(pt1));
//获取fieldX(私有的) getDeclaredField获取该类中任意成员变量,包括私有
Field fieldX=pt1.getClass().getDeclaredField("x");
//将该私有字段进行取消权限检查的能力
fieldX.setAccessible(true);
System.out.println(fieldY.get(pt1));
}
}
Method类 代表某个类中的成员方法
String str1="abc";
Method methodChar=String.class.getMethod("charAt", int.class);
//invoke()调用方法
System.out.println(methodChar.invoke(str1, 1));