概述
1.什么是反射
Java反射机制就是在程序运行的时候,动态的去获取并调用任意一个类的属性、方法的机制
通过反射获取到的各种信息会在java中映射成一个个单独的类,如属性对应的类(Field),方法对应的类(Method),构造对应的类(Constructo)等等,而我们就可以通过这些类来对反射中获取的数据进行操作
2.为什么需要反射
Java是先编译再运行的语言,程序中的对象在编译期就固定了,但是在程序运行时可能需要动态加载某些类,而这些类在编译前没有使用,所以加载不到JVM里。这时我们就可以通过反射,在运行时动态地创建对象
增加程序的灵活性,避免写死,解耦
比如说有类A以及类B,某段程序需要的对象实例不确定,有时候需要A,有时候需要B,我们不可能每次去修改代码,这时就可以通过反射,去实现动态的根据需求创建不同的实例
3.反射怎么运用
对反射的调用是通过Class类中的方法实现的.所以我们先要获取到每一个字节码文件对应的Class类型的对象.
Class又是什么呢?
我们的.class文件通过类加载机制加载到内存种,在内存中这个字节码会被描述成Class类对象
获取Class对象有三种方式
这里要注意,每一个类只会有一个Class,重复创建也只会获取到同一个,获取到Class之后进行比较,可以得到全是true
//方式一:Class.forName("绝对路径");
Class class1 = Class.forName("com.zc.test");
//test是要获取的类,自定义
System.out.println("class1 = " + class1);
//方式二:类名.class
Class class2 = test.class;
System.out.println("class2 = " + class2);
//方式三:对象.getClass();
test test = new test();
Class class3 = test.getClass();
System.out.println("class3 = " + class3);
//比较三个对象
System.out.println(class1 == class2);//返回true
System.out.println(class1 == class3);//返回true
推荐使用第一种方式Class.forName("xx.xx.xx")
第二种需要导入要获取的类的包,依赖性较高
第三种都已经自己new了,反射略显多余
通过Class进行操作(只是一些常用比较简单的)
public static void main(String[] args) throws Exception {
text text=new text();
Class class1 = text.getClass();
//对变量的操作
//获取所有成员变量
Field[] fields = class1.getFields();
//获取指定名称的成员变量
Field name = class1.getField("属性名");
//获取成员变量name的值
Object value = name.get(text);
//修改ame的值
name.set(text, "张三");
System.out.println(text.name);//此时name就被修改成张三了
//对构造的操作
//获取无参构造
Constructor con = class1.getConstructor();
//通过无参构造创建实例对象
Object p1 = con.newInstance();
//获取有参
Object p2 = con.newInstance("xxx","xxx");
//获取所有构造方法
Constructor[] con2 = class1.getConstructors();
//对方法的操作
//获取无参方法
Method method = class1.getMethod("方法名");
//执行获取到的无参方法
method.invoke(text);
//获取有参方法
Method method1 = class1.getMethod("方法名", String.class);//第二个参数是方法参数的数据类型.class
//执行获取到的有参方法
method1.invoke(text, "张三"); //第二参数是被调用方法要用的参数
//获取 public 修饰的所有方法
Method[] methods = class1.getMethods();
for (Method methods1 : methods) {
//获取方法名
System.out.println(method.getName());
}
}
#自行总结编写,有错谅解,提示修改,不喜勿喷
###记得三连哦~
最后
以上就是伶俐长颈鹿为你收集整理的JAVA反射机制极简概括1.什么是反射2.为什么需要反射3.反射怎么运用###记得三连哦~的全部内容,希望文章能够帮你解决JAVA反射机制极简概括1.什么是反射2.为什么需要反射3.反射怎么运用###记得三连哦~所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复