Java知识点总结(反射-介绍)
@(Java知识点总结)[Java, 反射]
反射
- 程序在 运行状态中 ,可以动态加载一个只有名称的类 (动态调用类的所有属性和方法)
Class c = Class.forName("com..test.User");
- 加载完类之后,在堆内存中,就产生了一个 Class 类型的对象(一个类只有一个 Class 对象)。
- 这个对象就包含了完整的类的结构信息,通过这个对象我们可以看到类的结构。这个对象就像一面镜子,透过这个镜子看到类 的结构,所以,我们形象的称之为:反射。
反射的常见作用:
- 动态加载类、动态获取类的信息(属性、方法、构造器)
- 动态构造对象
- 动态调用类和对象的任意方法、构造器
- 动态调用和处理属性
- 获取泛型信息
- 处理注解
示例:
public class Test01 {
// 一个类只对应一个 Class 对象
private static void test1() throws ClassNotFoundException {
String path = "com.gs.Student";
Class clazz1 = Class.forName(path);
Class clazz2 = Class.forName(path);
System.out.println(clazz1.hashCode());
System.out.println(clazz2.hashCode());
/*366712642
366712642*/
}
// 数组类类型
private static void test2() {
Class intClazz =int.class;
int[] arr01 = new int[10];
int[] arr02 = new int[30];
int[][] arr03 = new int[30][3];
double[] arr04 = new double[10];
System.out.println(intClazz.hashCode()); //1829164700
System.out.println(arr01.getClass().hashCode()); //2018699554
System.out.println(arr02.getClass().hashCode()); //2018699554
// arr01 == arr02 都是一维同一类型的对象
System.out.println(arr03.getClass().hashCode()); //1311053135
System.out.println(arr04.getClass().hashCode()); //118352462
}
// 获取类的类型
private static void test3() {
String path = "com.gs.Student";
Class strClazz = path.getClass(); //对象获取类的类型
Class strClazz2 = String.class; //类获取类的类型
System.out.println(strClazz == strClazz2); //true
}
public static void main(String[] args) {
try {
test1();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
test2();
test3();
}
}