java 反射 通俗易懂

笔主也是很长时间没有理解反射的概念;突然灵光一闪,理解一点,喜欢可以帮助大家;

首先我们建立一个person类

public class Person {
    String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    //包含一个带参的构造器和一个不带参的构造器
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Person() {
        super();
    }
}

再建立一个测试类

public class test {
    public static void main(String[] args) {

        Class clazz = Person.class;
        Field[] fields = clazz.getDeclaredFields();
        Method[] declaredMethods = clazz.getDeclaredMethods();
        Constructor[] constructors = clazz.getConstructors();
        System.out.println();  //插入断点
    }
}

运行结果

java 反射 通俗易懂

 

这就是反射。。。

 

可能会问,这个有什么用

一般的业务开发,我们很少要用到反射

1、反射的好处是:可以在运行时确认对象以及方法

2、下面举个简单的例子来说下反射的运用场景:

  假如一款游戏有一个配置文件,配置文件里有个renderType设置了游戏启动时调用哪个RenderHandler来渲染游戏,

  (RenderHandler:一个接口,有一个render方法,HighRenderHandler、LowRenderHandler、MiddleRenderHandler等一共10个实现类)

  那么游戏启动时必须获得一个RenderHandler来渲染游戏,现在有两种方式,一种是使用switch判断

 

 1 //首先获得配置文件里的renderType
 2 switch(renderType){
 3      case "low":renderHandler=new LowRenderHandler();
 4      case "high":renderHandler=new HighRenderHandler();
 5      case "middle":renderHandler=new MiddleRenderHandler();
 6      case "a":renderHandler=new ARenderHandler();
 7      case "b":renderHandler=new BRenderHandler();
 8      case "c":renderHandler=new CRenderHandler();
 9      case "d":renderHandler=new DRenderHandler();
10      case "e":renderHandler=new ERenderHandler();
11      case "f":renderHandler=new FRenderHandler();
12      case "g":renderHandler=new GRenderHandler();
13      default:renderHandler=new LowRenderHandler();
14  }
15  renderHandler.render();

    

另一种是使用反射:

1 //首先从配置文件里获得renderType
2 RendeHandler renderHandler=(RendeHandler)Class.forName(rederType).newInstance(); 
3 renderHandler.render();

 

3、switch用了14行代码,而反射只使用了2行代码,现实中可能见不到这么傻的例子,但是这确实有助于理解反射。

 

 

参考链接

https://www.cnblogs.com/2333/p/5852969.html