黑马程序员技术交流社区

标题: 请问代码问题在哪?? [打印本页]

作者: 陈振宇    时间: 2014-4-6 06:57
标题: 请问代码问题在哪??
package AbstractClass;
/**需求:获取程序运行的时间
* 原理:获取程序开始和结束的时间,并相减
* 获取时间:System.currentTimeMillis();
* @author Administrator
*
*/

public class TemplateDemo {
        class  GetTime
        {
                public void getTime()
                {
                        long start=System.currentTimeMillis();       
                        for(int x=0;x<10000;x++)
                        {
                                System.out.println(x);
                        }
                        long end =System.currentTimeMillis();
                        System.out.println("毫秒"+(end-start));
                }
        }
        public static void main(String[] args)
        {
                GetTime ge = new GetTime();
                ge.getTime();
        }       

}

作者: 郭黎明    时间: 2014-4-6 07:32
public class TemplateDemo {
    class  GetTime
    {
            public void getTime()
            {
                    long start=System.currentTimeMillis();        
                    for(int x=0;x<10000;x++)
                    {
                            System.out.println(x);
                    }
                    long end =System.currentTimeMillis();
                    System.out.println("毫秒"+(end-start));
            }
    }
    public static void main(String[] args)
    {
            GetTime ge = new TemplateDemo().new GetTime();   //这里是外部类访问内部类,内部类的类型TemplateDemo.GetTime的类型,所以新建时要先有new TemplateDemo()然后再有new  GetTime()
                                                            
            ge.getTime();
    }        

}

作者: z1342802487    时间: 2014-4-6 08:07
你写的内部类是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。可以把类GetTime用static修饰。

  1. <p> public class TemplateDemo {
  2.          static class  GetTime
  3.          {
  4.                  public void getTime()
  5.                  {
  6.                          long start=System.currentTimeMillis();        
  7.                          for(int x=0;x<10000;x++)
  8.                          {
  9.                                  System.out.println(x);
  10.                          }
  11.                          long end =System.currentTimeMillis();
  12.                          System.out.println("毫秒"+(end-start));
  13.                  }
  14.          }
  15.          public static void main(String[] args)
  16.          {
  17.                  GetTime ge = new GetTime();
  18.                  ge.getTime();
  19.          }        </p><p> }</p>
复制代码
我的最快235毫秒。


作者: ╰青青子佩ˊゝ    时间: 2014-4-6 08:15
我总结了两点,希望能帮到你。
  1. //代码1
  2. public class TemplateDemo {
  3.         class  GetTime
  4.     {
  5.             public void getTime()
  6.             {
  7.                     long start=System.currentTimeMillis();        
  8.                     for(int x=0;x<10000;x++)
  9.                     {
  10.                             System.out.println(x);
  11.                     }
  12.                     long end =System.currentTimeMillis();
  13.                     System.out.println("毫秒"+(end-start));
  14.             }
  15.     }
  16.     //1.main方法虽然在一个类中,但不属于任何类,即不属于类TemplateDemo中的成员方法,main只是需要一个站脚的地方而已。那么main在访问TemplateDemo内部类时相当于外部其他类在访问TemplateDemo中的内部类,那么,"="右边应为new TemplateDemo().new GetTime();
  17.         //2.那改了"="右边,为什么左边不用改成TemplateDemo.GetTime ge 呢?因为main与内部类GetTime在同一级。如果把main方法调到其他类中来访问TemplateDemo中的内部类,那么就要改成TemplateDemo.GetTime ge .如下面代码2所示
  18.     public static void main(String[] args)
  19.     {
  20.             GetTime ge = new TemplateDemo().new GetTime();
  21.             ge.getTime();
  22.     }        

  23. }
  24. //代码2
  25. class OO{
  26.         public static void main(String[] args)
  27.     {
  28.                 TemplateDemo.GetTime ge = new TemplateDemo().new GetTime();
  29.         ge.getTime();
  30.     }  
  31. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2