Java反射机制(初步认识)

反射的实质:

就是在得到Class对象之后,反向获取Class对象的对象。
解读:Class的对象好比一个类,反向获取Class对象(也就是类)的对象。
其中类字面常量反射,通过把xxx.class字节码文件反射回去生成编译前的类。
不清楚Class类的可以点击查看本人另一篇博文:Class与class的区别

对Class类解读:

我们通常认为类是对象的抽象和集合,Class就相当于是对类的抽象和集合。
也可以认为对象是类的实例,类是Class的实例。

运用反射机制:

在获得Class对象后我们可以调用:
Class对象.getDeclaredConstructor().newInstance()
方法去获取Class对象的对象
例子:

package Task;
import org.junit.Test;

public class Try0 {
    @Test
    public void toTry() throws Exception {
        //forName方法:参数为其类的路径
        Class a = Class.forName("Task.Try1");
        System.out.println(a);

        //通过对象得到类
        Try1 try1 = new Try1();
        Class b = try1.getClass();
        System.out.println(b);

        //类字面常量,通过把xxx.class字节码文件反射回去生成编译前的类
        Class c = Try1.class;
        System.out.println(c);

        //JAVA9之后废弃newInstance()方法
        //反射机制,用Class的对象a(Try1类型) 生成了Try1的对象try2,并且调用了try2的toPrint方法。 
        Try1 try2 = (Try1) a.getDeclaredConstructor().newInstance();
        System.out.println(try2+try2.toPrint());
        
        //反射机制,用Class的对象b(Try1类型) 生成了Try1的对象try3,并且调用了try3的toPrint方法。
        Try1 try3 = (Try1) b.getDeclaredConstructor().newInstance();
        System.out.println(try3+try3.toPrint());
        
        //反射机制,用Class的对象c(Try1类型) 生成了Try1的对象try4,并且调用了try4的toPrint方法。
        Try1 try4 = (Try1) c.getDeclaredConstructor().newInstance();
        System.out.println(try4+try4.toPrint());
    }
}

class Try1 {
    public String toPrint(){
        return "调用了toPrint";
    }
}

输出结果:
在这里插入图片描述
可以看到生成了不同的Try1对象,和new出来的对象一样,可以使用对象的方法等等。

猜你喜欢

转载自blog.csdn.net/MrYushiwen/article/details/107380536
今日推荐