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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dragonsoull 中级黑马   /  2015-8-12 21:23  /  293 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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?

4 个回复

倒序浏览
你懂里面的内涵吗?能不能解释一下啊?
回复 使用道具 举报
应该是JDK的问题,我用的是JDK1.7就报错了,说y没有被final修饰
回复 使用道具 举报
是的,jdk1.8以后可以内部类可以直接访问方法中的局部变量,但是不可以修改,修改是会报错的
回复 使用道具 举报
附上jdk1.8新特性
  刚查了下跟1.8相关的新特性,中间提到一个lambda 项目,解决或部分解决了java匿名内部类中如下缺点:
   1. 语法相对复杂。
   2. 在调用内部类的上下文中,指引和this的指代容易混淆。
   3. 类加载和实例创建语法不可避免。
   4. 不能引用外部的非final对象。
   5. 不能抽象化控制流程
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马