任务描述
本关任务:编写一个3种反射方法获取相应对象。
相关知识
1.1 什么是 Java 的反射
Java 反射是可以让我们在运行时获取类的函数、属性、父类、接口等 Class 内部信息的机制。通过反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值,即使方法或属性是私有的的也可以通过反射的形式调用,这种“看透 class”的能力被称为内省,这种能力在框架开发中尤为重要。 有些情况下,我们要使用的类在运行时才会确定,这个时候我们不能在编译期就使用它,因此只能通过反射的形式来使用在运行时才存在的类(该类符合某种特定的规范,例如 JDBC),这是反射用得比较多的场景。
还有一个比较常见的场景就是编译时我们对于类的内部信息不可知,必须得到运行时才能获取类的具体信息。比如 ORM 框架,在运行时才能够获取类中的各个属性,然后通过反射的形式获取其属性名和值,存入数据库。这也是反射比较经典应用场景之一。
package step1; public class Reflection{ public static void main(String[] args) { Class <?> studentClass1 = null; Class <?> studentClass2 = null; Class <?> studentClass3 = null; // ---------------------Begin------------------------ // Studnet 类的路径为 "step1.Student" Student p1=new Student(); try { studentClass1=Class.forName("step1.Student"); }catch (ClassNotFoundException e) { throw new RuntimeException(e); } studentClass2=p1.getClass(); studentClass3=Student.class; // ---------------------End------------------------ System.out.println(studentClass1); System.out.println(studentClass2); System.out.println(studentClass3); } }
哦吼吼,代码需要登录才能复制,而块引用不需要,但是代码有高亮缩进,看着比较清爽,所以两者结合。。。。也不会同时具有两者的优点的好像。。。