java基础之反射
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础之反射相关的知识,希望对你有一定的参考价值。
1. 反射生成class对象的三种方式
1) 通过对象类型的getclass方法来获得class对象
InputStream is=this.getClass().getClassLoader().getResourceAsStream(path);
2) 类加载器通过class对象的静态方法forname来获得
String driver = ps.getProperty("driver");
Class.forName(driver);
3) 通过指定类型的class来获得
public class jdbctools {
InputStream is = jdbctools.class.getClassLoader().getResourceAsStream("jdbc.properties");
}
2. class常用方法
1)getAnnotation(
Class<A> annotationClass)
:获得指定类型的注释
2
)
getAnnotations()
:获得所有的注释
3
)
getClassLoader()
类加载器
4
)
getConstructors()
:返回所有公有的构造方法
Class clazz = Class.forName("reflect.student");
clazz.getDeclaredConstructors();
5)getConstructor(
Class<?>... parameterTypes)
:返回指定公有的构造方法,没有会显示没有这种方法异常
Constructor<?> constructor = clazz.getConstructor(String.class,int.class);
6) getDeclaredConstructor(Class<?>... parameterTypes):获取含私有构造方法
7) getDeclaredConstructors():获取所有构造方法
8)getDeclaredField(String name):获取含私有属性
clazz.getDeclaredField("name");
9)getDeclaredFields
()
:获取所有属性
10)getDeclaredMethod
(String name, Class<?>... parameterTypes)
:获取包含私有方法
clazz.getDeclaredMethod("name",String.class);
11)getDeclaredMethods
()
:获取所有方法
12
)getField(String name):获取公有属性
13
)getFields():获取所有私有属性
14
)getGenericInterfaces():获取类或接口的直接实现
15
)getGenericSuperclass():直接超类
Type gentype = clazz.getGenericSuperclass()
16
)getModifiers()获取修饰符
17
)getSuperclass():表示实体的超类
for(Class clazz=obj.getClass();clazz != Object.class; clazz.getSuperclass()){}
18
)newInstance
()
:无参构造产生对象
3.field
常用方法
getGenericType
()
:获取声明类型
getModifiers
()
:获取修饰权限
field.getModifiers()
set
(Object obj, Object value)
:设置值
field.set(obj, param);
setAccessible
(boolean flag)
:设置是否去除权限
field.setAccessible(true);
get(Object obj):获取值
field.get(object);
4.method
invoke
(Object obj, Object... args)
:调用方法
method.invoke(obj, parame);
setAccessible
(boolean flag)
:设置是否去除权限
method.setAccessible(true);
以上是关于java基础之反射的主要内容,如果未能解决你的问题,请参考以下文章