Java反射机制
2017-11-05 19:22
281 查看
关于Class对象
每个类都有一个Class对象,存放在.class文件中
为了生成类对象,JVM将使用“类加载器”子系统
所有的类都是在第一次使用时动态加载到了JVM中
Java程序在开始执行时并非全部加载Class对象,而是在其需要时才加载
当需要Class对象时,类加载器首先查找这个对象是否已经加载,若没有加载则去.class文件中加载对应的Class对象。一旦Class对象被加载,则其将会用来创建所有的这个类的对象
创建Class对象的方法
Class对象的一些方法
每个类都有一个Class对象,存放在.class文件中
为了生成类对象,JVM将使用“类加载器”子系统
所有的类都是在第一次使用时动态加载到了JVM中
Java程序在开始执行时并非全部加载Class对象,而是在其需要时才加载
当需要Class对象时,类加载器首先查找这个对象是否已经加载,若没有加载则去.class文件中加载对应的Class对象。一旦Class对象被加载,则其将会用来创建所有的这个类的对象
创建Class对象的方法
Class clazz = null; //1。通过forName方法加载 clazz = Class.forName("uestc.edu.reflection.Student"); //2。通过类.class加载 clazz = Student.class; //3。通过对象的getClass方法加载 clazz = new Student().getClass();
Class对象的一些方法
//1.获取类名 System.out.println(clazz.getCanonicalName());//获取全类名 System.out.println(clazz.getSimpleName());//获取不含包的类名 //2.获取父类的Class对象 System.out.println(clazz.getSuperclass()); //3.创建类对象 Object object = clazz.newInstance(); //4.获取Field对象 Object object = clazz.newInstance(); Field field = clazz.getDeclaredField("age");//获取自身的属性getField是获取公有属性 field.setAccessible(true);//若属性是私有,需要通过此方法设置权限,method同理 field.setInt(object,12);//为属性赋值 int age = field.getInt(object);//获取属性值 //5.获取Method对象 Method method = clazz.getDeclaredMethod("setAge", int.class);//获得自身的方法getMethod是获取公有方法 method.invoke(object,20);//操作类的方法