大家好,又见面了,我是你们的朋友全栈君。
将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.class对象。
将Java类的二进制代码合并到JVM的运行状态之中的过程。
将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后在堆中生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口。
package com.reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test03 {
public static void main(String[] args) throws Exception {
//获得class对象
Class c1 = Class.forName("com.reflection.User");
//1、构造一个对象,本质是无参构造器
User user1 = (User) c1.newInstance();
System.out.println(user1);
//2、通过构造器创建对象
Constructor constructor = c1.getDeclaredConstructor(int.class, String.class, int.class);
User user2 = (User) constructor.newInstance(1,"郭一诺",1);
System.out.println(user2);
//3、通过反射调用普通方法
User user3 = (User) c1.newInstance();
Method setName = c1.getDeclaredMethod("setName", String.class);
//invoke激活
setName.invoke(user3,"素小暖");
System.out.println(user3.getName());
//4、通过反射操作属性
User user4 = (User) c1.newInstance();
Field name = c1.getDeclaredField("name");
//true:取消Java语言访问检查
name.setAccessible(true);
name.set(user4,"素小暖2");
System.out.println(user4.getName());
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169726.html原文链接:https://javaforall.cn