. this.getClass().getName()可以获取这个类得名字
.
//这里面体现了void pr(String ,String ,int)的一个方法
public static void callFruitPrint(Object o,String s,String s2,int c)
{
Class cl=o.getClass();
try
{
//注意这里面的int.class,虽然int不是一个类类型
Method m=cl.getMethod("pr",new Class[]{String.class,String.class,int.class});
//下面这个方法可以得知有private的方法,虽然不能访问.上面的方法只能够获取public方法
//Method m=cl.getDeclaredMethod("pr",new Class[]{String.class,String.class,int.class});
m.invoke(o,new Object[]{s,s2,new Integer(c)});
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
. //这里体现如何获取继承信息
//注意如果知道一个对象具体的类,则可以用.class得到它的Class对象
//且没有参数时候用null表示
public static void callFruitPrint(Fruit o)
{
Class cl=Fruit.class;
try
{
//这两个方法名字比较诡异
System.out.println("打印继承信息:");
System.out.println(Class.class.isInstance(Object.class));
System.out.println("前者是后者祖辈吗(包括同辈) "+java.util.List.class.isInstance(new java.util.Vector()));//是不是属于某一个类
System.out.println("直接父类是: "+cl.getSuperclass());//它的父类是哪个
System.out.println("前者是后者祖辈吗(包括同辈)"+java.util.List.class.isAssignableFrom(java.util.Vector.class));
Method m=cl.getMethod("pr",null);
//这样也可以
//Method m1=cl.getMethod("pr",new Class[]{});
m.invoke(o,null);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
. 如何获取祖宗方法,而不是局限与直接父类
public static Method getSupportedMethod( Class cls,
String name,
Class[] paramTypes)
throws NoSuchMethodException
{
if (cls == null) {
throw new NoSuchMethodException();
}
try {
return cls.getDeclaredMethod( name, paramTypes );
}
catch (NoSuchMethodException ex) {
return getSupportedMethod( cls.getSuperclass(), name, paramTypes );
}
}
3.反射也能用来构造数组的,看下面
A .
现在构造一个String数组,它含有5个String变量:
Array.newInstance(String.class, 5);
它返回一个含有5个元素的数组指针,它们都赋值为null.
eg:
Object o=Array.newInstance(String.class, 2);
Array.set(o, 0, "good");
Array.set(o, 1, " morning");
String s1=(String)Array.get(o, 0);
String s2=(String)Array.get(o, 1);
s1=s1+s2;
System.out.println(s1);
B.
Array.newInstance(String[].class, 5);
则是表示2维数组,其中有5行,每行多少列这里没有指明哦
C.
Array.newInstance(String.class, new int[] {2, 3});
则是表示一个2行3列的String数组
D.
Array.newInstance(String[].class, new int[] {2, 3});
则是创建了一个3维数组