反射-Class对象获取方式

JAVA反射机制允许在运行时动态获取类的信息并调用其方法。获取Class对象有三种方式:通过对象的getClass(),类的.class属性,或Class的forName()方法。常用的是第三种,因为它只需要类的全名字符串。一旦获取Class对象,就可以访问类的构造方法、成员变量和成员方法。
摘要由CSDN通过智能技术生成

反射是什么? JAVA反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java的反射机制
要想解剖一个类,必须获取它的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。

反射就是把java类中的各种成分映射成一个个Java对象
加载的时候,就是我们把class文件读入内存,并为之创建一个class对象

获取class对象的三种方式:
1.Object->getClass()
2.任何数据类型都有一个“静态”的class属性
3.通过class类的静态方法: clazz.forName

package fanshe;

/**

  • 获取Class对象的三种方式
  • 1 Object ——> getClass();
  • 2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
  • 3 通过Class类的静态方法:forName(String className)(常用)

*/

public class Fanshe {
	public static void main(String[] args) {
		//第一种方式获取Class对象  
		Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。
		Class stuClass = stu1.getClass();//获取Class对象
		System.out.println(stuClass.getName());
		
		//第二种方式获取Class对象
		Class stuClass2 = Student.class;
		System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个
		
		//第三种方式获取Class对象
		try {
			Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名
			System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

注意:在运行期间,一个类只有一个class对象产生
三种方式常用第三种,第一种对象都有了还要反射干锤子。第二种需要导入类的包,依赖太强,不导包就抛编译错误。一般第三种,一个字符串可以传入也可以在配置文件写多种方法

Object.getClass(): 返回一个对象的运行时类(不常用)

获取构造方法并使用
获取成员变量并使用
获取成员方法并使用

常用的方法:
getConstructors(): 获取所有“公有的”构造方法
getDeclaredConstructors(): 获取所有的构造方法(包括私有,受保护,默认,公有地)
getMethod();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值