本帖最后由 谢军 于 2013-3-16 14:14 编辑
package cn.itcast.day1;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
String str1="abc";
Class cls1= str1.getClass();
Class cls2=String.class;
Class cls3=Class.forName("java.lang.String");
System.out.println(cls1==cls2);
System.out.println(cls1==cls3);
System.out.println(cls1.isPrimitive());
//new String (new StringBuffer("abc"));
//String.class.getConstructorx(StringBuffer.class);
Constructor constructor1=
String.class.getConstructor(StringBuffer.class);
String str2=
(String) constructor1.newInstance(new StringBuffer("abc"));
//在编译器时并不知道constructor的具体类型所以告诉编译器(String)
System.out.println(str2.charAt(2));
ReflectPoint pt1= new ReflectPoint(3,5);
Field fieldY =pt1.getClass().getField("y");
//filedY不是对象身上的变量。而是类上,要用它去取某个对象上对应的值
System.out.println(fieldY.get(pt1));
Field fieldX =pt1.getClass().getDeclaredField("x");
//x是私有的直接用会报错,所以使用getDeclaredField方法
fieldX.setAccessible(true);//暴力获取
System.out.println(fieldX.get(pt1));
Method methodCharAt= String.class.getMethod("charAt",int.class);
System.out.println(methodCharAt.invoke(str1,1));
//当invoke的第一参数是null则说明该方法为静态
System.out.println(methodCharAt.invoke(str1,new Object[]{2}));
TestArguments.main(new String[]{"111","333"});
}
}
class TestArguments{
public static void main(String[] args){
for(String arg:args){
System.out.println(args);
}
}
}
在调用主函数时为什么输出结果是哈希值
打印结果[Ljava.lang.String;@e53108
|