為什麼 Java 中的字串是不可變的?
來源:Dev.to 在理解為什麼 Java 中的字串是不可變的之前,我們需要思考為什麼我們要讓某些東西不可變? 不可變意味著一旦創建我們就無法更改它。我們可以想到使某些東西不可變的唯一原因是一起使用時的同步。這就是字串不可變的原因。在Java中, String物件是共享的,並且緩存在String Pool中。它是堆上儲存字串的特定位置,如果字串具有相同的值,則在多個執行緒之間共用這些字串。例如:在字串池中,如果已經存在一個值為“test”的字串,並且程式想要建立另一個具有相同值的字串對象,那麼它將獲得相同的引用,而不是創建一個新的字串物件。現在我們知道字串是如何儲存在堆上的。讓我們看看為什麼它們沒有變化。-
不變性的第一個原因是線程安全。由於行在行池中的多個執行緒之間共享,因此我們需要限制任何隨機執行緒來更改它。對行的任何更改都可能影響訪問同一行的其他線程。如果一個執行緒想要新一行的值,它需要建立另一行並引用它。
-
通常我們會使用String作為Map中的鍵。如果字串是可變的,任何人都可以更改字串的值,而我們將遺失實際的金鑰。
Java中的介面與多重繼承
資料來源:Dev.to 讓我們了解什麼是多重繼承。多重繼承是一些物件導向程式語言的功能,其中一個物件或類別可以從多個父物件或父類別繼承功能。 如上圖所示,多重繼承子類別可以有兩個或多個基類,但要實現這一點,我們需要一個介面。介面
Java 中的介面是類別的藍圖。它有靜態常數和抽象方法。也就是說,介面只能包含抽象方法和變量,不能有方法體。它不能以與抽象類別相同的方式創建。那我們要在哪裡聲明這些方法的主體呢?
方法體根據程式設計師的要求在需要該方法的類別內部聲明。如何聲明接口?
可以使用interface關鍵字來聲明介面。句法:interface interface_name {abstract methods}
筆記
為了在類別中使用聲明的接口,我們必須使用implements關鍵字。執行?
首先,我們將建立一個列印接口,並在其中建立一個抽象print()方法;interface printgib{
void print();
}
現在我們已經有了一個可供類別使用的接口,因此讓我們建立類別abc和gk並在其中實作該介面。
public class abc implements printgib{
public void print(){ //1st implementation of print
System.out.println("I love you 3000");
}
public static void main(String[] args){
abc obj = new abc();
gk obj1 = new gk();
obj.print();
obj1.print();
}
}
class gk implements printgib{
public void print(){ //2nd implementation of print
System.out.println("I am Gk");
}
}
如上面的程式碼所示,我們實作了多重繼承並實作了一個介面。現在運行程式碼,儲存檔案並...
javac file_name.java
java abc
GO TO FULL VERSION