局部内部类是否可以访问非final变量(局部内部类为什么只能访问final修饰的局部变量)?;局部内部类为什么只可以有非静态属性与非静态方法(如果有静态属性需要被定义为final)?

局部内部类是否可以访问非final变量:

不能访问局部的,可以访问成员变量(全局的)。

当方法执行完以后,就会出栈,属性也就没有了,但局部内部类的对象可能还在被其他对象引用,但调用的局部属性却没有了,所以,只能调用final的;;;如果没有明确定义final也可以在局部内部类中使用,但一旦使用就会默认改为是final变量

因为final变量在局部内部类使用时,相当于会拷贝一份,所以尽管方法弹栈了,局部变量还是能使用

 

局部内部类为什么只可以有非静态属性与非静态方法(如果有静态属性需要被定义为final)?

内部类相当于一个方法;非静态方法中不可以有静态属性,所以,必须声明为final,作为一个常量(也就是写死)

再解释一下:静态是属于类的,非静态是属于对象的;;;这句话非常重要,遇到静态问题,有这句话一般都可以想明白

                        静态资源(属性,匿名块,方法)都是随着类加载,提前加载到方法区的,而非静态资源必须等new一个对象以后,在堆区分配好内存以后才会有的(实际上在栈区的一个地方(栈帧?)保存着这个类的模板吧),所以说,你非静态方法中写静态资源,是会产生逻辑错误的;;;(静态方法中不可以有非静态资源,都是一个道理)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值