黑马程序员技术交流社区
标题:
当内部类中定义了静态成员(如方法),该类必须是stat...
[打印本页]
作者:
谭荣强
时间:
2014-4-13 18:00
标题:
当内部类中定义了静态成员(如方法),该类必须是stat...
为什么,想不通。
作者:
wangkerui
时间:
2014-4-13 18:09
例3: 当内部类中定义了静态成员,该内部类必须是static的。如果该内部类不定义成静态的,代码及结果如下.
class Outer
{
private static int x = 3;
class Inner // 只需要将 Inner 类定义成静态的即可成功运行。
{
static void function()
{
System.out.println("inner:"+x);
}
}
}
class Test
{
public static void main(String[] args)
{
Outer.Inner.function();
}
}
复制代码
运行结果:
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