A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么,想不通。

6 个回复

倒序浏览
  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 定义了静态成员 (成员变量、成员方法),静态规定,要访问静态方法,那么该类必须是静态的。



评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
我在学习时也遇到此问题,现解决了,以上就是具体操作,望楼主也能尽早解决疑惑!
回复 使用道具 举报
静态方法随类的加载而加载,创建类的同时静态方法加载进内存,这样在类未实例化的情况下通过类名调用静态方法。
内部类的方法若有静态方法,而内部类为非静态,必须实例化后才能加载进内存,内部类的静态方法不能通过外部类名.内部类名.静态方法调用,因为在内存中找不到内部类。
故内部类中有静态方法时,必须同时声明为静态,让内部类随外部类的创建一起加载,内部类中的静态方法才能正常调用。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
静态只能调用静态
回复 使用道具 举报
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();//内部类非静态访问静态成员
}
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
多谢,多谢,gotit.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马