首页 > 其他分享 >动态创建对象执行方法

动态创建对象执行方法

时间:2023-03-26 14:46:01浏览次数:36  
标签:嘟嘟 动态 name 创建对象 User println c1 执行 class

package edu.wtbu;

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

public class Demo01 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
//获取Class对象
Class<?> c1 = Class.forName("edu.wtbu.User");

//实例化User类
//User user = (User) c1.newInstance();//本质是调用类的无参构造器
//System.out.println(user);//User{name='null', id=0, age=0}

//通过构造器创造对象
Constructor<?> constructor = c1.getDeclaredConstructor(String.class, int.class, int.class);
User user2 = (User) constructor.newInstance("嘟嘟嘟", 001, 18);
System.out.println(user2);//User{name='嘟嘟嘟', id=1, age=18}

//通过反射调用普通方法
User user3 = (User) c1.newInstance();
//通过反射获取一个方法
Method setName = c1.getDeclaredMethod("setName", String.class);
setName.invoke(user3,"嘟嘟嘟"); //invoke:激活的意思,invoke(对象,”方法的值“)
System.out.println(user3.getName());

//通过反射操作属性
User user4 = (User)c1.newInstance();
Field name = c1.getDeclaredField("name");//嘟嘟嘟

//不能直接操作私有属性,我们需要关闭程序的安全检测,属性或者方法的setAccessible(true)
name.setAccessible(true); //setAccessible:启用和禁用访问安全检查的开关,true是取消语言访问检查。 作用:1.提睾反射的效率 2.使原本无法访问的私有成员也可以访问
name.set(user4,"嘟嘟嘟");
System.out.println(user4.getName());//嘟嘟嘟


}
}

标签:嘟嘟,动态,name,创建对象,User,println,c1,执行,class
From: https://www.cnblogs.com/123456dh/p/17258638.html

相关文章