反射
反射基石-class类:用于描述每个类在内存中的“字节码”这一事物。字节码包含的信息有:类名、类的访问权限、类所属的包名、字段名称列表、方法名称列表等。
一个类被加载到内存中后,占用一片内存空间,这个空间里的内容即为字节码。
如何得到各个字节码的实例对象?
1、类名.class 如System.class 应用前提:知道这个类的类名
2、对象.getClass() 如new Date().getClass 应用前提:有这个对象或其引用
3、Class.forName("类名") 如Class.forName("java.util.System") 应用前提:知道类的全路径名
反射:将java类的各个成份(构造方法、普通方法、方法参数、字段、访问权限)分别映射成java类。
创建实例对象的三种方式:
1、普通方式: String str1 = new String("Hello");
2、反射构造方法: String str2 = str1.getClass.getConstructor((StringBuilder.class).newInstance(new StringBuilder("Hello"));
3、Class.newInstance()方法:
String str3 = String.class.newInstance();//该方法内部先得到默认的构造方法,再用构造方法创建实例对象
的属性值。
Method类
反射方法:Method charAt = String.class.getMethod("charAt", int.class);
方法调用:1、通常方法:str.charAt(1);
2、反射方法:charAt.invoke(str, 1);
如果传递给Method对象的invoke()方法一个参数(null,args),表明该Method对象对应的方法是一个静态方法。
|