Java反射机制

反射的定义

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

反射所需的类

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

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

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

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

反射API

使用反射API获取当前Java虚拟机中的类、接口、成员变量、方法等信息。
类:
java.lang.Class#public static Class<?> forName(String className) throws ClassNotFoundException
构造器:
java.lang.Class#public Constructor<T> getConstructor(Class<?> ... parmeterTypes) throws NosuchMethod Exception, SecurityException
java.lang.Class#public Contructor<T> 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);
    }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述 Java反射机制定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法...
    CoderZS阅读 5,542评论 0 26
  • 基本概念 java的反射机制是动态获取类的信息以及动态调用对象的方法。这种机制允许程序在运行时通过reflecti...
    YONGSSU的技术站点阅读 4,117评论 0 10
  • 导语 反射机制是Java程序开发语言的重要特征之一。 主要内容 认识反射 理解反射作用 利用反射来调用类的结构 具...
    一个有故事的程序员阅读 3,865评论 2 5
  • 一、概述 1、Java反射机制(Java-Reflect): 在运行状态中,对于任意一个类,都能够知道这个类中的所...
    年少懵懂丶流年梦阅读 9,964评论 0 5
  • 写在前面的话:很多人会说我直接new一个对象不就完了么,干嘛还用反射来获取对象。因为new属于静态编译,而反射属于...
    iDaniel阅读 12,752评论 1 4

友情链接更多精彩内容