java反射机制见解

本文详细介绍了Java的反射机制,包括如何获取Class对象、构造方法、成员方法和成员变量,并探讨了如何通过反射调用这些元素。通过三种方式获取Class对象,如Object的getClass()方法,类的class属性,以及Class的forName()方法。接着,文章阐述了如何获取和使用构造方法、成员方法及成员变量,包括访问不同权限级别的方法和字段。最后,展示了如何利用反射调用构造方法和成员方法。

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

java反射机制

JAVA反射机制是在运行状态中,
(1)对于任意一个类,都能够知道这个类的所有属性和方法
(2);对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。


反射机制获取Class对象:

1、获取Class对象的三种方式

1.1 Object ——> getClass();

Stu stu1 = new Stu();
Class stuClass = stu1.getClass();

1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性

Class stuClass2 = Stu.class;

1.3 通过Class类的静态方法:forName(String className)(常用)

try {
			Class stuClass3 = Class.forName("fanshe.Stu");//
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

Class stuClass3 = Class.forName(“fanshe.Student”);
这里的fanshe.Student我们可以选中类然后右键Copy Reference 就能把它的路径复制下来。
在这里插入图片描述

反射机制获取构造方法

1、获取所以公有构造方法getConstructors()
2、获取所有的构造方法
(包括、私有、受保护、默认、公有);getDeclaredConstructors();
3、 获取公有、无参的构造方法);getConstructor(null);
4、获取私有构造方法,并调用;getDeclaredConstructor(String.class);

反射机制获取成员方法:

1.获取Class对象

Class stuClass = Class.forName("fanshe.field.Stu");

2.获取成员方法

2.1获取所有公有方法

Method[] methodArray = stuClass.getMethods();

2.2获取所有的方法,包括私有的

methodArray = stuClass.getDeclaredMethods();

2.3获取具体的某一个共有的方法

Method m = stuClass.getMethod("某一个公有的方法名", String.class);

反射机制获取成员变量:

1.获取Class对象

Method m = stuClass.getMethod("show1", String.class);

2.获取字段

2.1获取所有公有的字段

Field[] fieldArray = stuClass.getFields();

2.2获取所有的字段(包括私有、受保护、默认的)

fieldArray = stuClass.getDeclaredFields()

反射机制调用(构造方法、成员方法、成员变量):

调用构造方法:

1.普通调用
	Class clazz = Class.forName("fanshe.Stu");
	Constructor con = clazz.getConstructor();
	Object obj = con.newInstance();
2.私有构造方法调用
	Class clazz = Class.forName("fanshe.Stu");
	Constructor con = c.getDeclaredConstructor(String.class);
	con.setAccessible(true);
	Object obj = con.newInstance("风清扬");

调用成员方法:

1.普通调用
	Class stuClass = Class.forName("fanshe.method.Stu");
	Method m = stuClass.getMethod("某一个具体的共有的具体的方法", String.class);
		Object obj = stuClass.getConstructor().newInstance();
		m.invoke(obj, "刘德华");

2.私有构造方法调用
    Class stuClass = Class.forName("fanshe.method.Stu");
	m = stuClass.getDeclaredMethod("show4", int.class);
		System.out.println(m);
		m.setAccessible(true);//解除私有限定
		Object result = m.invoke(obj, 20);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值