轻轻松松明白什么是反射,反射有什么用,简单上手反射以及反射的优缺点

您所在的位置:网站首页 java反射有啥用 轻轻松松明白什么是反射,反射有什么用,简单上手反射以及反射的优缺点

轻轻松松明白什么是反射,反射有什么用,简单上手反射以及反射的优缺点

2023-07-19 09:09| 来源: 网络整理| 查看: 265

1. 什么是反射

反射可以动态获取类信息并创建对象、执行方法、属性赋值等,通过反射,我们就可以通过字节码文件反推得到源代码。

 

2.反射怎么用

2.1 在使用反射前,我们需要介绍4个类,分别是java.lang.Class、java.lang.reflect.Constructor、java.lang.reflect.Method以及java.lang.reflect.Field。因为对于一个字节码文件来说,其实就是一个类(先不考虑接口、数组等对象),一个类则主要是4部分:类信息、属性、构造器和方法。所以当我们拥有了这4个类,也就可以通过字节码来进行操作了。需要被反射的类如下所示。

class Reflect{ static{ System.out.println("static code seg\n"); } private int no; private String name; public Reflect(){ System.out.println("no param constructor\n"); } public Reflect(int no){ this.no = no; System.out.println("int constructor: " + no + "\n"); } public Reflect(int no, String name){ this.no = no; this.name = name; System.out.println("int--String constructor: " + no + name + "\n"); } private void sout(){ System.out.println("out"); } public int testInt(int i, String s){ System.out.println("testInt be invoked: " + i + " " + s); return 20; } public String testString(double i, boolean b){ System.out.println("testString Be invoked"); return "abc"; } }

2.2 为了反推得到源代码,我们首先要得到类,得到类的Class对象有3种方式:①Class.forName("全限定类名");②通过该类的对象调用getClass()方法;③xxx.class。

这三者完全等价,比较结果都为true,如下图。

2.3 得到类后,我们可以调用构造器创建对象。

2.4 反射属性,进行属性相关的操作

2.5 反射方法

 

3. 反射的优缺点

优点:①通过配置文件设定要反射的类,即可自动完成对象的实例化,然后进行相应操作,完全不需要更改java源代码,提高了程序的灵活性和拓展性。

缺点:①打破封装、私有属性会被访问;②反射机制是动态解析的,JVM无法进行代码优化。

 

附录:最终代码及结果 import java.lang.reflect.*; public class ReflectTest02 { public static void main(String[] args) throws Exception { // 都会进行类加载,类加载会执行静态代码块,静态代码块只执行一次 Class c = Class.forName("Reflect"); Class reflectClass = Reflect.class; Reflect reflect = new Reflect(); Class


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3