2.1 反射机制 Reflection(反射)

霄
2023-03-25 / 0 评论 / 40 阅读 / 正在检测是否收录...

Java反射机制Reflection

Reflection(反射)是Java被视为准动态语言的关键,反射机制允许程序在执行期间借助ReflectionAPI去的任何类的内部信息(无视private等),并能够直接操作任意对象的内部属性及方法

Class c = Class.forName("java.lang.String");

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射

正常方式:引入需要的“包类”名称—>通过new实例化—>取得实例对象

反射方式:实例化对象—>getClass()方法—>得到完整的“包类”名称

  • Java反射(Reflection)框架主要提供以下功能:
  1. 在运行时判断任意一个对象所属的类;

  2. 在运行时构造任意一个类的对象;

  3. 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);

  4. 在运行时调用任意一个对象的方法

  • Java反射(Reflection)的主要用途
  1. 工厂模式:Factory类中用反射的话,添加了一个新的类之后,就不需要再修改工厂类Factory了

  2. 数据库JDBC中通过Class.forName(Driver).来获得数据库连接驱动

  3. 分析类文件:毕竟能得到类中的方法等等

  4. 访问一些不能访问的变量或属性:破解别人代码

  • Java反射(Reflection)的基本运用

  获取Class有一下三种方法:

  1. 使用Class类的forName静态方法
//在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),   
//这通过java.lang.Class类的静态方法forName(String  className)实现。   
//例如:   
try{   
//加载MySql的驱动类   
Class.forName("com.mysql.jdbc.Driver") ;   
}catch(ClassNotFoundException e){   
//System.out.println("找不到驱动程序类 ,加载驱动失败!");   
e.printStackTrace() ;   
}   
//成功加载后,会将Driver类的实例注册到DriverManager类中。
  1. 直接获取某一个对象的class
Class<?> klass = int.class; 
Class<?> classInt = Integer.TYPE;
  1. 调用某个对象的getClass()方法
public class Test{
    public static void main(String[] args) {
        Demo demo=new Demo();
        System.out.println(demo.getClass().getName());
    }
}
扫描二维码,在手机上阅读!
87

评论

博主关闭了当前页面的评论