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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chudaming213 中级黑马   /  2015-1-21 16:40  /  1818 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

局部内部类不是不能访问局部变量吗??
  1. public class OutClass {
  2.         public void show(){
  3.                 int kkk=224;
  4. //                定义局部内部类
  5.                 class Inner1{
  6.                         public  void show(){
  7.                                 System.out.println(kkk);//可以这么写吗?为什么?
  8.                         }
  9.                        
  10.                 }
  11.                 new Inner1().show();
  12.         }

  13.         public static void main(String[] args) {
  14.                 new OutClass().show();
  15.         }
  16. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 不能编译,局部final修饰

查看全部评分

8 个回复

倒序浏览
你定义的那个不是局部变量而是成员变量,局部变量一般都是定义在方法内或者其他某个代码块里,定以在类里的变量称为成员变量,在这里,成员变量是可以被内部类访问的
回复 使用道具 举报
小棽 发表于 2015-1-21 18:06
你定义的那个不是局部变量而是成员变量,局部变量一般都是定义在方法内或者其他某个代码块里,定以在类里的 ...

我定义的是局部变量啊??

回复 使用道具 举报
LZ编译运行过你的代码吗?我复制下来,编译通过不了,显示“错误:从内部类中访问本地变量kkk;需要被声明为最终类型”。
回复 使用道具 举报
自信流云 发表于 2015-1-22 09:46
LZ编译运行过你的代码吗?我复制下来,编译通过不了,显示“错误:从内部类中访问本地变量kkk;需要被声明 ...

难道是我的Eclipse有问题??
回复 使用道具 举报
chudaming213 发表于 2015-1-22 09:49
难道是我的Eclipse有问题??

我用Esceplise和命令行都试了,都不行。你自己用命令行试试吧!
回复 使用道具 举报
不错,加油中
回复 使用道具 举报
小棽 中级黑马 2015-1-28 13:20:23
8#
不可以那样写,因为在局部内部类中访问的局部变量都要被final修饰,如果没有被final修饰的话,会出现错误。要被final修饰的原因是因为局部变量的生存周期太短,一编译就要被使用了
回复 使用道具 举报
你这样写可以是访问的,那个局部变量和内部类在同个方法里
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马