package com.itheima;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
public class TestReflect {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
String str="wrew";
Class clas1=str.getClass();
Class clas2=String.class;
Class clas3=Class.forName("java.lang.String");
/*
sop(int.class==Integer.class);
sop(int.class.isPrimitive());
sop(Boolean.class.isArray());
Constructor[]cons=Class.forName("java.lang.String").getConstructors();
for(Constructor con:cons)
{
sop(con);
}
sop(clas1==clas2);
sop(clas3==clas2);
*/
Constructor cons1=String.class.getConstructor(StringBuffer.class);
String str1=(String)cons1.newInstance(new StringBuffer("nbvf"));
//sop(str1.charAt(0));
ReflectPoint rp=new ReflectPoint(3,5);
Field fieldy=rp.getClass().getField("y");
//sop(fieldy.get(rp));
Field fieldx=rp.getClass().getDeclaredField("x");
fieldx.setAccessible(true);//暴力反射
//sop(fieldx.get(rp));
changeStringValue(rp);
//sop(rp);
Method methodCharAt=String.class.getMethod("charAt", int.class);
//sop(methodCharAt.invoke(str1, 1));//方法上的方法
//TestArguments.main(new String[]{"12","1232"});
String startingClassName=args[0];
Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class);
mainMethod.invoke(null, new Object[]{new String[]{"12","1232"}});
int[]a1=new int[]{1,2,3};
String[]a2=new String[]{"a","b","c"};
int[]a3=new int[5];
System.out .println(a1.getClass()==a3.getClass());
// sop(a1.getClass()==a2.getClass());
sop(a1.getClass().getSuperclass().getName());
sop(a2.getClass().getSuperclass().getName());
//Object obj1=a1;
// Object obj2=a2;
// Object[] obj3=a1;
Object[] obj4=new Object[]{"234",1,'d'};
// sop(Arrays.asList(obj4));
Object obj=null;
// printobject(a2);
printobject(obj4);
}
private static void printobject(Object obj) {
// TODO Auto-generated method stub
Class clazz=obj.getClass();
if(clazz.isArray())
{
int len=Array.getLength(obj);
for(int i=0;i<len;i++)
{
sop(Array.get(obj, i));
}
}
else
{
sop(obj);
}
}
private static void changeStringValue(Object obj) throws Exception {
// TODO Auto-generated method stub
Field[]fields=obj.getClass().getFields();
for(Field field:fields)
{
if(field.getType()==String.class)
{
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b', 'a');
field.set(obj, newValue);
}
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class TestArguments{
public static void main(String[] args)
{
for(String arg:args)
{
System.out.println(arg);
}
}
}