首页 > 代码库 > Java Reflection

Java Reflection

Java语言的反射机制

 

1. Java反射的含义:获取应用中正在运行的Java对象。

2. Java反射机制: 在运行的程序中,对于任意的类,都可以知道这个类的属性、方法以及构造函数,对于任意对象都可以调用它的方法。这种在运行时动态获取和修改类的信息的能力称为Java反射机制。

3. Java反射的功能:

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

  2) 在运行时创建任意一个类的对象

  3) 在运行时获取任意一个类的所有成员变量、方法以及构造函数

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

  5) 作为动态代理的基础,生成代理类

4. Java反射的实现类

  1) Class : Class类表示Java应用运行时的类或接口

  2) Field : 提供有关类或接口的属性信息的对象

  3) Method : 提供有关类或接口方法信息的对象

  4) Constructor : 提供有关类构造函数的信息

  注意:Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/ 属性/构造方法/访问权限)都需要它来实现。

5. 编写Java反射程序的步骤:

  1) 首先获取一个类或对象的Class对象,方法如下:

    Class clazz1 = ClassName.class;

    Class clazz2 = Class.forName("com.znker.reflection.ClassName");

    Class clazz3 = Object.getClass();

  2) 调用Class对象中的方法来获取一个类的的属性、方法以及构造函数的对象

6. Java反射的使用案例

  1) 获取一个对象的包名和类名

  

package com.znker.reflection;public class ReflectionDemo {    // other codes}/** * Java 反射案例:获取一个对象的完整包名和类名 *  */public class ReflectionTest {    public static void main(String[] args) {        ReflectionDemo demo = new ReflectionDemo();        System.out.println(demo.getClass().getName());    }}

  2) 实例化Class对象

  

package com.znker.reflection;/** * 三种实例化Class对象的方式 *  * */public class ReflectionTest {    @SuppressWarnings({ "unused", "rawtypes" })    public static void main(String[] args) {        // 最常用的形式        try {            // @param 类的全路径名            Class<?> clazz1 = Class.forName("com.znker.reflection.Reflection");        } catch (ClassNotFoundException e) {            e.printStackTrace();        }                Class clazz2 = ReflectionDemo.class;                Class clazz3 = new ReflectionDemo().getClass();    }}

  3) 利用无参构造函数创建对象

  

package com.znker.reflection;public class Person {    private String name;    private int age;    public Person() {    }    public Person(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "[" + this.name + " , " + this.age + "]";    }}package com.znker.reflection;public class Refdemo {    public static void main(String[] args) {        Class<?> demo = null;        try {            demo = Class.forName("com.znker.reflection.Person");        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        Person person = null;        try {            // 通过无参构造函数实例化对象, 构造一个与Class有关的对象            person = (Person) demo.newInstance();                    } catch (InstantiationException | IllegalAccessException e) {            e.printStackTrace();        }        person.setName("John");        person.setAge(18);        System.out.println(person);    }}

 

Java Reflection