最近整理在框架的知识点中很多地方用到反射有点遗忘了,顺便回忆了下,希望能帮到各位。 反射的概念 当一个class文件被加载到内存中的时候,那么jvm就会马上对该class文件的成员进行解剖,然后将class文件的成员数据封装到一个Class对象中,我们如果可以获取到Class对象,那么我们就可以通过该Class对象来操作该类的所有成员。 获取class对象的方式 首先我们先自定义一个类 package cn.itcast.reflect;
public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } public void eat(int num,String[] arr){ System.out.println(name+'吃'+num+'斤米饭'); } public static void sleep(int hours){ System.out.println('睡'+hours+'小时'); } private void study(){ System.out.println(name+'熬夜学习...'); } @Override public String toString() { return '姓名:'+ this.name+' 年龄:'+this.age; }
}
获取方式1:通过Class.forName获取Class对象 package cn.itcast.reflect;
public class Demo1 { public static void main(String[] args) throws Exception { //通过Class.forName获取Class对象. Class clazz1 = Class.forName('cn.itcast.reflect.Person'); System.out.println('clazz1:'+clazz1.getSimpleName()); } }
输出结果为:class1:Pserson 获取方式2:通过类名获取 package cn.itcast.reflect;
public class Demo1 { public static void main(String[] args) throws Exception { //方式1:通过Class.forName获取Class对象. Class clazz1 = Class.forName('cn.itcast.reflect.Person'); //System.out.println('clazz1:'+clazz1.getSimpleName()); //方式2:可以通过类名获取Class对象。 Class clazz2 = Person.class; System.out.println('是同一个对象吗?'+(clazz1==clazz2)); } }
输出结果:是一个对象吗?true 获取方式3:可以通过对象获取Class对象 package cn.itcast.reflect;
public class Demo1 { public static void main(String[] args) throws Exception { //方式1:通过Class.forName获取Class对象. Class clazz1 = Class.forName('cn.itcast.reflect.Person'); //System.out.println('clazz1:'+clazz1.getSimpleName()); //方式2:可以通过类名获取Class对象。 Class clazz2 = Person.class; //System.out.println('是同一个对象吗?'+(clazz1==clazz2)); //方式3: 可以通过对象获取Class对象 Class clazz3 = new Person().getClass(); System.out.println('是同一个对象吗?'+ (clazz2 == clazz3)); } }
输出结果:是同一个对象吗?true 以上就是获取class对象的三种方式你了解了吗?
|