第三:反射

本文详细介绍了如何通过Java反射机制获取类的Class对象,并通过Class对象调用类的方法,包括使用类的.class语法、实例的getClass()方法、Class类的forName()方法以及反射实现调用类的构造方法和方法的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.

如何获得某个类所对应的Class对象?

1.通过类的.class语法
2.a.通过类的实例的getClass()方法(Object里有这个方法:返回此 对象 的运行时类。)
b.通过第一种方法得到的结果,然后调用getClass()方法也可以
3.通过Class类的静态方法forName()

二.

通过反射方式来调用某个对象的方法的步骤

1.得到该对象所对应的Class对象
2.通过该Class对象得到该类的构造方法所对应的Constructor对象
3.通过该Constructor对象的newInstance方法得到该类的一个实例(对象)

4.通过该Class对象得到该方法所对应的Method对象

5.通过该Method对象的invoke方法进行调用

public class DemoTest2 {

	public DemoTest2(String s1, String s2) {
		System.out.println(s1);
		System.out.println(s2);
	}

	public void output(String str) {
		System.out.println("hello:" + str);
	}

	public static void main(String[] args) throws Exception {
		/**
		 * 通过反射实现
		 * */
		Class<DemoTest2> clazz = DemoTest2.class;
		// 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
		Constructor<DemoTest2> cons = clazz.getConstructor(new Class[] {
				String.class, String.class });
		// 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
		Method method = clazz.getMethod("output", new Class[] { String.class });

		// 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
		DemoTest2 test = cons.newInstance(new Object[] { "abc", "xyz" });// 如果上面不使用泛型,这块就要强制类型转换

		// 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法
		method.invoke(test, new Object[] { "zhangsan" });

		/**
		 * 通过原始的写法显示
		 * */
		// new DemoTest2("Java","HuanHuan").output("zhangsan");
	}

}


三.

如果想调用类的带参数的构造方法为类生成实例,那么只能通过Constructor类的newInstance方法实现

如果想调用类的不带参数的构造方法为类生成实例,那么就有两种方式:
1.还是通过Constructor类的newInstance方法实现
2.通过Class类的newInstance方法实现



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值