Java,Class 中的 For 循环

Java, For Loop in Class

我是一名新手程序员,我正在创建这个程序,我想在其中创建一个大小为 10 的布尔值列表,然后将所有值设置为 false。正如我在 Java 中所理解的那样,不应该将代码直接放在 class 中而不用方法包围它们。但是,我希望在创建 class 的实例后立即完成此操作。

我的问题是应该在哪里完成。我应该在构造函数中执行此操作,是否应该使用列表的所有值初始化列表,或者我是否只是错过了一些使得直接在 class 中放置 for 循环完全没问题的东西?谢谢

有人请求我的一些代码,所以这是这里的问题:

boolean[] numKeysPressed = new boolean[10];


for(int i = 0; i<10; i++){
    numKeysPressed[i] = false;
}

您需要将代码放入构造函数中。

public class MyClass{

    boolean[] numKeysPressed = new boolean[10];

    public MyClass(){
        for(int i = 0; i < numKeysPressed.length; i++){
            numKeysPressed[i] = false;
        }
    }

}

请注意,布尔值的默认值为 false,因此这一步是不必要的。

However I want this to be done as soon as an instance of the class is created.

My question is then where this should be done. Should I do this in a constructor..

是的,这是一个完美的地方,因为构造函数的目的是用适当的状态初始化新创建的对象。

如果您的构造函数很少,您可以使用初始化块,它会由编译器自动添加到每个构造函数的开头

class YourClass{

    List<Boolean> list; 

    YourClass(){
        //constructor 1
    }

    YourClass(String s){
        //constructor 2
    }

    {
        //initialization block, will be executed at start of each
        //constructor (right after its super() call).
        list = new ArrayList<>();
        for (int i=0; i<10; i++)
            list.add(Boolean.FALSE);
    }

}

顺便说一句,如果列表是指 boolean[] 数组,那么它默认填充有 false 值,因此您无需设置它。简单

class YourClass{
    boolean[] list = new boolean[10]; // this array will be filed with false

}

这正是 constructors(<= 单击 link 获取教程)的目的 - 初始化 class 的成员。 Java VM 在创建对象时调用 class 的构造函数之一。

请注意 boolean 的默认值为 false。因此,您的 for 循环是多余的 - 当您创建数组时,数组中的所有 boolean 值都已设置为 false

请记住,Java 中的所有实例变量和数组都被初始化为其等效的 0。

这意味着 booleans 和数组将始终用它们的 0 等效值填充,即 false.

所以只要你有一个实例变量(在任何方法之外创建的变量),它就会默认为false

将这一行放在 class 中的某处(以及方法之外)就可以了:

boolean [] array = new boolean[7];

array将是一个包含7个boolean类型元素的列表,其值都是false.

您可以按如下方式将数组初始化为私有成员:

public class myClass {
     private boolean array1[] = new boolean[] {false, true, false};
}

或者在构造函数中做如下:

public class myClass {
   private boolean array2[] = null;
   public myClass () {
     Arrays.fill(array2, false);
  }
}