黑马程序员技术交流社区

标题: 用是static声明的内部类访问非static的外部类属性 [打印本页]

作者: 夏一站    时间: 2013-7-23 10:44
标题: 用是static声明的内部类访问非static的外部类属性
  1. class  Outer
  2. {
  3.         int score =95;
  4.         void inst()
  5.         {
  6.                 Inner in =new lnner();
  7.                 in.display();
  8.         }
  9.         //用static声明内部类
  10.         static class Lnner
  11.         {
  12.                 void player()
  13.                 {
  14.                         System.out.println("成绩:score="+score);
  15.        
  16.         }
  17. }
  18. }
  19. public class LnnerClassDemo

  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Outer outer =new Outer();
  24.                 outer.inst();
  25. }
  26. }
复制代码
由于内部类Inner声明为static类型,所以无法访问外部类中的非static属性score,这是什么意思呢?
作者: yangqing    时间: 2013-7-23 11:08

静态方法不能访问非静态的成员(方法或属性)
如果在类中声明了一static类型的属性,则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。但用static类型的方法调用非static类型的属性时,则会出现错误。
作者: Angel♥儱唲    时间: 2013-7-23 11:30
本帖最后由 Angel♥儱唲 于 2013-7-23 11:32 编辑

补充一楼,这就是优先级的问题,被static修饰成员他们在类加载的时候就初始化了,而非静态的成员是随着对象的创建而存在的,也就是此处报错的原因,你加载类的时候首先静态的内部类被分配了内存空间初始化了,但是此时你外部类的非静态成员还没有存在,肯定访问不到报错啦
作者: 曹奎    时间: 2013-7-23 13:37
2楼正解




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