我想问你main方法中声明的变量是实例变量还是局部变量。
这是代码:
public class App {
public static void main(String[] args) {
Animal fish = new Fish();
...
}
}
我正在观看Udemy的视频教程,讲师说fish
是一个实例变量。我以为在方法内部声明的变量是局部变量。
答案 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
}
}