Java反射机制

反射的定义

Java本身属于静态语言,但是有着一个非常突出的动态机制;反射,即在程序运行时加载、探知、使用编译期间完全未知的classes。从class对象中获取构造函数、成员变量、方法、类等元素的反射对象,并通过这些对象对目标类对象进行操作。

反射所需的类

Class类:所在位置 java.lang.Class 不提供public构造方法,由JVM通过调用类加载器的defineClass方法自动构造

Constructor类:所在位置 java.lang.reflect.Constructor T-在其中声明构造方法的类

Method类:类或接口上单独某个方法的信息,所反映的方法可能是某类方法或实例方法(包括抽象方法)

Field类:提供有关类或接口的单个字段的信息,以及对它的动态访问权限。

反射API

使用反射API获取当前Java虚拟机中的类、接口、成员变量、方法等信息。
类:
java.lang.Class#public static Class forName(String className) throws ClassNotFoundException
构造器:
java.lang.Class#public Constructor getConstructor(Class ... parmeterTypes) throws NosuchMethod Exception, SecurityException
java.lang.Class#public Contructor getDeclareConstructor(Class... paramterTypes) throws NosuchException, SecurityException
成员变量
java.lang.Class#public Field getField(String name) throws NoshFieldException, SecurityException
java.lang.Class#public Field getDeclaredField(String name) throws NoshFieldException, SecurityException

简单举例

//这是一个简单的模型对象
public class User {

    private String name;
    private int 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 "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class UserReflect {
    public static void main(String[] args) {
        //1. 正常情况 使用new关键字
        User user = new User();
        System.out.println(user);
    }
}
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        //使用反射。 Class.forName(全限定名);
        Class clazz = Class.forName("User");
        User user = (User) clazz.newInstance();
        System.out.println(user);
    }

反射威力强大,只要稍微理解一下,很容易掌握。网上的例子也实在是很多了,没有必要重复举这么多例子。

你可能感兴趣的:(Java反射机制)