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”}

被折叠的 条评论
为什么被折叠?



