反射应用于数组:
例子:
public class Test {
public static void main(String[] args) throws Exception {
Class
classType = Class.forName("java.lang.String");
//第一个参数设置数组的类型,第二个设置数组的大小。
Object array = Array.newInstance(classType,10);
//第一个参数目标数组,第二个参数指定存放位置,第三个参数要存入的元素。
Array.set(array,5,"java");
//打印
System.out.println((String)Array.get(array,5));
}
}打印: java
对于多维数组的创建:
例子:
public class Test {
public static void main(String[] args) throws Exception {
//Integer.TYPE返回原生数据类型,Integer.class返回类的类型,第一个参数设置数组的类型,第二个设置数组的大小。
Object array = Array.newInstance(Integer.TYPE,3,3,3);
Object array2 = Array.get(array,2);
array2 = Array.get(array2,2);
Array.setInt(array2,2,10);
int[][][] a = (int[][][])array;
//打印
System.out.println(a[2][2][2]);
}
} 打印: 10
使用反射调用类中的私有方法:
例子:
public class PrivateTest {
public static void main(String[] args) throws Exception{
A a = new A();
Class
classType = a.getClass();
Method method = classType.getDeclaredMethod("getHello",String.class);
method.setAccessible(true);//压制Java的访问权限
String str = (String)method.invoke(a,"java");
System.out.println(str);
}
}
class A{
private String getHello(String str){
return "你好!"+str;
}
}打印:你好!java
如何访问私有属性:
public class Reflection2 {
public static void main(String[] args) throws Exception{
Private2 p = new Private2();
Class
cs = p.getClass();
Field f = cs.getDeclaredField("name");
f.setAccessible(true);//压制Java对方问修饰符的检查
f.set(p,"lisi");
System.out.println(p.getName());
}
}
class Private2 {
private String name ;
public String getName(){
return name;
}
}
打印:lisi
通过子类获得父类的Class对象:
public class Test {
public static void main(String[] args) {
Class
classType = Child.class;
System.out.println(classType);
classType = classType.getSupe