Java常見知識點
阿新 • • 發佈:2018-11-28
一,面向物件程式設計的四大特性及其含義?
面向物件是一種思想,即將世間萬物都視為物件。面向物件的四大基本特性分別是封裝,繼承,抽象和多型。
- 封裝:封裝就是將類的具體細節不對外公開,只留一個指定的訪問的通道,這樣做就保證了這個類的獨立性和複用性
- 繼承:這是一種複用機制,一個類可以繼承另一個類或者介面,那麼這個類就會有繼承的類或介面的非私有屬性和方法,提高了軟體的可重用性和可擴充套件性
- 抽象:提取一些事物的主要資訊然後歸結為類,這個提取出來的類是一種模型,它還包含屬性和行為,對抽象出來的類例項化得到物件
- 多型:編譯和執行的型別不一致就是多型,Java實現多型有三個必要條件:繼承、重寫、向上轉型
新建一個Food類:
public class Food {
public void aaa() {
System.out.println("Food類的aaa方法");
bbb();
}
public void bbb() {
System.out.println("Food類的bbb方法");
}
}
再建一個Apple類繼承Food類:
public class Apple extends Food{
public void aaa(String a) {
System.out.println("Apple類的aaa方法");
bbb();
}
@Override
public void bbb() {
System.out.println("Apple類的bbb方法");
}
}
最後建一個測試類:
public class Run {
public static void main(String[] args) {
Food f = new Apple();
f.aaa();
}
}
執行結果:
Food類的aaa方法
Apple類的bbb方法
這個簡單的例子便實現了多型
Food f = new Apple();這句程式碼的意義是,先Food f 建立一個指向Food物件的引用,然後new Apple()呼叫Apple類的構造器,例項Apple類,然後讓這個指向Food類的引用 f 指向例項的Apple物件,由於Apple類是繼承Food類的,所以Apple類會向上轉型,Apple類中的aaa(String a) {}方法在Food類中沒有,所以會被捨棄,Food類中的bbb(){}方法在Apple類中被重寫,所以會被儲存
二,java中String、StringBuffer、StringBuilder的區別
1,是不是可變
- String:String類中使用字元陣列儲存字串,因為有final修飾,所以是不可變的
/** The value is used for character storage. */
private final char value[];
- StringBuffer和StringBuilder:StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字元陣列儲存字串,可知這兩種物件都是可變的
/**
* The value is used for character storage.
*/
char[] value;
2,執行緒是否安全
- String:String中的物件是不可變的,也就可以理解為常量,顯然執行緒安全
- StringBuffer對方法加了同步鎖或者對呼叫的方法加了同步鎖,所以是執行緒安全的
@Override
public synchronized StringBuffer append(Object obj) {
toStringCache = null;
super.append(String.valueOf(obj));
return this;
}
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
- StringBuilder並沒有對方法進行加同步鎖,所以是非執行緒安全的
3,執行速度
StringBuilder > StringBuffer > String
String變數是常量,一旦建立就不可更改,所以每次對String變數的操作都是將當前的變量回收再重新建立物件,所以比較費時
4,試用範圍
- String:適用於少量的字串操作的情況
- StringBuilder:適用於單執行緒下在字元緩衝區進行大量操作的情況
- StringBuffer:適用多執行緒下在字元緩衝區進行大量操作的情況