java 反射 详细 使用方式

java反射的详细使用方式

1.获取Class类的方式

//方式1.通过实体类获取Class
User user = new User();
Class clazz = user.getClass();
//方式2.通过类获取Class
Class clazz = User.class;
//方式3.通过类路径获取Class
Class clazz = Class.forName("com.zsq.demo.User");

2.通过Class类进行构造方法操作

2.1.通过Class类获取构造方法
//方式1.获取类的所有构造方法,注意只能获取被公开(public)的构造方法
Constructor[] constructors = clazz.getConstructors();
//方式2.获取类的所有构造方法
Constructor[] constructors = clazz.getDeclaredConstructors();

//方式3.获取类的某一个构造方法,注意只能获取被公开(public)的构造方法
//注:获取类的某一个构造方法的参数的类型和循序要和构造方法的类型和循序相同
Constructor constructor = clazz.getConstructor(long.class, String.class);
//方式3.获取类的某一个构造方法
Constructor constructor = clazz.getDeclaredConstructor(long.class, String.class);
3.2.通过方法获取实例对象
//方式1.直接通过Class获取实例
User user = clazz.newInstance();
//方式2.通过构造方法获取实例
//注:如果是有参构造方法,再在newInstance()方法中传对应的参数信息
User user = constructor.newInstance();

3.通过Class获取属性和对属性进行操作

3.1.通过Class获取属性
//方式1.获取类中所有的属性包括父类,注:只能获取被公开(public)的属性
Field[] fields = clazz.getFields();
//方式2.获取类中所有的属性包括父类
Field[] fields = clazz.getDeclaredFields();
//方式3.获取类中指定属性,注:只能获取被公开(public)的属性
Field field = clazz.getField("userName");
//方式4.获取类中指定属性
Field field = clazz.getDeclaredField("userName");
3.2.获取属性的基本信息(修饰符、类型、字段名等等)
//通过属性获取属性的修饰符
int modifiersIndex = field.getModifiers();
String modifiers = Modifier.toString(modifiersIndex);
//通过属性获取属性的数据类型
Class<?> type = field.getType();
String typeName = type.getName();
//通过属性获取属性的属性名
String fieldName = field.getName();
//获取属性上的注解,获取所有注解。注:只能获取生命周期为运行时的注解
Annotation[] annotations = field.getAnnotations();
//获取方法上的注解,获取指定注解,如果没有返回null。注:只能获取生命周期为运行时的注解
ApiModel annotation = field.getAnnotation(ApiModel.class);
3.3.给属性赋值
//1.获取Class类
Class clazz = Class.forName("com.zsq.demo.User");
//2.获取Class实例对象
User user = clazz.newInstance();
//3.获取Class类中的属性
Field field = clazz.getField("userName");
//4.属性如果是私有的(private)需要开启访问权限
field.setAccessible(true);  
//5.给实例对象的参数赋值
field.set(user,"张三");

4.通过Class进行方法操作

4.1.通过Class获取方法
//方式1.获取类中所有的方法,注:只能获取被公开(public)的方法
Method[] methods = clazz.getMethods();
//方式2.获取类中所有的方法
Method[] methods = clazz.getDeclaredMethods();
//方式3.获取类中指定的方法,注:只能获取被公开(public)的方法
Method method = clazz.getMethod("getUserName");
//注:获取类的某一个方法的参数的类型和循序要和类中方法的类型和循序相同
Method method = clazz.getMethod("setUserName",String.class);
//方式4.获取类中指定的方法
Method method = clazz.getDeclaredMethod("getUserName");
Method method = clazz.getDeclaredMethod("setUserName",String.class);
4.2.获取方法的基本信息(修饰符、返回值、方法名、参数列表等等)
//获取方法修饰符
int modifiersIndex = method.getModifiers();
String modifiers = Modifier.toString(modifiersIndex);
//获取方法返回值类型
Class returnType = method.getReturnType();
String typeName = returnType.getName();
//获取方法名
String methodName = method.getName();
//获取参数列表
Class[] parameterTypes = method.getParameterTypes();
//获取方法上的注解,获取所有注解。注:只能获取生命周期为运行时的注解
Annotation[] annotations = method.getAnnotations();
//获取方法上的注解,获取指定注解,如果没有返回null。注:只能获取生命周期为运行时的注解
Data annotation = method.getAnnotation(Data.class);
//获取方法上的所有异常
Class[] exceptionTypes = method.getExceptionTypes();
4.3.调用实例对象的方法
//1.获取Class类
Class clazz = Class.forName("com.zsq.demo.User");
//2.获取Class实例对象
User user = clazz.newInstance();
//3.获取类中指定的方法
Method method1 = clazz.getDeclaredMethod("getUserName");
Method method2 = clazz.getDeclaredMethod("setUserName",String.class);
//4.调用实例对象的方法
method1.invoke(user);
method2.invoke(user,"张三");

5.通过Class获取类的基本信息

//获取类继承的父类信息
Class superclass = clazz.getSuperclass();
//获取类实现的接口信息
Class[] interfaces = clazz.getInterfaces();
//获取类的包信息
Package aPackage = clazz.getPackage();
//类的包路径
String name = aPackage.getName();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值