我是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();
这一行上,它的含义是什么?当我们必须这样声明语法时?我知道我们可以使类Final,然后没有子类可以扩展最终类。在上面的代码中,声明的方式是不同的,这让我很困惑。
private static final ParentClass ourInstance=new ParentClass();
当您将类的字段声明为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.
您正在做的是"您正在创建类常量",这个上下文中的单词final用于创建常量。还有它的静态,所以不需要创建一个实例来访问它
您正在声明的地方实例化它,因为您不能在外部执行,因为您的构造函数是私有的。因此,只有通过调用getInstance才能访问这个类的实例,那个已经创建的实例是可以访问的。在外部无法创建实例。通过这种方式创建singleton,意味着在VM中只会创建此类的一个实例。
我知道什么时候我们可以使类Final,那么没有子类可以扩展Final类。
正确。但在您的代码中,final
应用于字段,这意味着这个静态字段ourInstance
不会被修改,也就是说,它不会被重新分配给另一个实例。
此处应用static
的原因:
private static final ParentClass ourInstance = new ParentClass();
正在使用
public static ParentClass getinstance() {
return ourInstance;
}
private ParentClass() {
}
以实现单例设计模式。