黑马程序员技术交流社区

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

作者: dragonsoull    时间: 2015-8-12 21:23
标题: 内部类
package com.itheima;

public class InnerDemo {
                public static void main(String[] args) throws Exception {
                        new Outer().method();
                }
        }

class Outer{
        int x = 3;
        void method()
        {
                int y = 4;
                class Inner
                {
                        void function()
                        {
                                System.out.println(y);
                        }
                }
                new Inner().function();
        }
}

为什么我的内部类可以访问外部类中没有用final修饰的局部变量??不是说好不能访问的么??这个代码是从毕老师视频里面出来的,毕老师那里编译没通过,我的编译通过了。。。。。。难道是因为我用了jdk8?
作者: shuguang    时间: 2015-8-12 21:33
你懂里面的内涵吗?能不能解释一下啊?
作者: gdh911125    时间: 2015-8-12 21:35
应该是JDK的问题,我用的是JDK1.7就报错了,说y没有被final修饰
作者: 孟茹    时间: 2015-8-13 20:10
是的,jdk1.8以后可以内部类可以直接访问方法中的局部变量,但是不可以修改,修改是会报错的
作者: 孟茹    时间: 2015-8-13 20:13
附上jdk1.8新特性
  刚查了下跟1.8相关的新特性,中间提到一个lambda 项目,解决或部分解决了java匿名内部类中如下缺点:
   1. 语法相对复杂。
   2. 在调用内部类的上下文中,指引和this的指代容易混淆。
   3. 类加载和实例创建语法不可避免。
   4. 不能引用外部的非final对象。
   5. 不能抽象化控制流程




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