1

假设我的主类中有一个对象的 ArrayList,假设它们是狗,我这样创建ArrayList <Dog> dogs = new ArrayList<Dog>();

现在让我们说在这个Dog-Class 中有一个全局布尔数组:

boolean[] eyes= new boolean[2];
eyes[0] = true;
eyes[1] = true;

Dog我在我的主类中创建了我的第一个,在 的构造函数中DogDog失去了一只眼睛,现在Array的布尔值Dog看起来像这样:

boolean[] eyes= new boolean[2];
eyes[0] = true;
eyes[1] = false;

如果我现在回到我的主班并创造另一个Dog,这只狗也会有一只眼睛吗?还是会像第一只狗一样用两只眼睛创造出来?

随意给这个新标题,我不知道如何解决这个问题。

编辑:全局我的意思是在构造函数或任何其他方法之外创建和启动的变量,如下所示:

public class Dog{
boolean[] eyes= new boolean[]{true, true};

public Dog(){
//...
}
}
4

3 回答 3

1

在 Java 中,变量既可以属于类本身,也可以属于该类的实例。实例变量是常见的,必须在构造函数或其他方法中设置,并且它们在类的不同实例之间根本不共享。类变量是用关键字声明的static,它们在该类的所有实例之间共享(一个改变改变所有)。

于 2013-08-01T01:28:05.993 回答
0

这取决于您所说的全局。如果变量是静态的,那么是的,所有的狗都将具有相同的数组。如果它是一个实例变量,那么它只适用于那只特定的狗。

于 2013-08-01T01:27:11.673 回答
0

每个新对象都有它自己的行为,所以,第二只狗和第一只狗不同,假设你买了两只狗,第一只是母狗,第二只是公狗,它们是不同的,但它们都是狗。

您可以为它们购买绳索,这意味着通过所有对象共享一些信息,这意味着创建static fields,如果您希望所有狗都有 2 只眼睛,只需创建一个静态字段,它将自动通过所有对象共享。

于 2013-08-01T01:32:09.880 回答