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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Demo
{
        int x=3;
        void function()
        {
                int y=4;
                class Timo                                                                                                        //在局部的内部类是不允许用修饰符来修饰的,例如static
                {
                        void run()                                                                                                //这就导致了局部内部类中的方法是不允许出现静态的
                        {
                                System.out.println("引用的数是:"+Demo.this.x);                //局部内部类是可以引用外部类的变量的
                                System.out.println("引用的数是:"+y);                               
                        }
                }
                new Timo().run();
        }
}
class Q1
{
        public static void main(String[] args)
        {
                new Demo().function();
        }
}
//为什么我没有将y声明为最终类型,还是可以运行出来而且不报错呢?

1 个回复

倒序浏览
本帖最后由 sunsteam 于 2015-8-23 22:31 编辑

新的jdk会在局部内部类读取局部变量的时候自动补写final以保证程序运行 , 但是如果这个变量做了final变量不允许做的事, 比如他被赋值了 编译就失败.  

你在函数里补个y++或者别的什么看看就会看到新版提示  但是不赋值是可以运算的  比如System.out.println("引用的数是:"+(y+x));  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马