Java反射使用
Java的反射机制指的是在运行状态中,通过字节码文件对象,使用(字节码文件)类中的成员变量,构造方法,成员方法 Java的反射机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任何一个类的成员变量和方法,可以调用任意一个对象的属性和方法,这种动态的获取程序信息以及动态调用对象的功能称为Java的反射机制 要想使用反射的方式来使用一个类,就必须先获取到该类的字节码文件对象,这个字节码文件对象就是一个Class对象,我们就可以使用Class类中的方法来解析class对象中的内容并使用
-Class中的常用方法:
static 类<?> forName(String className)
返回与给定字符串名称的类或接口相关联的 类对象。
Constructor<T> getConstructor(类<?>... parameterTypes)
返回一个 Constructor对象,该对象反映 Constructor对象表示的类的指定的公共 类函数。
Constructor<?>[] getConstructors()
返回包含一个数组 Constructor对象反射由此表示的类的所有公共构造 类对象。
Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
返回一个 Constructor对象,该对象反映 Constructor对象表示的类或接口的指定 类函数。
Constructor<?>[] getDeclaredConstructors()
返回一个反映 Constructor对象表示的类声明的所有 Constructor对象的数组 类 。
Field getDeclaredField(String name)
返回一个 Field对象,它反映此表示的类或接口的指定已声明字段 类对象。
Field[] getDeclaredFields()
返回的数组 Field对象反映此表示的类或接口声明的所有字段 类对象。
Field getField(String name)
返回一个 Field对象,它反映此表示的类或接口的指定公共成员字段 类对象。
Field[] getFields()
方法 getDeclaredMethod(String name, 类<?>... parameterTypes)
返回一个 方法对象,它反映此表示的类或接口的指定声明的方法 类对象。
方法[] getDeclaredMethods()
方法 getMethod(String name, 类<?>... parameterTypes)
返回一个 方法对象,它反映此表示的类或接口的指定公共成员方法 类对象。
方法[] getMethods()
反射使用测试例:
package com.momo.test;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws Exception{
int[] aa = {189,8,10,89,1000,1234};
Class<?> a = Class.forName("com.momo.sort.SelectSort");
System.out.println(a);
System.out.println("--------------------");
Method[] declaredMethods = a.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println(method);
}
Object o = a.newInstance();
Method selectSort = a.getMethod("selectSort", int[].class);
Object invoke = selectSort.invoke(o, aa);
System.out.println(Arrays.toString(aa));
Field[] fields = a.getDeclaredFields();
Field[] fields2 = a.getFields();
for (Field field : fields) {
System.out.println(field);
}
}
}
package com.momo.sort;
import java.util.Arrays;
public class SelectSort {
private int id;
public static void main(String[] args) {
int[] a = {1,0,7,2,9,3,8};
selectSort(a);
}
public static void selectSort(int[] a){
int minIndex = 0;
int min = a[0];
for (int i = 0; i < a.length-1; i++) {
min = a[i];
minIndex=i;
for (int j = i+1; j < a.length; j++) {
if (min>a[j]){
min = a[j];
minIndex = j;
}
}
if (minIndex!=i){
a[minIndex] = a[i];
a[i] = min;
}
System.out.println("排序的数组为->"+ Arrays.toString(a));
}
}
}
|