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

问题描述 投票:-1回答:6

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

这是代码:

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

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

java main instance-variables
6个回答
2
投票

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

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

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

0
投票

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


0
投票

这由Scope调用。

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


0
投票

因此,Oracle defines“实例变量”:

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

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


0
投票

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

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


0
投票

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

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
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.