一、字串常量池-(了解即可)
特點及作用:儲存在【方法區】中,可以【重複的利用】已有的【字串物件】->【節約記憶體】
字串 string:固定字串,不可變字串(物件裡儲存的字元不能更改)
stringbuilder:可變字串(物件裡儲存的字元可以更改)
stringbuffere:可變字串(物件裡儲存的字元可以更改)
string intern:始終返回字串物件在【字串常量池】中對應的內容的【字串物件】。
--》利用常量池-》節約記憶體。
1)常量池的物件呼叫intern:直接返回自己的物件。
2)堆裡的物件呼叫intern:如果常量池有對應內容的物件,直接返回常量池物件,沒有,
建立乙個字串物件在常量池中,再返回。
string建立物件的兩種方式-》已經利用字串常量池
1)字串字面值
語法:"字串內容"
2)new物件
new string(字串內容)
string(string original)
copy引數original的內容到新字串物件中,並返回新物件。
注意點1)字串字面值--》可以利用字串常量池
2)new string(字串內容)--》不可以利用字串常量池
--->怎麼選擇==》使用字串字面值--》可以利用字串常量池--》節約記憶體
二、面向超型別程式設計-》
1)定義超型別員工staff
2)具體員工-繼承staff
3)超型別員工staff-定義統一功能-工作
4)具體員工-重寫-工作功能
超型別--》普通類-存在的問題
1)具體類【可以不重寫】必須重寫的方法
2)具體類-作為超型別,【也可以建立物件】-》new staff
不應該建立物件,因為staff是我們抽象出來的,不是業務需要的類。
三、抽象類:也是類,相比普通類而言,多了可以定義抽象方法
抽象方法 ?
就是有功能名字,沒有功能實現。
抽象方法有什麼用?
有時候,類中有一些功能不能確定具體怎麼完成,就可以定義為抽象的方法
抽象和具體不是一定的:由需求,由客戶決定
abstract:抽象的
抽象類的定義語法
abstract class 抽象類名
抽象方法的定義語法
訪問修飾符 abstract
返回值型別
方法名(引數列表);
抽象類注意點
1)抽象類可以擁有0到多個抽象方法
2)普通類不能擁有抽象方法,有抽象方法必須定義為抽象類。
3)抽象類不能(例項化)建立物件
4)抽象類的子型別
a)普通類:對於父類抽象類的所有的抽象的方法-》必須全部實現(重寫)
b)抽象類:對於父類抽象類的所有的抽象的方法-》可選實現(重寫)
5)abstract不能和static一起使用-》物件導向
6)abstract不能和final一起使用-》矛盾了
四、介面是什麼?
生活中,usb(傳輸資料,充電),指紋(解鎖,支付),wifi(傳輸資料,上網)就是介面!!
簡單理解介面:就是描述了一套抽象功能的集合,就是能完成的事情,但是不做實現!!!
介面和抽象類:包含了抽象的功能,不能建立物件。
都是作為超型別-》規範統一的資料和功能來使用。
怎麼選擇?介面和抽象類
1)如果超型別中有【資料也有功能】---》抽象類】
2)如果超型別中【只有功能】---》介面
定義介面的語法
inte***ce 介面名
公共的抽象的方法:【public abstract】 返回值型別 方法名(引數列表);
注意:【public abstract】可以不寫,預設加上。
公共的靜態的常量:【public static final】 資料型別 常量名[=值1],...;
注意:【public static final】可以不寫,預設加上。
1)類和類的關係
類可以單繼承類:在子類中可以得到繼承鏈上所有的【資料和功能】
類person繼承類animal
class person extends animal{}
2)類和介面的關係
類可以多實現介面:在子類中得到介面中所有的【抽象-功能】
類person繼承類animal,實現runnable介面(可以跑的),實現flyable介面(可以飛的)
class person [extends animal] [implements runnable,flyable]{}
3)介面和介面的關係
介面可以多繼承介面:在子介面中得到所有繼承的介面中所有的【抽象-功能】
介面a,繼承介面b和c
inte***ce a extends b,c
字串常量池
string的不可變性。字串常量池是不會儲存相同內容的字串。xx stringtablesize設定stringtable的長度。jdk8最小值為1009 string的string pool是固定大小的hashtable 字串常量池在堆中。字串拼接操作 和 equals equals 對於obje...
字串常量池
string a hello string b hello string aa new string aa string bb new string bb 字串常量池在方法區中 其中 變數a jvm先到字串常量池中尋找如果沒有就在字串常量池中建立乙個字串hello,並且將該字串常量池的hello的記...
JAVA 字串常量池
system.out.println s s1 string 類 equals 重寫 比較的內容 system.out.println s.equals s1 字串是常量,它們的值在建立之後不能更改 一旦修改字串儲存的資料 自動建立乙個的物件內部儲存是修改的資料 string s2 abc new ...