《Java 反射全攻略1》

发布于:2025-07-09 ⋅ 阅读:(17) ⋅ 点赞:(0)

反射就是剖析类对象,动态获取类信息 类内容 类组成的能力

获取类信息的三种方式

class.forname()

对象.getClass()

类名.class

以下是代码实现

package com.qcby.c_reflection;

public class DemoTest {
    public static void main(String[] args) throws ClassNotFoundException {
        //1 对象.getClass()
        Person person = new Person();
        Class<? extends Person> aClass = person.getClass();
        System.out.println("aClass = " + aClass);

        System.out.println("===============");
        //2 类。class
        Class<Person> personClass = Person.class;
        System.out.println("personClass = " + personClass);

        //3Class.forName
        Class<?> aClass1 = Class.forName("com.qcby.c_reflection.Person");
        System.out.println("aClass1 = " + aClass1);

    }
}

反射构造方法&暴力反射

反射所有的public构造方法

代码实现

package com.qcby.c_reflection;

import java.lang.reflect.Constructor;

public class DemoTest2 {
    public static void main(String[] args) {
        Class<Person> personClass = Person.class;
        //获取所有public的构造
        Constructor<?>[] constructors = personClass.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }

    }
}

获取空参的构造方法

代码实现

package com.qcby.c_reflection;

import java.lang.reflect.Constructor;

public class DemoTest3 {
    public static void main(String[] args) throws Exception{
        Class<Person> personClass = Person.class;
        Constructor<Person> constructor = personClass.getConstructor();
        System.out.println("constructor = " + constructor);

        /**
         * 好比是 Person = new Perosn()
         */
        Person person = constructor.newInstance();

        System.out.println("person = " + person);


    }
}

获取所有构造函数,包括private

代码实现

package com.qcby.c_reflection;

import java.lang.reflect.Constructor;

public class DemoTest4 {
    public static void main(String[] args) {
        Class<Person> personClass = Person.class;
        Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println("declaredConstructors = " + declaredConstructor);
        }
    }
}

获取private以及更改修改权限

constructor.setAccessible(true); 为true 表示可以更改private

package com.qcby.c_reflection;

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

public class DemoTest5 {
    public static void main(String[] args) throws Exception {
        Class<Person> personClass = Person.class;
        Constructor<Person> constructor = personClass.getDeclaredConstructor(String.class);
        constructor.setAccessible(true);
        Person person = constructor.newInstance("山上");
        System.out.println(person);
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到