在 Java 中制作 Class 静态决赛背后的概念
Concept Behind Making A Class Static Final in Java
我是 Java 的新手,在学校阶段,我有一个疑问,谁能更好地解释一下它背后的概念、它的含义、何时使用以及为什么。
public class ParentClass {
private static final ParentClass ourInstance=new ParentClass();
private ArrayList<Integer> arr=new ArrayList<>();
public static ParentClass getinstance() {
return ourInstance;
}
private ParentClass() {
}
public void setList(ArrayList<Integer> al) {
arr.addAll(al);
}
public ArrayList<Integer> getList(){
return arr;
}
}
我想重点关注这一行 private static final ParentClass ourInstance=new ParentClass();
它是什么意思,什么时候我们必须像这样声明语法?我知道我们可以将 class 设置为 Final 然后没有 subclass 可以扩展 final class.In 以上代码的声明方式有所不同,这让我很困惑。
I know when we can make the class Final then no subclass can extends the final class.
没错。但是在您的代码中, final
正在应用于一个字段,这意味着该静态字段 ourInstance
不会被修改,即不会被重新分配给另一个实例。
这里之所以应用static
:
private static final ParentClass ourInstance = new ParentClass();
正在与
合作
public static ParentClass getinstance() {
return ourInstance;
}
private ParentClass() {
}
你正在做的是 "You are creating Class constant",这个上下文中的 final 这个词是用来创建常量的。而且它是静态的,因此无需创建实例来访问它。
你在它声明的地方实例化它,因为你不能在外面做,因为你的构造函数是私有的。因此,只能通过调用 getInstance 访问此 class 的实例,也可以访问已创建的实例。在其外部无法创建实例。这样你就创建了单例,意味着这个 class 的一个实例只会在 VM 中创建。
private static final ParentClass ourInstance=new ParentClass();
当您将 class 的字段声明为 final 时,您无法在初始化后重新分配它的值。
意思是你不能执行下面的代码:
ParentClass otherInstance = new ParentClass();
ourInstance = otherInstance; // Not allowed as ourInstance is final.
但是您可以执行以下操作,即您可以通过调用其 setter 方法来更改 ourInstance 的字段:-
例如
ourInstance.setSomeMethod(someValue); // Allowed as you are not modifying object's reference but only its properties which are not final.
我是 Java 的新手,在学校阶段,我有一个疑问,谁能更好地解释一下它背后的概念、它的含义、何时使用以及为什么。
public class ParentClass {
private static final ParentClass ourInstance=new ParentClass();
private ArrayList<Integer> arr=new ArrayList<>();
public static ParentClass getinstance() {
return ourInstance;
}
private ParentClass() {
}
public void setList(ArrayList<Integer> al) {
arr.addAll(al);
}
public ArrayList<Integer> getList(){
return arr;
}
}
我想重点关注这一行 private static final ParentClass ourInstance=new ParentClass();
它是什么意思,什么时候我们必须像这样声明语法?我知道我们可以将 class 设置为 Final 然后没有 subclass 可以扩展 final class.In 以上代码的声明方式有所不同,这让我很困惑。
I know when we can make the class Final then no subclass can extends the final class.
没错。但是在您的代码中, final
正在应用于一个字段,这意味着该静态字段 ourInstance
不会被修改,即不会被重新分配给另一个实例。
这里之所以应用static
:
private static final ParentClass ourInstance = new ParentClass();
正在与
合作public static ParentClass getinstance() {
return ourInstance;
}
private ParentClass() {
}
你正在做的是 "You are creating Class constant",这个上下文中的 final 这个词是用来创建常量的。而且它是静态的,因此无需创建实例来访问它。
你在它声明的地方实例化它,因为你不能在外面做,因为你的构造函数是私有的。因此,只能通过调用 getInstance 访问此 class 的实例,也可以访问已创建的实例。在其外部无法创建实例。这样你就创建了单例,意味着这个 class 的一个实例只会在 VM 中创建。
private static final ParentClass ourInstance=new ParentClass();
当您将 class 的字段声明为 final 时,您无法在初始化后重新分配它的值。
意思是你不能执行下面的代码:
ParentClass otherInstance = new ParentClass();
ourInstance = otherInstance; // Not allowed as ourInstance is final.
但是您可以执行以下操作,即您可以通过调用其 setter 方法来更改 ourInstance 的字段:- 例如
ourInstance.setSomeMethod(someValue); // Allowed as you are not modifying object's reference but only its properties which are not final.