繁体   English   中英

为什么在类中定义的变量不是局部变量而是java中的实例变量?

[英]why variable defined in a class is not a local variable but instance variable in java?

根据doc,java中的局部变量在方法,构造函数或块中声明。

在下面的A类不是xa局部变量,因为它是在块({})我知道它们被称为实例变量,但我很困惑? 如果是访问修饰符不能用于本地变量,但我相信我可以添加公共私有保护? 它还说局部变量存储在堆栈中但是根据下面的代码,x将被存储在堆中,因为它们是实例的一部分?

class A{

private int x = 5; // Isn't this a local varibale too since it is in blocks 

}

class A{

public void function(){
int x = 5; // this is a local variable since it is declared in a function
private int x2=5; // Error Access modifiers cannot be used for local variables
}

}

在下面的类A中也不是xa局部变量,因为它在块({})中

不,它不在一个街区。 它在一个类声明中,但这不是一个 “Block”与“大括号中的文字”不是同义词。

为了更清楚一点,局部变量在:

如果你看一下类声明的产生 ,那就不是一个Block(与静态初始化器和实例初始化器的生产不同)。

在下面的类A中也不是xa局部变量,因为它在块({})中

你的x不是局部变量,它是一个实例变量。 块意味着,实例初始化块或静态块或尝试捕获块。

访问修饰符不能用于局部变量,但我确定我可以添加公共私有保护?

对方法局部变量使用访问修饰符没有意义,因为方法局部变量只能在方法内部访问。

我不完全确定你在哪里读书。 局部变量是在方法内声明的值。

没有特殊的关键字将变量指定为本地变量; 该决定完全来自声明变量的位置 - 它位于方法的开始和结束括号之间。

取自这里

局部变量是具有局部范围的变量,通常不会持续很长时间。

如果在方法中声明变量,则该变量仅在执行该方法时才相关,并且在该方法完成后,该变量将被丢弃。

实例变量是绑定到“某事”实例的变量,并且通常被认为只要“某事”持续就会持续。

如果在类中声明变量,那么当您创建类的新实例时,该变量也将被创建并固定到类上。 只要您创建的类的实例对象存在,变量就会存在,如果您决定放弃所创建的类的实例,那么实例变量也会被丢弃。

希望这很直观。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM