天天看点

Java岗面试之—Java反射

一、反射机制的概念

Java岗面试之—Java反射

在 Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为 Java 语言的反射机制。

二、反射的主要功能

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

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

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

④在运行时调用任意一个对象的方法;

⑤生成动态代理。

通过java反射机制,可以在程序中访问已经装载到JVM中的java对象的描述,实现访问、检测和修改描述java对象本身信息的功能。java反射机制的功能十分强大,java.lang.reflect包中提供了对该功能的支持。

三、获取 Class 对象的 3 种方法

1.调用某个对象的

getClass()

方法

Person p = new Person();
Class clazz = p.getClass();
           

2.调用某个类的class属性

3.使用 Class 类中的

forName()

静态方法(最安全/性能最好)

四、通过反射可以获取到的主要描述信息

1.获取属性

  • getFields()

    :获取所有public类型的成员变量
  • getField(String name)

    :获取权限为public的指定成员变量
  • getDeclaredFileds()

    :返回此Class对象所表示的实体的所有成员变量,不包括继承的属性
  • getDeclaredFiled(String name)

    :返回此class对象所表示的类或接口的指定已声明成员变量

2.获取方法

  • getMethods()

    :获取所有public类型的方法

    3.获得构造方法

  • getConstructor():获得所有权限为public的构造方法

    4.获取其他信息

  • getName()

    :返回此Class对象所表示的实体全限定名称
  • newInstance()

    :创建Class对象所表示的类的新的实例化对象
  • getInterfaces()

    :获取该类实现的所有接口
  • getPackage()

    :获取此类的包

五、创建对象的两种方法

Class

对象的

newInstance()

  1. 使用 Class 对象的

    newInstance()

    方法来创建该 Class 对象对应类的实例,但是这种方法要求该 Class 对象对应的类有默认的空构造器。

调用

Constructor

对象的

newInstance()

2. 先使用 Class 对象获取指定的

Constructor

对象,再调用

Constructor

对象的

newInstance()

方法来创建 Class 对象对应类的实例,通过这种方法可以选定构造方法创建实例

//获取 Person 类的 Class 对象
 Class clazz=Class.forName("reflection.Person"); 
 //使用.newInstane 方法创建对象
 Person p=(Person) clazz.newInstance();
//获取构造方法并创建对象
 Constructor c=clazz.getDeclaredConstructor(String.class,String.class,int.class);
 //创建对象并设置属性
  Person p1=(Person) c.newInstance("李四","男",20);