Point pt=(Point)c.newInstance();是不是相当于Point c=new Point();不是的话是什么意思
Class 类具体是什么东西, Class c=Class.forName(args[0]);又是什么意思

解决方案 »

  1.   

    Point pt=(Point)c.newInstance();
    好像是属于工厂模式,是把它的构造函数私优化,
    Class c=Class.forName(args[0]); 是属于反射机制
      

  2.   

    java的反射机制.是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
    Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理等等。
    包名为:java.lang.Class。
    其方法Class.forName(具体类名)是根据类的名称获得一个类的对象(Class对象)。
    一、构造对象:
    newInstance()方法生成一个具体的类的实例,返回的是Object对象。
    例如:存在一个类为Test.MyTest(Test为包名,MyTest为具体类名);则获得MyTest的实例为:
    Class clz=Class.forName("Test.MyTest");
    MyTest test=(MyTest)(clz.newInstance());
    上述代码就等价于:
    MyTest test=new MyTest();
    二、判断任意一个对象所属的类
    isInstance(),判断任意一个对象所属的类,返回的是boolean值。
    例如:存在一个类为Test.MyTest(Test为包名,MyTest为具体类名)
    Class clz=Class.forName("Test.MyTest");
    还有一个对象:
    MyTest test=new MyTest();
    则:假设不知道test为哪个类的对象,则可以为
    if(clz.isInstance(test)){....}
    等等。
      

  3.   

    我来说说 Point pt=(Point)c.newInstance(); 跟 Point c=new Point(); 的不同吧。
    Point pt=(Point)c.newInstance(); 中的c并没有要求c的类型是Point,它可以是Point的子类或者实现了Point接口的具体类。
    这是Point pt=(Point)c.newInstance(); 强大的地方。
    例如你通过配置文件得到了Point的具体子类的类名className,
    String className="XXX.XXX";
    //加载到虚拟机
    Class c=Class.forName(className);
    //通过c实例化
    Point pt=(Point)c.newInstance();这样pt的具体类型就是后来配置的,而不是写程序的时候写死的。
      

  4.   

    public class xsgFanShe{
       public static void main(String[] args)
          {
                try{
                Class c=Class.forName(args[0]);
                System.out.println(c);
                }catch(Exception no){}
          }
    }按如下方式运行:
    C:>java xsgFanShe 空格 某个java文件(注意不要后缀.java)