第一课 获取类方法信息(2006-5-9)

.                             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维数组

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值