Java中反射的十个常用函数
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反射,提高编程效率。
