一文教你彻底玩懂Java反射

Posted super码王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文教你彻底玩懂Java反射相关的知识,希望对你有一定的参考价值。

反射核心思想的图解

所谓的反射是将一个类中的各个成员映射成相对应的Java类型

反射获取构造方法

我们以 User 类为例进行讲解:

package com.wust.yq;

public class User 

    //属性字段
    private String username = "易齐";
    int age = 30;
    protected float weight = 60.5F;
    public double height = 180.5;

    //构造方法
    public User() 
    

    public User(String name, int age) 

    

    //普通方法
    @Override
    public String toString() 
        return "User" +
                "username='" + username + '\\'' +
                ", age=" + age +
                ", weight=" + weight +
                ", height=" + height +
                '';
    

获取构造方法的步骤:

package com.wust.yq;

import java.lang.reflect.Constructor;

public class Demo01 
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException 
        //1、获取字节码文件
        Class userClass = Class.forName("com.wust.yq.User");
        //所谓的反射是将一个类中的各个成员映射成相对应的Java类型
        //2、需要创建一个对象,(创建对象是一定需要调用构造方法的)
        //调用User类中的无参构造方法创建对象

        //获取所有的构造方法
//        Constructor[] constructors = userClass.getConstructors();
//        for (Constructor constructor : constructors) 
//            System.out.println(constructor);
//        

        //获取指定构造方法
        Constructor constructor1 = userClass.getConstructor();
        System.out.println(constructor1);

        Constructor constructor2 = userClass.getConstructor(String.class, int.class);
        System.out.println(constructor2);
    

 调用构造方法的核心:

package com.wust.yq;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Demo01 
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException 
        //1、获取字节码文件
        Class userClass = Class.forName("com.wust.yq.User");
        //所谓的反射是将一个类中的各个成员映射成相对应的Java类型
        //2、需要创建一个对象,(创建对象是一定需要调用构造方法的)
        //调用User类中的无参构造方法创建对象

        //获取所有的构造方法
//        Constructor[] constructors = userClass.getConstructors();
//        for (Constructor constructor : constructors) 
//            System.out.println(constructor);
//        

        //获取指定构造方法
        Constructor constructor1 = userClass.getConstructor();
        System.out.println(constructor1);

        User user = (User) constructor1.newInstance();
        System.out.println(user);

    

运行效果

以上是关于一文教你彻底玩懂Java反射的主要内容,如果未能解决你的问题,请参考以下文章

一文彻底搞懂 Python中的描述器反射

深度长文教你彻底掌握C++/C指针:指针和数组与字符串

深度长文教你彻底掌握C++/C指针:指针和数组与字符串

一文彻底教会你玩转java动态代理

一文彻底教会你玩转java动态代理

一文彻底教会你玩转java动态代理