public class claatext 
{
public static void main(String[] args)
{

if (args.length != 1)
{
return;
}
try
{
Class cs = Class.forName(args[0]);
Point po = (Point)cs.newInstance();
po.getput();

}
catch(Exception e)
{
e.printStackTrace();
}

}
}
class Point
{
int x,y;
void getput()
{
System.out.println("x=" + x + "," +"y" + y);
}
}if (args.length != 1)
{
return;
}
try
{
Class cs = Class.forName(args[0]);
Point po = (Point)cs.newInstance();
po.getput();
以上代码的这里 的这些,我不太明白,谁能帮我注释这些每一句的解释吗?拜托了,详细通俗点!拜托大家了

解决方案 »

  1.   

              if (args.length != 1)       ---运行这程序时,后面带的参数数组长度不为1时即退出
                {
                    return;
                }
                try
                {
                    Class cs = Class.forName(args[0]);     --->运行时,jvm要加载.class,这里是加载名字(args[])的类
                    Point po = (Point)cs.newInstance();    --->实例化
                    po.getput();
                    
                }
                catch(Exception e)    ----捕捉异常,准确来说,应该捕捉ClassNotFoundException
                {
                    e.printStackTrace();
                }
                以上只是逐句解释,我感觉整个程序有点问题,
      

  2.   

    啊,我看错啦,应该是没问题
    Class cs = Class.forName(args[0]);
    Point po = (Point)cs.newInstance(); 运行时,保证args[0] = “Point"(路径问题,我先忽略)
    这时,以上两句相当于:
    Point po = new Point();
      

  3.   


    public static void main(String[] args) {// 为了方便测试各种程序写的一个main
    //System.out.println(TestBigChar.convert(0.1));

    //new MyEntry().test();
    String [] strs = {"Point"};//模拟命令行的参数字符数组
    claatext.test(strs);//开始测试
    }} class claatext 
    {
            public static void test(String[] args)
            {
                            
                if (args.length != 1)//检查参数的合法性
                {
                    return;
                }
                try
                {
                    Class cs = Class.forName(args[0]);//返回Point类或接口相关联的 Class 对象
                    Point po = (Point)cs.newInstance();
                    //创建此 Class 对象所表示的Point类的一个新实例。
                    //如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。
                    po.getput();
                    
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
                
            }
    }//JDK API
    public T newInstance()
                  throws InstantiationException,
                         IllegalAccessException创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。 
    注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。 
    返回:
    此对象所表示的类的一个新分配的实例。 
    抛出: 
    IllegalAccessException - 如果该类或其 null 构造方法是不可访问的。 
    InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 null 构造方法; 或者由于其他某种原因导致实例化失败。 
    ExceptionInInitializerError - 如果该方法引发的初始化失败。 
    SecurityException - 如果存在安全管理器 s,并满足下列任一条件: 
    调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝创建该类的新实例 
    调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包 
    forName
    public static Class<?> forName(String className)
                            throws ClassNotFoundException返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于: 
      Class.forName(className, true, currentLoader)
     其中 currentLoader 表示当前类的定义类加载器。 
    例如,以下代码片段返回命名为 java.lang.Thread 的类的运行时 Class 描述符。    Class t = Class.forName("java.lang.Thread")
     调用 forName("X") 将导致命名为 X 的类被初始化。 
    参数:
    className - 所需类的完全限定名。 
    返回:
    具有指定名的类的 Class 对象。 
    抛出: 
    LinkageError - 如果链接失败 
    ExceptionInInitializerError - 如果此方法所激发的初始化失败 
    ClassNotFoundException - 如果无法定位该类
      

  4.   

    Class cs = Class.forName(args[0]);
    Point po = (Point) cs.newInstance();
    应该就是这两句你没有理解吧~~
    这个是JAVA的反射机制,也是生成实例的另一种方式~~
    相当于Point po = new Point();了
      

  5.   

    public class claatext 
    {
            public static void main(String[] args)
            {
         
                try
                {
                    //Class cs = Class.forName(args[0]);
                    
                   // Point po = (Point)cs.newInstance();
                Point po = new Point(1,3);
                    
                    po.getput();
                    
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
                
            }
    }
    class Point
    {

            int x,y;
        Point(int x,int y){
         this.x=x;
         this.y=y;
        }
            void getput()
            {
                System.out.println("x=" + x + "," +"y" + y);
            }
    }效果一样