在main方法中声明的变量是局部变量吗?

时间:2019-02-19 16:12:32

标签: java main instance-variables

我想问你main方法中声明的变量是实例变量还是局部变量。

这是代码:

public class App {
   public static void main(String[] args) {
       Animal fish = new Fish();
       ...
   }
}

我正在观看Udemy的视频教程,讲师说fish是一个实例变量。我以为在方法内部声明的变量是局部变量。

6 个答案:

答案 0 :(得分:1)

在类内部但在方法主体外部声明的变量称为 实例变量 。之所以称为实例变量,是因为其值是特定于实例的,并且不会在实例之间共享。

在方法主体内部声明的变量称为 局部变量 。您只能在该方法内使用此变量,而在该方法外看不到它们。

class A {
    int data = 50; //instance variable  
    void method() {
        int n = 90; //local variable  
    }

答案 1 :(得分:0)

如果在任何方法中声明任何变量,则它是局部变量。 您的main方法可能是一种特殊的方法,但这是一种方法。因此,您在main中声明的任何内容也将是局部变量。

答案 2 :(得分:0)

这由 Scope 调用。

方法主体范围变量只能在方法主体中访问(局部变量,参数)

答案 3 :(得分:0)

Oracle defines这样的“实例变量”:

  

实例变量(非静态字段)从技术上讲,对象   将其各自的状态存储在“非静态字段”中,即字段   声明时不带static关键字。非静态字段也是已知的   作为实例变量,因为它们的值对于每个实例都是唯一的   一堂课

我认为Udemy导师使用不幸的术语来指代“引用实例的变量”。换句话说,他是在通俗地使用“实例变量”一词,而不是正式含义。

答案 4 :(得分:0)

由于它仅在main方法中具有可见性,所以它是局部变量,而实例变量可以在类中的所有方法中看到。

您可以参考此old thread来说明局部变量和实例变量之间的区别

答案 5 :(得分:0)

您的fish变量是reference variable。引用变量是那些保存对对象(在您的情况下为Fish类的对象)的内存引用的变量。 Instance variables是属于实例的那些变量。在Fish类中,您可能已经声明了一些定义对象属性的变量。例如:color可以是一个变量,用于定义特定鱼的颜色(Fish类的实例)。现在为您解答,fish变量是一个局部变量,因为它存在于您的main方法(这是另一个方法)中。因此,如果要通过其他方法访问同一对象,则需要将该对象的引用作为该方法的参数传递,如下所示:

public class App {
   public static void main(String[] args) {
       Animal fish = new Fish();
       ...
       new App().anotherMethod(fish)    //pass the memory reference of the object
   }
  public void anotherMethod(Fish fishRef){  // memory reference is now in fishRef

      //fishRef now accesses the same object as your fish variable in main method
  }

}