局部内部类是否可以访问非final变量:
不能访问局部的,可以访问成员变量(全局的)。
当方法执行完以后,就会出栈,属性也就没有了,但局部内部类的对象可能还在被其他对象引用,但调用的局部属性却没有了,所以,只能调用final的;;;如果没有明确定义final也可以在局部内部类中使用,但一旦使用就会默认改为是final变量
因为final变量在局部内部类使用时,相当于会拷贝一份,所以尽管方法弹栈了,局部变量还是能使用
局部内部类为什么只可以有非静态属性与非静态方法(如果有静态属性需要被定义为final)?
内部类相当于一个方法;非静态方法中不可以有静态属性,所以,必须声明为final,作为一个常量(也就是写死)
再解释一下:静态是属于类的,非静态是属于对象的;;;这句话非常重要,遇到静态问题,有这句话一般都可以想明白
静态资源(属性,匿名块,方法)都是随着类加载,提前加载到方法区的,而非静态资源必须等new一个对象以后,在堆区分配好内存以后才会有的(实际上在栈区的一个地方(栈帧?)保存着这个类的模板吧),所以说,你非静态方法中写静态资源,是会产生逻辑错误的;;;(静态方法中不可以有非静态资源,都是一个道理)