Java反射

1、什么是Java类中的反射?

当程序运行时,允许改变数据结构或者变量类型,这种语言称为动态语言;然而Java不是动态语言;但是它提供了一个类似的机制:反射;

Reflection 是Java语言的开发特征之一,它允许运行中的Java程序获取自身的信息,并且可以操作类和对象的属性。

反射的核心:是 JVM 在运行时才动态加载的类或调用方法或属性,他不需要事先(写代码的时候或编译期)知道运行对象是谁。

2、Java反射框架提供的功能?

1、在运行时判断任意一个对象所属的类

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

3、在运行时判断任意一个类所具有的成员变量和方法

4、在运行时调用一个对象的方法

3、反射的用途?

1、当在使用IDE时,输入一个对象或者类,调用他们的属性和方法时,输入.点号时,编译器就会自动列出它的属性或方法,这就用到了反射;

2、开发各种通用框架:比如spring是配置化的,通过xml文件配置JavaBean,Action之类的,为了保证框架的通用性,他们可能根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射----运行时动态需要加载的对象;

4、反射的基本运用?

反射相关类一般都在 java.lang.relfect包里

步骤:

1、获得Class对象

  (1)使用Class类的forName()静态方法:

 Class.forName(driver)(JDBC开发用此方法加载驱动)

  (2)直接获取一个对象的class:

Class<?> classInt = Integer.TYPE;

  (3)调用一个对象的getClass()方法:

StringBuilder str = new StringBuilder("123");
Class<?> klass = str.getClass();

2、判断是否为某个类的实例

一般地,我们用 instanceof关键字来判断是否为某个类的实例。同时我们也可以借助反射中Class对象的 isInstance()方法来判断是否为某个类的实例,它是一个 Native 方法:

3、创建实例(两种方式)

  (1)使用Class对象的newInstance()方法来创建对象对应类的实例。

Class<?> c  = String.calss;
Object str = c.getInstance();

  (2)先通过 Class 对象获取制定的 Constructor 对象,在调用 Constructor 对象的 newInstance() 方法来创建实例。这种方法可以用指定的构造器构造类的实例。

   //获取String所对应的Class对象
   Class<?> c = String.class;
  //获取String类带一个String参数的构造器
  Constructor constructor = c.getConstructor(String.class);
  //根据构造器创建实例
  Object obj = constructor.newInstance("23333");
  System.out.println(obj); 
posted @ 2020-10-05 15:57  小白不爱  阅读(145)  评论(0编辑  收藏  举报