欢迎访问宙启技术站
智能推送

Java中反射的十个常用函数

发布时间:2023-05-20 11:17:59

Java反射是指通过程序获取其他程序的信息,比如类的方法、属性、注解等,动态地进行操作。Java反射提供了很多常用的函数,可以在运行时获取类的元信息,使得程序具有更加灵活和通用的性能。

1. Class.forName()

Class.forName()函数用于动态地生成类对象,可通过类的完整类名获得Class对象,比如:

Class clazz = Class.forName("com.package.MyClass");

该函数抛出ClassNotFoundException异常。

2. Class.newInstance()

Class.newInstance()函数用于生成类的实例对象,直接调用调用该函数相当于调用该类的无参构造函数,比如:

MyClass obj = (MyClass) clazz.newInstance();

该函数抛出InstantiationException、IllegalAccessException异常。

3. Constructor.newInstance()

Constructor.newInstance()函数用于生成类的实例对象,可通过该类的某个私有构造方法生成实例,比如:

Constructor<MyClass> constructor = clazz.getDeclaredConstructor(String.class);
constructor.setAccessible(true);
MyClass obj = constructor.newInstance("hello");

该函数抛出InstantiationException、IllegalAccessException、IllegalArgumentException、InvocationTargetException异常。

4. Class.getMethods()

Class.getMethods()函数用于获取该类或接口的所有public方法,包括继承自父类的public方法,返回的是一个Method数组,比如:

Method[] methods = clazz.getMethods();

该函数不会抛出异常。

5. Class.getMethod()

Class.getMethod()函数用于获取该类或接口的public方法,返回一个Method对象,需要指定方法名和参数类型,比如:

Method method = clazz.getMethod("testMethod", String.class, int.class);

该函数抛出NoSuchMethodException异常。

6. Class.getDeclairedFields()

Class.getDeclaredFields()函数用于获取该类或接口的所有字段信息,包括private字段,返回的是一个Field数组,比如:

Fields[] fields = clazz.getDeclaredFields();

该函数不会抛出异常。

7. Class.getDeclaredField()

Class.getDeclaredField()函数用于获取该类或接口的某个字段信息,需要指定字段名,返回一个Field对象,比如:

Field field = clazz.getDeclaredField("fieldName");

该函数抛出NoSuchFieldException异常。

8. Class.getConstructor()

Class.getConstructor()函数用于获取该类或接口的public构造方法,返回一个Constructor对象,需要指定方法参数类型,比如:

Constructor<MyClass> constructor = clazz.getConstructor(String.class);

该函数抛出NoSuchMethodException异常。

9. Class.getDeclaredConstructor()

Class.getDeclaredConstructor()函数用于获取该类或接口的某个构造方法,返回一个Constructor对象,需要指定参数类型,比如:

Constructor<MyClass> constructor = clazz.getDeclaredConstructor(String.class);

该函数抛出NoSuchMethodException异常。

10. Method.invoke()

Method.invoke()函数用于调用类的方法,需要指定方法参数,返回方法执行结果,比如:

Object result = method.invoke(obj, "hello", 10);

该函数抛出IllegalAccessException、IllegalArgumentException、InvocationTargetException异常。

总结

Java反射提供了丰富的函数,可以在运行时获取类的元信息,使得程序具有更加灵活和通用的性能。掌握这些函数可以更好地使用Java反射,提高编程效率。