Java 使用已在构造函数中初始化的类的属性
如果我设置了一个类的属性值并使用final,我是否必须初始化该属性作为类构造函数的参数?例如,我已将属性rack of length设置为值60Java 使用已在构造函数中初始化的类的属性,java,Java,如果我设置了一个类的属性值并使用final,我是否必须初始化该属性作为类构造函数的参数?例如,我已将属性rack of length设置为值60 public class Runs { Teams team; final int racklength=60; int xposteam; public Runs (Teams y) { team=y; } } final字段必须在内联或构造函数中初始化 例如:
public class Runs {
Teams team;
final int racklength=60;
int xposteam;
public Runs (Teams y) {
team=y;
}
}
final
字段必须在内联或构造函数中初始化
例如:
class Foo {
final String bar = "bar";
Foo() {
}
}
或
这是可以接受的 否,您可以在声明变量的位置初始化它。而且没有理由必须将带有参数的变量分配给构造函数。不,您不必这样做 这两个都很好
public final class SomeClazz {
private final int test=10;
public SomeClazz(){
}
public int getTest() {
return test;
}
}
或
但是,我更喜欢通过构造函数初始化它们,因为这样构造对象的调用方知道如何使用预期值创建对象的状态。如果它应该是一个常量类型值,那么您应该使用
枚举
,而不是以这种方式在类中定义它们。您必须始终初始化final
属性,但您可以在适当的位置(首先声明它的位置)或在它的构造函数(或构造函数)中进行初始化:
您可以通过将代码块缩进4个空格来格式化代码(或者选择代码部分并单击编辑器中的{}按钮)。我这样做是为了你,但是你可能想编辑这个问题,并尝试修改一下格式。“而且没有理由你必须给构造函数分配一个带参数的变量。”-也许我看错了,但是。。。UH如果定义实例级常量(非静态final),则可以通过构造函数参数对其进行初始化。否则,如果一个类的所有实例的实例级常量都具有相同的值,那么我们最好将该常量设置为静态。我同意。你的观点与我所说的并不矛盾。你不需要一个获得者来做到这一点。@Jeremy Heiler-对。我的意思是将测试声明为
private
而不是默认的包private
。我已经更新了我的帖子。你完全没有领会我的意思。为了使类/实例变量成为final.Aah,完全不需要声明getter-我只是重新阅读了文章中的第一行。我得到了它。谢谢
public final class SomeClazz {
private final int test=10;
public SomeClazz(){
}
public int getTest() {
return test;
}
}
public final class SomeClazz {
private final int test;
public SomeClazz(int test){
this.test = test;
}
public int getTest() {
return test;
}
}
public class Runs {
Teams team;
final int racklength; // initialization postponed
int xposteam;
// constructor defaulting racklength to 60
public Runs (Teams y){
team=y;
racklength=60;
}
// constructor with variable initialization of final attribute
public Runs (int l, Teams y){
team=y;
racklength=l;
}
// error since racklength is not initialized during construction
public Runs (){
team=null
}
}