黑马程序员技术交流社区

标题: 内部类 [打印本页]

作者: chudaming213    时间: 2015-1-21 16:40
标题: 内部类
局部内部类不是不能访问局部变量吗??
  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. }
复制代码



作者: 小棽    时间: 2015-1-21 18:06
你定义的那个不是局部变量而是成员变量,局部变量一般都是定义在方法内或者其他某个代码块里,定以在类里的变量称为成员变量,在这里,成员变量是可以被内部类访问的
作者: chudaming213    时间: 2015-1-22 09:10
小棽 发表于 2015-1-21 18:06
你定义的那个不是局部变量而是成员变量,局部变量一般都是定义在方法内或者其他某个代码块里,定以在类里的 ...

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


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

难道是我的Eclipse有问题??

作者: 自信流云    时间: 2015-1-22 09:58
chudaming213 发表于 2015-1-22 09:49
难道是我的Eclipse有问题??

我用Esceplise和命令行都试了,都不行。你自己用命令行试试吧!
作者: 377413612    时间: 2015-1-22 20:57
不错,加油中
作者: 小棽    时间: 2015-1-28 13:20
不可以那样写,因为在局部内部类中访问的局部变量都要被final修饰,如果没有被final修饰的话,会出现错误。要被final修饰的原因是因为局部变量的生存周期太短,一编译就要被使用了
作者: 潇洒小哥    时间: 2015-1-28 14:38
你这样写可以是访问的,那个局部变量和内部类在同个方法里




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