黑马程序员技术交流社区

标题: 当内部类中定义了静态成员(如方法),该类必须是stat... [打印本页]

作者: 谭荣强    时间: 2014-4-13 18:00
标题: 当内部类中定义了静态成员(如方法),该类必须是stat...
为什么,想不通。
作者: wangkerui    时间: 2014-4-13 18:09
  1. 例3: 当内部类中定义了静态成员,该内部类必须是static的。如果该内部类不定义成静态的,代码及结果如下.

  2. class Outer
  3. {
  4.       private static int x = 3;
  5.        
  6.       class Inner           // 只需要将 Inner 类定义成静态的即可成功运行。
  7.       {
  8.            static void function()
  9.            {
  10.                   System.out.println("inner:"+x);
  11.            }
  12.                
  13.        }
  14. }

  15. class Test
  16. {
  17.          public static void main(String[] args)
  18.         {
  19.              Outer.Inner.function();
  20.         }
  21. }
复制代码
运行结果:
                    Exception in thread "main" java.lang.Error: 无法解析的编译问题:
                方法 function 不能声明为“静态”;只能在静态类型或顶级类型中才能声明静态方法

                at Outer$Inner.function(Test.java:7)
                at Test.main(Test.java:19)


范例分析:
                    当内部类中定义了静态成员,该内部类必须是static的。内部类 Inner 定义了静态成员 (成员变量、成员方法),静态规定,要访问静态方法,那么该类必须是静态的。




作者: wangkerui    时间: 2014-4-13 18:11
我在学习时也遇到此问题,现解决了,以上就是具体操作,望楼主也能尽早解决疑惑!
作者: 呆呆沙师妹    时间: 2014-4-13 18:30
静态方法随类的加载而加载,创建类的同时静态方法加载进内存,这样在类未实例化的情况下通过类名调用静态方法。
内部类的方法若有静态方法,而内部类为非静态,必须实例化后才能加载进内存,内部类的静态方法不能通过外部类名.内部类名.静态方法调用,因为在内存中找不到内部类。
故内部类中有静态方法时,必须同时声明为静态,让内部类随外部类的创建一起加载,内部类中的静态方法才能正常调用。
作者: hzr50628    时间: 2014-4-13 19:51
静态只能调用静态
作者: ilvsoft    时间: 2014-4-13 20:08
class Outer{
      int x;
      class Inner{
       static void method()
  {
     System.out.println();

  }
}
}

class Lizi{
   public static void main(String[] args){
     Out o=new Outer();
     o.Inner.Method();//如果内部类是静态的话访问静态成员或者可以写成                                                
                                // Outer.Inner.Method();
/////////////////////////////////////////////////////////
      Outer.Inner i=new Outer().new Inner();
       i.Method();//内部类非静态访问静态成员
}
}
作者: 谭荣强    时间: 2014-4-14 09:32
多谢,多谢,gotit.




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