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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sanguodouble1 中级黑马   /  2014-4-17 14:59  /  1012 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sanguodouble1 于 2014-4-18 09:44 编辑

问大家一个问题,就是方法内部类的
  1.         public void m() {
  2.                 final int b = 0;
  3.                 class Inner {
  4.                         int a = b; //不报错
  5.                          System.out.println(b);//编译器报错
  6.                 }
  7.                 System.out.println(b);//不报错
  8.         }
复制代码
就是上面这个int b,为什么这样打印编译器会报错

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

5 个回复

倒序浏览
你应该将System.out.println(b);//编译器报错 这执行语句放入类中的函数中。它不能独立存在于类中。
回复 使用道具 举报
类是有属性和方法组成对吧?
  内部类也是个类,所以也是由属性和方法组成,所以Inner类中的int b 它是属性
  System.out.println(b);则是代码 不是方法也不是属性,肯定会报错的
回复 使用道具 举报
System.out.println(b);是执行语句,只能存在放在方法之中啊,不能单独在类中使用
回复 使用道具 举报
内部类也是类,只能有方法和属性
我修改了一下你的方法就不报错了
  1.         public void m() {
  2.             final int b = 0;
  3.             class Inner {
  4.                     int a = b; //不报错
  5.                     public void c(){
  6.                             System.out.println(b);//这句话是代码,只能放在方法中,这样就没错了
  7.                     }
  8.             }
  9.             System.out.println(b);//不报错
  10.         }
复制代码
回复 使用道具 举报
public void m() {
        final int b = 0;
        class Inner {
                int a = b; //不报错
               
                void b () {
                 System.out.println(b);//编译器报错  //语句不能直接放到类里面
                }
        }
        System.out.println(b);//不报错
        }

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