Java如何通过反射获取类?怎样获取类的信息?

1.Java如何通过反射获取类?

有三种方式:

(1)通过类路径方式找到类

Class.forName(String classPath)

Class clazz =Class.forName(“com.entity.UserInfo”)

(2)通过类名的方式

Class clazz =UserInfo.class

(3)通过对象获取类的方式

UserInfo userInfo = new UserInfo()

Class clazz =userInfo.getClass()

2.怎样获取类的信息?

(1)获取类的构造函数(这个模块研究了好久感觉没啥用🤔)

getDeclaredConstructors()获取类的所有构造函数

getDeclaredConstructor(String.class)获取类的指定参数类型String构造函数

getConstructors()获取所有public修饰的构造函数private修饰的获取不到

getConstructor(String.class)获取所有public修饰的指定参数类型的构造函数private修饰的获取不到

(2)获取类的修饰符(没啥用知道就好了)

返回类型是整数类型1-public 2-private...

getModufiers()

public AppleElectronics()返回的就是1

(3)获取类名,方法名,构造函数名

getName()获取全名com.bean.AppleElectronics

getSImpleName()获取类名

(4)获取包

getPackage()

(5)获取方法

getMethods()获取所有公开public的方法

注意:系统自带的方法也会获得

getMethods(String name)

参数可以指定方法名getMethods(“getA”)

getDeclareMethods()获取所有方法

注意:不会获取系统自带的方法

getDeclareMethod(String name)获取指定方法

(6)获取字段

getFields()获取所有公开字段private/protected字段获取不到

getFields(String name)指定字段获取private/protected字段获取不到

getDeclaredFields()获取所有字段包含private/pritected字段

getDeclaredField(String name)获取指定单个字段

3.实例化类对象(创建一个无参类对象)

newInstance(Object initargs)

第一种方式:Class.newInstance()

只能调用无参的构造函数

Class clazz = AppleElectronics.class

Object obj = clazz.newInstance()

注意:无参的构造函数必须是公开的public

第二种方式:Constructor.newInstance()

可跟传入的参数 调用任意构造函数(包括无参)

注意:访问属性要设置为true

无参就不举例了,也就不传参数

Class clazz = AppleElectronics.class

Constructor constructor = clazz.getDeclaredConstrucror(String.class)获取有参参数String类型的构造函数

Object obj = constructor.newInstance(“you are handsome brother”)

这个值会赋值给对应String类型参数的构造函数

public AppleElectronics (String appleEarPhone){

appleEarPhone = you are handsome brother

4.设置访问属性

默认为false

clazz.setAccessible(true)

getDeclaredField(“applePhone”).setAccessible(true)

5.调用类方法

method.invoke(Object obj,Object... args)

注意:

obj取值:如果是实例方法,把方法的类对象给他

                 如果是静态方法,取null

args取值:方法的参数值,没有则取null,或者不写

Class clazz = AppleElectronics.class

Object obj = clazz.newInstance()

//获取getA方法

Method getA =clazz.getDeclaredMethod(“getA”,new Class【】{String.class}

getA.setAccessible(true)

getA.invoke(obj,new Object【】{“wx”}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值