现在的位置: 首页 > 综合 > 正文

软考复习之动态生成对象

2013年08月22日 ⁄ 综合 ⁄ 共 1101字 ⁄ 字号 评论关闭

public   class     MyClass   

  {   
  public   MyClass(){   
  }   
  public     void   sayHello(String   who)   
  {   
  System.out.println("hello   world   "+who);   
  }   
  }   
  如果要动态的使用sayHello,可以用如下代码   
  import  java.lang.reflect.*;   
  class     TestClass   
  {   
  public   static   void   main(String[]   args)     
  {   
         //这是sayHello的参数类型为String   
  Class[]   parameterTypes={String.class};   
         //把you这次字符串传进去   
  Object[]   parameter={"you"};   
         //以下是动态装入的类名和需要调用的函数名   
  String   className="MyClass";   
  String   methodName="sayHello";   
  try{   
  Class   iClass=Class.forName(className);   
         //产生一个Method对象(sayHello)   
  Method   method=iClass.getMethod(methodName,parameterTypes);   
         //Class.forname只是动态的装入了类,我们还需要产生对象,因此   
         //需要调用它的构造函数,用以下方法调用   
  Constructor   con=iClass.getConstructor(new   Class[]{});   
  Object   myclass=con.newInstance(new   Object[]{});   
         //对象生成啦,现在调用它   
  method.invoke(myclass,parameter);   
    
  }   
  catch(Exception   e)   
  {   
  e.printStackTrace();   
  }   
  }   
  }   
  上面的代码打印:hello   world   you   
  这段代码等同于   
  MyClass   myclass=new   MyClass();   
  myclass.sayHello("you");   

  由此可以看出动态的调用比静态的复杂得多。

注: Class 对象 实际上描述的只是类型,例如int,void,类,接口;

       而Object类是java中所有类的父类。

抱歉!评论已关闭.