我是靠谱客的博主 雪白耳机,最近开发中收集的这篇文章主要介绍Java_为什么局部内部类可以访问方法中的局部变量但不能进行修改?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

局部内部类是指定义在方法中的类。
看下面的例子,哪些变量可以被局部内部类Inner访问并修改?

public class Test{
private int a;
static int b;
public void func(){
int j=10;
class Inner{
}
}
}

逐个分析:
1.Test类的成员属性a,权限为private,只能在本类中使用,Inner内部类在外部类Test之中,所以Inner是可以访问并修改成员变量a的。

2.静态变量b,静态变量归类所有,内部类当然可以使用。

3.方法func()中的局部变量j,只能访问不能修改,为什么?
本质是内存分布空间的不同,栈和堆的垃圾回收机制不同,为保持数据同步作出的规定。
这就要提到类的生命周期(Java_类的生命周期(类的加载与垃圾回收))。
类初始化的过程中会首先在方法区(在堆中)为静态属性分配内存并赋值
在对象实例化时会对类的成员属性在堆中分配内存赋默认值。
而局部变量则不同,局部变量是存储在栈中。
那堆中和栈中有什么不同呢?
这和垃圾回收机制有关:
栈中的局部变量不需要专门的垃圾回收,方法入栈,局部变量创建,方法出栈,局部变量清除。
而堆中有专门的垃圾回收机制((Java_类的生命周期(类的加载与垃圾回收)))。
所以内部类虽然在方法中,但是它的内存是分配在堆中的,而方法在栈中出栈时,在堆中内部类对象并不会立刻被回收,如果内部类可以修改方法中的局部变量话,一旦方法已经出栈,而内部类的对象仍然存在被其它引用或者在堆中没有被垃圾回收,这个时候就会出现矛盾。
所以这就规定内部类只能访问方法中的局部变量(访问其实也是局部变量的副本,符合Java_值传递原则(基本数据类型实参向形参传递参数的副本,引用数据类型传递的是引用的地址值),不能修改局部变量。

最后

以上就是雪白耳机为你收集整理的Java_为什么局部内部类可以访问方法中的局部变量但不能进行修改?的全部内容,希望文章能够帮你解决Java_为什么局部内部类可以访问方法中的局部变量但不能进行修改?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部