java基础之反射实战讲解

反射的常见用法

1.获取Class对象

1.通过类名获取

使用类的全限定名调用Class.forName()方法即可获取Class对象。例如:

Class<?> clazz = Class.forName("com.example.MyClass");

这种方法会触发类的初始化,如果类不存在或未被初始化,则会抛出ClassNotFoundException异常。

2.通过类字面量获取

使用类字面量即可获取Class对象。例如:

Class<?> clazz = MyClass.class;

这种方法不会触发类的初始化,如果类不存在,则会抛出NoClassDefFoundError错误。

3.通过对象获取

使用对象的getClass()方法即可获取Class对象。例如:

MyClass myClass = new MyClass();
Class<?> clazz = myClass.getClass();

这种方法不会触发类的初始化,如果对象为null,则会抛出NullPointerException异常。

需要注意的是,以上三种方法获取的Class对象是同一个对象。即使在不同的类加载器环境中,也可以通过Class对象来获取同一个类的信息。

2.获取Class后的常用方法

2.1获取类名
  1. getName()

获取Class对象所表示的类的全限定名。

  1. getSimpleName()

2.2获取字段
  1. getDeclaredFields()

获取Class对象所表示的类中声明的所有字段(不包括从父类继承而来的字段)。

  1. getFields()

获取Class对象所表示的类中所有public字段,包括从父类继承而来的字段。

2.3获取方法
  1. getDeclaredMethods()

获取Class对象所表示的类中声明的所有方法(不包括从父类继承而来的方法)。

  1. getMethods()

获取Class对象所表示的类中所有public方法,包括从父类继承而来的方法。

2.4获取构造器
public Constructor<T> getConstructor(Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException

需要注意的是,getConstructor()方法只能获取public构造方法,如果需要获取非public构造方法,则需要使用getDeclaredConstructor()方法。如果不存在指定的构造方法,则会抛出NoSuchMethodException异常。同时,需要注意使用反射机制需要小心处理异常

2.5创建对象
  1. 使用Class对象的newInstance()方法 通过Class对象的newInstance()方法可以创建一个该Class对应类的实例,前提是该类必须具有无参构造方法。示例如下:

Class<?> clazz = MyClass.class;
Object obj = clazz.newInstance();
  1. 使用Constructor对象的newInstance()方法 如果需要调用带有参数的构造方法来创建对象,则可以通过Constructor对象的newInstance()方法实现。示例如下:

Class<?> clazz = MyClass.class;
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object obj = constructor.newInstance("test", 123);
2.6动态调用方法
	Class<MyClass> myClassClass = MyClass.class;
        Method test = myClassClass.getMethod("test", String.class);
        Object lisi = test.invoke(new MyClass(), "lisi");
        System.out.println(lisi);

通过invoke方法来进行动态调用方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值