我也知道啊,但是怎么写啊,Class类的实例是不能自己生成的,比如我的参数表是空的,怎么写呢?如果有一个int的怎么写?多谢了!

解决方案 »

  1.   

    每一种语言里都有向“指针”的东西,只是不叫这个名字,或者不象C里面那样能灵活的使用他,在java里是使用了引用来代替指针的。
      

  2.   

    to globalwabg(global)
    我要的是指向函数的指针
    java中怎么表示?我查了几本书都没有,就找到了一个CLass 类中的getMethod(String name, Class[] parameterTypes)还不会用
    说一下吧。
      

  3.   

    import java.lang.reflect.*;
    class den
    {
    public static void a()
    {
    System.out.println("a()");
    }

    public static void main(String []args)throws Exception
    {
    Class cl=Class.forName("den");
    Method m=cl.getMethod("a",null);
    m.invoke(null,null);
    }
    }
      

  4.   

    import java.lang.reflect.Method;
    import java.lang.reflect.*;public class ClassTest 
    {
      public ClassTest()
      {
      }
      public static void sayHello()
      {
         System.out.println("hello world");
      }
      public static void saySomething(String s)
      {
         System.out.println(s);
      }   public static void main(String[] args) 
       {
          ClassTest ct=new ClassTest();
          Class c=ct.getClass();
          Method[] methods=c.getMethods();
          for(int i=0;i<methods.length;i++)
          {
               Method m=methods[i];
               try{
                    if(( m.getName()).equals("sayHello"))
                     {  
               
                               m.invoke(ct,null);
                     }
                     if((m.getName()).equals("saySomething"))
                     {
                              String[] arguments={"good bye"};
                              m.invoke(ct,arguments );
                     }
               }catch(Exception e)
               {
                   e.printStackTrace();
               }
           }
        }
    }
      

  5.   

    to  dentance(登徒子) 
    如果我的函数是有参数的,getmethod的第二个参数怎么写?
      

  6.   

    使用反射
    import java.lang.reflect.*;
    这是java的一大特点
    在学习bean时用的全是反射的知识。
      

  7.   

    我只想知道
    getMethod(String name, Class[] parameterTypes)
    的第二个参数该怎么写,如果我的函数有参数,比如一个int的,一个我自己定义的类的
      

  8.   

    tiger999说得很明白了,看看代码就明白了。
      

  9.   

    to oneflyinger(飞)你看明白tiger999的代码了吗?他使用的是getMethods()函数,会返回类中所有的Method数组,我要用的是
    getMethod(String name, Class[] parameterTypes)函数,只返回一个Method对象,String name这个参数已经指定了函数名,只是不知道
    Class[] parameterTypes这个参数怎么制定,dentance(登徒子)给出了想获取的函数参数为空的参数表,但函数参数不为空,比如是int的,怎么办?
      

  10.   

    嗬嗬,以后啊,多看看sdk的帮助文档,因为自己解决问题的感觉和涨的能力都比什么都问强:
    试试这个:Class paras[] = new Class[1];     
          String str1 = new String("Test parameters"); 
          Method method1=null;
          
          paras[0]=str1.getClass();
          try{
           method1 = c.getMethod("saySomething",paras);
           if(method1!=null)
           method1.invoke(ct,new String[]{"Hello"});
    }
          catch(Exception e)
          {
           e.printStackTrace();
    }
      

  11.   

    to  Stephen_Hu(若兰的情人) 知道我为什么一直在问参数是int时怎么办吗?你试试。顺便告诉你paras[0]=str1.getClass();可以写成
    paras[0]=Class.forName("String");还有不用判断if(method1!=null),如果找不到函数会抛出NoSuchMethodException异常,所以程序根本不会执行catch之前的东西了
      

  12.   

    回复人: flash007() ( ) 信誉:105  2002-11-30 12:04:00  得分:0 
      第二个参数是指你要调用方法名的参数列表.                Top 
    对啊   
    方法不一定很高级啊  
    如果是你自己定义的类,你可以让getMethod进行调度就可以了啊
      

  13.   

    不好意思,说话不客气。试试这个。
          try{
          
            try{
           paras[0]=int.class;//Class.forName("Integer");
    }
           catch(Exception e)
           {
           e.printStackTrace();
    }
          
           method1 = c.getMethod("saySomething",paras);
           if(method1!=null)
           method1.invoke(ct, new Integer[]{new Integer(3)});//new String[]{"Hello"});
    }
          catch(Exception e)
          {
           e.printStackTrace();
    }
      

  14.   

    int 是一个简单数据类型,怀疑可以用 Integer 类替代,既:
      paras[0] = Class.forName("Integer");
      method1.invoke(ct,new Integer[]{ 123 });
    没试过......不过这种方式现在不推荐。用过 AWT 事件模型知道:如果 A 类发生事件时想 B 类做某事,而 A 类先于 B 类设计,可以设计一个 Lisenter 类 C(Interface),A 中可记录C的指针,使用时 B 中实现 C 并实例成 c,然后把 c 加入 A,这样 A 调用 c 在 B 中就有响应了。兄弟才疏学浅,讲得不好。还是看书吧!
      

  15.   

    to: 复人: JuncoZhan(junco) 
    int需要Integer来wrap,但是你说的不行。处理方式比较特殊,参考鄙人代码。