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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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,这是什么意思呢?

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

3 个回复

倒序浏览

静态方法不能访问非静态的成员(方法或属性)
如果在类中声明了一static类型的属性,则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。但用static类型的方法调用非static类型的属性时,则会出现错误。

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Angel♥儱唲 于 2013-7-23 11:32 编辑

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

评分

参与人数 1技术分 +2 收起 理由
特殊服务 + 2 支持纯手打

查看全部评分

回复 使用道具 举报
2楼正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马