1. 抽象類和抽象方法
抽象類:使用abstract修飾的類,包含抽象方法的類必須是抽象類,但抽象類不一定包含抽象方法
抽象方法:使用abstract修飾的方法是抽象方法,抽象方法沒有方法體
抽象類可以包含方法和屬性,構(gòu)造方法,但是抽象不能實例化(不能使用new關(guān)鍵字創(chuàng)建對象)。
抽象類的構(gòu)造方法只能用來被子類調(diào)用
一個類繼承抽象類之后,必須重寫抽象類中的抽象方法或子類也是一個抽象類
實際操作:

執(zhí)行結(jié)果:

在這組編程中,Dog以及Cat作為Animal的子類,繼承到了Animal的特性,然后就必須執(zhí)行和重寫Animal所含的shout方法。
2.接口
接口:接口的本質(zhì)就是一種契約(規(guī)范),它比抽象類更加抽象,接口中所有的方法都是抽象方法(沒有方法體),所有的變量都是常量
定義:
public interface 接口名稱 extends 父接口1,父接口2...{
成員變量(常量)-------->默認使用public static final 修飾的
方法(抽象方法)--------->默認使用public abstract 修飾的
}
在java中類的繼承是單繼承(一個類只能有一個直接父類),而接口可以多繼承(一個接口可以繼承多個父接口)
接口不能實例化(不能new).接口不能包含構(gòu)造方法。
接口和抽象類的區(qū)別
1.抽象類可以包含著普通方法,構(gòu)造方法和非常量的成員變量,而接口中所有的方法都是抽象方法,不能有構(gòu)造方法,其成員變量為常量。
2.接口中方法默認使用public abstract修飾,成員變量默認使用public static final修飾
3.抽象類不能多繼承,而接口可以
實際操作:



3.內(nèi)部類
內(nèi)部類是在一個類中定義定外一個類,外部類的修飾符可以是默認或public
內(nèi)部修飾符可以是public, protected,默認,private以及static
內(nèi)部類可以訪問外部類的成員變量,但外部類不能訪問內(nèi)部的成員變量。
內(nèi)部類的分類:
1.成員內(nèi)部類
a.非靜態(tài)成員內(nèi)部類
b.靜態(tài)成員內(nèi)部類
2.匿名類
3.局部內(nèi)部類



4.String 類常用方法

實際操作:


執(zhí)行結(jié)果:

注意,因為往后會比較多地接觸String字符串,所以對于這些常用方法必須熟練掌握。
5.常量池和字符串判斷
關(guān)于常量池:
?在Java的內(nèi)存分析中,我們會經(jīng)常聽到關(guān)于“常量池”的描述,實際上常量池也分了以下三種:
1. 全局字符串常量池(String Pool)
? ? ??全局字符串常量池中存放的內(nèi)容是在類加載完成后存到String Pool中的,在每個VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串對象實例)。
2. class文件常量池(Class Constant Pool)
? ? ??class常量池是在編譯的時候每個class都有的,在編譯階段,存放的是常量(文本字符串、final常量等)和符號引用。
3. 運行時常量池(Runtime Constant Pool)
? ? ??運行時常量池是在類加載完成之后,將每個class常量池中的符號引用值轉(zhuǎn)存到運行時常量池中,也就是說,每個class都有一個運行時常量池,類在解析之后,將符號引用替換成直接引用,與全局常量池中的引用值保持一致。
實例:

分析過程:
利用內(nèi)存分析,因為str1 和str3 在方法區(qū)里面所指向的是同一個地址,所以判斷為true
str2 指向的是堆中的一個地址,而str4也被賦予了str2的方法,但是所指向的地址與str2不同,所以結(jié)果為false。
Str5 指向的是方法區(qū)String Pool 里的字符串,str4是在運行的時候調(diào)用intern()函數(shù),返回String Pool中“def”的引用值,如果沒有就將str2的引用值添加進去,在這里,String Pool中已經(jīng)有了“def”的引用值了,所以返回上面在new str2的時候添加到String Pool中的 “def”引用值,最后str5在解析的時候就也是指向存在于String Pool中的“def”的引用值結(jié)果為true