关于java反射的个人理解

突然听到反射这个词,硬是想不起来什么概念,所以上网查了一下,决定写一篇文章加深印象
百度上说JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
然后我就突然想起来了。
java的反射是通过获取类中的字节码对象。也就是Class。通过Class能够获取类的对象。当然也就能获取对象的属性和方法啦。这种东西能干什么?我还是个菜鸟,只知道可以在运行时动态地加载配置文件(因为配置文件经常变化)
查一下文档,有关的类有java.lang.Class和java.lang.reflect
接下来就是操作了,首先是获取Class。有三种方式

第一种
String str=new String();
Class cstr=str.class;
第二种
String str =new String();
Class cstr=str.getClass();
第三种
String str =new String();
Class cstr=Class.forName;

然后用Class可以生成对象,用newInstance()方法

//创建实例
Object o =cstr.newInstance();

第二个是获取对象的方式是通过构造器
相关的类是java.lang.reflect.constructor.

//获取String所对应的Class对象
Class  c = String.class;
//获取String类带一个String参数的构造器
Constructor constructor = c.getConstructor(String.class);
//根据构造器创建实例(带着23333字符串参数)
Object obj = constructor.newInstance("23333");

写到这里我已经可以去吃饭了。
获取实例的属性和方法应该在类java.lang.reflect里面
查了一下文档,相关的类有
java.lang.reflect.Field; (可以获取属性)
java.lang.reflect.Method; (可以获取方法)

猜你喜欢

转载自blog.csdn.net/zmysn_a/article/details/78626970
今日推荐