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

时间:2014-04-01 08:18:01

标签: java

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

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

}

4 个答案:

答案 0 :(得分:2)

  

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

没有。它不是一个块。它在一个类声明中,但那不是block。 “阻止”不是“大括号中的文字”的同义词。

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

中声明

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

答案 1 :(得分:1)

  

在下面的A类中,isn< t?t x也是一个局部变量,因为它在   块({})

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

  

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

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

答案 2 :(得分:0)

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

  

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

取自here

答案 3 :(得分:0)

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

如果在方法中声明一个变量,那么该变量只有在执行该方法时才有意义,并且在该方法完成后,该变量将被丢弃。

实例变量是一个绑定到""的实例的变量。并且通常被认为持续时间和#34;某些东西"持续。

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

希望这很直观。