如果我們說(shuō)另一種不同的語(yǔ)言,那么我們就會(huì)發(fā)覺有一個(gè)不同的世界
——Luduing Wittgerstein
1、面向?qū)ο蟮奶卣饔心男?/p>
封裝
最常見的是把屬性私有化封裝在一個(gè)類里面宜肉,只能通過(guò)方法去訪問(wèn)
繼承
子類繼承父類,從而繼承了父類的方法和屬性
抽象
比如一個(gè)英雄類赁酝,抽象出了name葵姥、hp這些屬性,使得開發(fā)過(guò)程中更加易于理解
多態(tài)
多態(tài)分操作符的多態(tài)和類的多態(tài)蔫饰,類的多態(tài)指父類引用指向子類對(duì)象琅豆,并且有繼承,有重寫
2篓吁、String是最基本的數(shù)據(jù)類型嗎
不是茫因,String 是類類型
基本數(shù)據(jù)類型有四類八種
整型 byte short int long
字符 char
浮點(diǎn) double float
布爾 boolean
3、int 和integer有什么區(qū)別
int是基本數(shù)據(jù)類型32位證書
Integer是類類型杖剪,是int的包裝類
int和integer之間可以通過(guò)自動(dòng)裝箱冻押、自動(dòng)拆箱互相轉(zhuǎn)換
自動(dòng)裝箱:不需要調(diào)用構(gòu)造方法,通過(guò)=符號(hào)把基本類型轉(zhuǎn)換為類類型就叫裝箱
自動(dòng)拆箱:不需要調(diào)用integer的intvalue方法盛嘿,通過(guò)=就自動(dòng)轉(zhuǎn)換為int類型洛巢,就叫拆箱
4、String和StringBuffer的區(qū)別
String是immutable的次兆,其內(nèi)容一旦創(chuàng)建好之后稿茉,就不可以發(fā)生改變
StringBufffer是可以變長(zhǎng)的,內(nèi)容也可以發(fā)生改變
改變的原理是StringBuffer內(nèi)部采用了字符數(shù)組存放數(shù)據(jù),在需要增加長(zhǎng)度的時(shí)候漓库,創(chuàng)建新的數(shù)組恃慧,并且把原來(lái)的數(shù)據(jù)復(fù)制到新的數(shù)組這樣的辦法實(shí)現(xiàn)
5、為什么String類型不可變
String的成員變量都是private final的米苹,初始化之后不可變糕伐。
不可變的好處:最主要還是安全問(wèn)題
·便于實(shí)現(xiàn)字符串池
在java中會(huì)大量的使用String常量,如果每一次聲明一個(gè)String都要?jiǎng)?chuàng)建一個(gè)String
對(duì)象蘸嘶,那將會(huì)造成極大的空間資源浪費(fèi)良瞧。于是提出了String pool的概念,在堆中開辟一塊存儲(chǔ)空間String tool训唱,當(dāng)初始化String變量時(shí)褥蚯,如果該字符串已經(jīng)存在了,就不會(huì)創(chuàng)建一個(gè)新的字符串變量况增,而是會(huì)返回已經(jīng)存在了的字符串的引用
· 使線程安全
· 避免安全問(wèn)題
· 加快字符串處理速度
可通過(guò)反射破壞String的不可變性
6赞庶、運(yùn)行時(shí)異常與一般異常有什么區(qū)別?
運(yùn)行時(shí)異常又叫做非可排查異常澳骤,在編譯過(guò)程中歧强,不要求必須進(jìn)行顯示捕捉
一般異常又叫做可排查異常,在編譯過(guò)程中为肮,必須進(jìn)行處理摊册,要么捕捉,要么通過(guò)throws拋出去
7颊艳、說(shuō)出ArrayList茅特,Vector,LinkedList的存儲(chǔ)性能和特性
ArrayList和Vector棋枕,兩者都繼承了抽象類AbstractList白修,但是Vector是線程安全的,而ArrayList是非線程安全的
ArrayList和LinkedList區(qū)別重斑,參見8
8兵睛、ArrayList和LinkedList的區(qū)別
· ArrayList的實(shí)現(xiàn)是基于數(shù)組,LinkedList的實(shí)現(xiàn)是基于雙向鏈表
· 對(duì)于隨機(jī)訪問(wèn)窥浪,ArrayList優(yōu)于LinkedList卤恳,ArrayList可以根據(jù)下標(biāo)O(1)時(shí)間復(fù)雜度對(duì)元素進(jìn)行隨機(jī)訪問(wèn)。而LinkedList的每一個(gè)元素都依靠地址指針和它后一個(gè)元素連接在一起寒矿,在這種情況下突琳,查找某個(gè)元素的時(shí)間復(fù)雜度是O(n)
· 對(duì)于插入和刪除操作,LinkedList優(yōu)于ArrayList符相,因?yàn)楫?dāng)勻速被添加在LinkedList任意位置的時(shí)候拆融,不需要像ArrayList那樣重新計(jì)算大小或者更新索引
· LinkedList比ArrayList更占內(nèi)存蠢琳,因?yàn)長(zhǎng)inkedList的節(jié)點(diǎn)除了存儲(chǔ)數(shù)據(jù),還存儲(chǔ)了兩個(gè)引用镜豹,一個(gè)指向前一個(gè)元素傲须,一個(gè)指向后一個(gè)元素
9、Collection和Collections的區(qū)別
Collection是接口趟脂,是List和Set的父接口
Collections是工具類泰讽,提供了排序、混淆等等實(shí)用方法
10昔期、&和&&的區(qū)別
&有兩個(gè)作用已卸,分別是位與和邏輯與
&& 就是邏輯與
作為邏輯與,& 和 &&分別表示長(zhǎng)路與和短路與
長(zhǎng)路與兩次都會(huì)被運(yùn)損
短路與 只要第一個(gè)是false硼一,第二個(gè)就不進(jìn)行運(yùn)算了
11累澡、HashMap和Hashtable的區(qū)別
HashMap和Hashtable都實(shí)現(xiàn)了Map接口,都是鍵值對(duì)保存數(shù)據(jù)的方式
區(qū)別1:HashMap可以存放null般贼,Hashtable不能
區(qū)別2:HashMap不是線程安全的類读拆,Hashtable是
12栓袖、final傲绣、finally咆爽、finalize的區(qū)別
final
final修飾類、方法腮介、基本類型變量
修飾類望几,表示該類不能被繼承
修飾方法,表示該方法不能被重寫
修飾基本類型變量萤厅,表示該變量只能被賦值一次
修飾引用 表示引用只有一次指向?qū)ο蟮臋C(jī)會(huì)
finally
finally用于異常處理的場(chǎng)面,無(wú)論是否有異常拋出靴迫,都會(huì)執(zhí)行
finalize
finalize是Object的方法惕味,所有類都繼承了該方法。當(dāng)一個(gè)對(duì)象滿足垃圾回收的條件玉锌,并且被回收的時(shí)候名挥,其finalize()方法就會(huì)被調(diào)用
13、Overload和Override的區(qū)別主守,即重載和重寫的區(qū)別禀倔,OverLoaded的方法是否可以改變返回值的類型?
OverLoad参淫。重載
Override 重寫
可以救湖,重載其實(shí)本質(zhì)上就是完全不同的方法,只是恰好取了相同的名字
14涎才、Error和Exception的區(qū)別
Error和Exception都實(shí)現(xiàn)了Throwable接口
Error指的是JVM層面的錯(cuò)誤鞋既,比如內(nèi)存不足OOM
Exception指的是代碼邏輯的異常力九,比如數(shù)組下表越界等
15、abstract 邑闺、class跌前、抽象類和interface接口的區(qū)別
使用方式:
抽象類只能通過(guò)繼承被使用
接口必須通過(guò)實(shí)現(xiàn)被使用
實(shí)現(xiàn)方法:
抽象類不近可以提供抽象方法,也可以提供實(shí)現(xiàn)方法
接口只能提供抽象方法陡舅,不能提供實(shí)現(xiàn)方法抵乓,但從1.8開始,接口可以提供實(shí)現(xiàn)方法了靶衍,前提是要在方法前加一個(gè)default修飾符
16灾炭、heap和stack有什么區(qū)別
heap:堆
stack:棧
存放的內(nèi)容不一樣:
heap是存放對(duì)象的
stack是存放基本類型,引用摊灭、方法調(diào)用的
存取方式不一樣:
heap是自動(dòng)增加大小的咆贬,所以不需要指定大小,但是存取相對(duì)較慢
stack是固定大小帚呼,并且是FILO陷入后廚的順序掏缎,并且存取速度比較快
17、GC是什么煤杀?為什么要有GC
GC是垃圾回收英文的縮寫
所謂的垃圾眷蜈,指的是哪些不再被使用的對(duì)象,JVM的垃圾回收機(jī)制使得開發(fā)人員從無(wú)聊沈自、容易犯錯(cuò)的手動(dòng)釋放內(nèi)存資源的過(guò)程中解放出來(lái)酌儒,開發(fā)人員可以專注進(jìn)行業(yè)務(wù)開發(fā),而資源回收的工作交由更加專業(yè)的垃圾回收機(jī)制自動(dòng)完成
18枯途、short s1=1忌怎,s1=s1+1,有什么錯(cuò)誤
short s1=1 無(wú)錯(cuò)誤酪夷,1最終為short類型
s1=s1+1榴啸,會(huì)出現(xiàn)強(qiáng)制轉(zhuǎn)換錯(cuò)誤
19、Math.round(11.5)等于多少晚岭,Math,round(-11.5)等于多少鸥印?
Math.round取整數(shù),四舍五入坦报,第一步為12库说,第二部為-11
20、String s = new String(“xyz”)創(chuàng)建了幾個(gè)String Object片择?
構(gòu)造方法本身就是一個(gè)字符串對(duì)象
然后new'關(guān)鍵字一定會(huì)創(chuàng)建一個(gè)對(duì)象
所以總共創(chuàng)建了兩個(gè)String對(duì)象
21潜的、接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)接口字管?抽象類是否可繼承實(shí)體類夏块?
1>可以疏咐,比如List就是繼承了Collection
2>可以
3>可以,所有抽象類都繼承了Object
22脐供、List浑塞、Set、Map是否繼承自Collection接口
List和Set繼承了Collection接口
Map和Collection之間沒(méi)有繼承關(guān)系政己,一個(gè)是鍵值對(duì)酌壕,一個(gè)是單值,無(wú)法兼容
23歇由、abstract的method是否可同時(shí)是static卵牍,是否可同時(shí)是synchroized?
都不可以
24沦泌、數(shù)組沒(méi)有l(wèi)ength()方法糊昙?String有沒(méi)有該方法?
數(shù)組獲取長(zhǎng)度的手段是.length屬性
String獲取長(zhǎng)度的手段是length()方法
集合獲取長(zhǎng)度的手段是size()方法
文件獲取長(zhǎng)度的手段是length()方法
25谢谦、Set里的元素是不能重復(fù)的释牺,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?
以hashSet為例回挽,判斷重復(fù)的邏輯是:
1>首先看hashcode是否相同没咙,如果不同,就是不重復(fù)的
2>如果hashcode一樣千劈,再比較equals祭刚,如果不同就是不重復(fù)的,否則就是重復(fù)的
26墙牌、構(gòu)造器Constructor是否可被override涡驮?是否可繼承String類?
子類不能繼承父類構(gòu)造方法喜滨,所以就不存在重寫父類的構(gòu)造方法
27捉捅、switch是否能作用在byte上,是否能作用在long上鸿市,是否能作用在String上?
switch可以作用在byte即碗、short焰情、int、String剥懒、ENUM上内舟,但是不能作用在long上面
28、try{}里有一個(gè)return語(yǔ)句初橘,那么緊跟在這個(gè)try后的finally{}李的code會(huì)不會(huì)被執(zhí)行验游,什么時(shí)候執(zhí)行充岛,在return前還是后?
try里的return和 finally里的return都會(huì)執(zhí)行,但是當(dāng)前方法知會(huì)采納finally中return的值
29耕蝉、兩個(gè)對(duì)象值相同(x.equals(y)==true),但卻可有不同的hash code崔梗,這句話對(duì)不對(duì)?
因?yàn)閔ashcode()方法和equals()方法都可以通過(guò)自定義重寫垒在,是可以做到equals相同蒜魄,但是hashcode不同的
30、垃圾回收的有點(diǎn)和原理场躯。并考慮2種回收機(jī)制
java提供垃圾回收機(jī)制谈为,自行GC,將開發(fā)人員從容易犯錯(cuò)的內(nèi)存管理中解放出來(lái)
原理:當(dāng)某一個(gè)對(duì)象踢关,沒(méi)有任何引用指向它的時(shí)候伞鲫,那么它就滿足垃圾回收的條件,在適當(dāng)?shù)臅r(shí)候签舞,jvm虛擬機(jī)進(jìn)行GC將其回收秕脓,釋放空間,以便后續(xù)再利用
常見回收機(jī)制:
1>定時(shí)回收
每隔30分鐘進(jìn)行一次回收瘪菌,這種機(jī)制的弊端是如果垃圾產(chǎn)生的較快撒会,有可能30分鐘內(nèi)垃圾已經(jīng)把內(nèi)存占用光了,導(dǎo)致性能變慢
2>當(dāng)垃圾占到某個(gè)百分比的時(shí)候师妙,進(jìn)行回收
比如當(dāng)垃圾占用到70%的時(shí)候诵肛,進(jìn)行回收。這種機(jī)制的弊端是默穴,如果垃圾產(chǎn)生的頻率很快怔檩,那么jvm就必須高頻率的進(jìn)行垃圾回收。而在垃圾回收的過(guò)程中蓄诽,jvm會(huì)停頓下來(lái)薛训,只做垃圾回收,而影響業(yè)務(wù)功能的正常運(yùn)行仑氛。
一般來(lái)說(shuō)會(huì)將兩種機(jī)制結(jié)合使用
31乙埃、你所知道的集合類有哪些?主要方法
常見的集合:ArrayList锯岖、LinkedList介袜、HashSet、HashMap等等
常見方法:size()出吹,add()遇伞,remove()等等
32、char型變量中能不能存儲(chǔ)一個(gè)中文漢字捶牢?
char是16位的鸠珠,占用2個(gè)字節(jié)巍耗。
漢字通常使用GBK編碼,也是使用兩個(gè)字節(jié)
所以可以存放漢字
33渐排、解析XML文檔有集中方式
SAX和DOM
SAX是逐行讀取炬太,直到找到目標(biāo)為止
DOM是先全文檔加載,然后讀取
34飞盆、關(guān)鍵字:throws娄琉、throw、try~catch吓歇、finally分表代表什么意義孽水,在try塊中可以拋出異常嗎?
throws:用在方法聲明上面城看,表示該方法有可能拋出某個(gè)異常
throw:拋出一個(gè)指定異常
try~catch:在try中有可能會(huì)拋出某個(gè)異常女气,一旦某個(gè)異常拋出后,就會(huì)在catch中進(jìn)行捕捉测柠,一般是一起用的
finally:表示無(wú)論是否捕捉住異常炼鞠,都會(huì)執(zhí)行
35、java源文件中是否包括多個(gè)類轰胁?有什么限制
可以包括多個(gè)類谒主,但是只能出現(xiàn)一個(gè)public修飾的類,但是可以出現(xiàn)多個(gè)非public修飾的類
36赃阀、java中有集中類型的流霎肯?
所有的流都是基于字節(jié)流,所以最基本的流是:
輸入輸出字節(jié)流:InputStream榛斯、OutputStream
在字節(jié)流的基礎(chǔ)上观游,封裝了字符流:Reader、Writer
進(jìn)一步又封裝了緩存流:BufferedReader驮俗、PrintWriter
以及數(shù)據(jù)流:DataInputStream懂缕、DataOutputStream
對(duì)象流:ObjectInputStream、ObjectOutputStream
等等
37王凑、會(huì)出現(xiàn)內(nèi)存泄露嗎搪柑,具體說(shuō)明
會(huì)的
當(dāng)某些對(duì)象不被使用,但是又有非直接引用指向的時(shí)候索烹,那么就不滿足垃圾回收的條件工碾,從而形成內(nèi)存泄露
demo:
<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">static ArrayList<Object> al = new ArrayList<Object>(); public static void main(String[] args){ for(int i = 0; i < 100; i++){
Object o = new Object();
al.add(o);
}
}</pre>
38、多態(tài)實(shí)現(xiàn)的機(jī)制是什么术荤?
· 父類引用指向子類對(duì)象
· 重寫
39倚喂、靜態(tài)變量和實(shí)例變量的區(qū)別
靜態(tài)變量直接通過(guò)類就可以訪問(wèn)每篷,無(wú)需實(shí)例
示例變量瓣戚,比如通過(guò)類的具體實(shí)例端圈,才可以訪問(wèn)
40、什么是java序列化子库?如何實(shí)現(xiàn)java序列化
序列化就是把一個(gè)java對(duì)象舱权,通過(guò)某種介質(zhì)進(jìn)行傳輸,比如Socket輸入輸出流仑嗅,或者保存在一個(gè)文件里
實(shí)現(xiàn)java序列化的手段是讓該類實(shí)現(xiàn)接口Serializable宴倍,這個(gè)接口是一個(gè)標(biāo)識(shí)性接口,沒(méi)有任何方法仓技,僅僅用于表示該例可以序列化
41鸵贬、是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用?
不行脖捻,因?yàn)榉莝tatic方法需要一個(gè)具體的實(shí)例才可以調(diào)用阔逼,而調(diào)用static方法的時(shí)候,不一定存在一個(gè)實(shí)例
42地沮、List嗜浮、Map、Set三個(gè)接口摩疑,存取元素的時(shí)候危融,各有什么特點(diǎn)?
List是有順序的雷袋,并且可以重復(fù)的
Set是無(wú)序的吉殃,不可以重復(fù)
Map保存數(shù)據(jù)的方式是鍵值對(duì)
43、Anonymous Inner Class(匿名內(nèi)部類)是否可以extends其他類片排,是否可以實(shí)現(xiàn)接口寨腔?
匿名內(nèi)部類本質(zhì)上就是在繼承其他的類,實(shí)現(xiàn)其他的接口
44率寡、內(nèi)部類可以應(yīng)用外部類的成員嗎迫卢?有沒(méi)有什么限制?
可以使用
如果是非靜態(tài)內(nèi)部類冶共,可以使用外部類的所有成員
如果使靜態(tài)內(nèi)部類乾蛤,只能使用外部類的靜態(tài)成員
45、多線程有幾種實(shí)現(xiàn)方式捅僵,都是什么家卖?
三種
· 繼承一個(gè)Thread類
· 實(shí)現(xiàn)Runnable接口
· 匿名內(nèi)部類
46、sleep和wait有什么區(qū)別
這二者之間沒(méi)有任何關(guān)系
sleep是Thread類的方法庙楚,指的是當(dāng)前線程暫停
wait是Object類的方法上荡,指的占用當(dāng)前對(duì)象的線程臨時(shí)釋放對(duì)當(dāng)前對(duì)象的占用,以使得其他線程有機(jī)會(huì)占用當(dāng)前對(duì)象。所以調(diào)用wait方法一定是在synchronized中進(jìn)行的
47酪捡、說(shuō)說(shuō)數(shù)據(jù)連接池的工作機(jī)制是什么
連接原理:因?yàn)閯?chuàng)建鏈接和關(guān)閉連接的行為是非常耗時(shí)的叁征。會(huì)顯著降低軟件的性能表現(xiàn),解決辦法就是先創(chuàng)建N條數(shù)據(jù)庫(kù)連接Connection逛薇,循環(huán)使用捺疼,但是不進(jìn)行關(guān)閉,這樣再執(zhí)行SQL語(yǔ)句永罚,就不需要額外創(chuàng)建鏈接了啤呼,直接使用。現(xiàn)成的連接就可以呢袱,從而節(jié)約了創(chuàng)建鏈接和關(guān)閉連接的時(shí)間開銷
48官扣、簡(jiǎn)述synchronized和java,util,concurrent.locks.Lock的異同
·Lock是一個(gè)接口,而synchronized是java中的關(guān)鍵字羞福,synchronized是內(nèi)置的語(yǔ)言實(shí)現(xiàn)醇锚,Lock是代碼層面的實(shí)現(xiàn)
·Lock可以選擇性的獲取鎖,如果一段時(shí)間獲取不到坯临,可以放棄焊唬。synchronized不行,會(huì)一直獲取下去看靠,借助Lock這個(gè)特性赶促,就能夠規(guī)避死鎖,synchronized必須通過(guò)謹(jǐn)慎和良好的設(shè)計(jì)挟炬,才能減少死鎖的發(fā)生
·synchronized在發(fā)生異常和同步快結(jié)束的時(shí)候鸥滨,會(huì)自動(dòng)釋放鎖。而Lock必須手動(dòng)釋放谤祖,如果忘記釋放鎖婿滓,一樣會(huì)造成死鎖
49、Class.forName的作用粥喜,為什么要這么用
Class.forName常見場(chǎng)景是在數(shù)據(jù)庫(kù)驅(qū)動(dòng)初始化的時(shí)候調(diào)用
Class.forName本身的意義是加載類到JVM中凸主,一旦一個(gè)類被加載到JVM中,它的靜態(tài)屬性就會(huì)被初始化额湘,在初始化的過(guò)程中就會(huì)執(zhí)行相關(guān)代碼卿吐,從而達(dá)到“加載驅(qū)動(dòng)的效果”
50、當(dāng)一個(gè)線程進(jìn)入到一個(gè)對(duì)象的一個(gè)synchronized方法后锋华,其他線程是否可進(jìn)入此對(duì)象的其他方法
視情況而定嗡官,如果該對(duì)象的其他方法也是有synchronized修飾的,那么其他線程就會(huì)被擋在外面毯焕,否則其他線程就可以進(jìn)入其他方法
51衍腥、舉例常見的runtime exception
NullpointException 空指針
ArithMeiticException 算數(shù)
ClassCastException 類型轉(zhuǎn)換
ConcurrentModificationException 同步修改
IndexOutOfBoundsException 數(shù)組越界
NegativeArraySizeException 為數(shù)組分配的空間是負(fù)數(shù)
52、進(jìn)程、線程和任務(wù)之間的區(qū)別是什么婆咸?
進(jìn)程:是一個(gè)OS的抽象概念坊罢,是用來(lái)執(zhí)行程序的環(huán)境,程序通常運(yùn)行在用戶模式擅耽,通過(guò)系統(tǒng)調(diào)用或自陷來(lái)進(jìn)入內(nèi)核模式。
線程:可被調(diào)度的運(yùn)行在CPU上的可執(zhí)行上下文物遇,內(nèi)核擁有多個(gè)線程乖仇,一個(gè)進(jìn)程有一個(gè)或多個(gè)線程。
任務(wù):一個(gè)Linux的可運(yùn)行實(shí)體询兴,可以指一個(gè)進(jìn)程(含有單個(gè)線程)乃沙,或一個(gè)多線程的進(jìn)程里的一個(gè)線程,或內(nèi)核線程诗舰。
53警儒、什么是上下文切換?
內(nèi)核程序切換CPU讓其在不同的地址空間上做操作(上下文)眶根。
有時(shí)也稱做進(jìn)程切換或任務(wù)切換蜀铲,是指CPU 從一個(gè)進(jìn)程或線程切換到另一個(gè)進(jìn)程或線程。(百度百科)
54属百、paging和swapping之間的區(qū)別是什么记劝?
內(nèi)存和 SWAP 的這種交換過(guò)程稱為頁(yè)面交換(Paging),值得注意的是 paging 和 swapping 是兩個(gè)完全不同的概念,國(guó)內(nèi)很多參考書把這兩個(gè)概念混為一談,swapping 也翻譯成交換,在操作系統(tǒng)里是指把某程序完全交換到硬盤以騰出內(nèi)存給新程序使用,和 paging 只交換程序的部分(頁(yè)面)是兩個(gè)不同的概念。純粹的 swapping 在現(xiàn)代操作系統(tǒng)中已經(jīng)很難看到了,因?yàn)榘颜麄€(gè)程序交換到硬盤的辦法既耗時(shí)又費(fèi)力而且沒(méi)必要,現(xiàn)代操作系統(tǒng)基本都是 paging 或者 paging/swapping 混合,swapping 最初是在 Unix system V 上實(shí)現(xiàn)的族扰。(阿里云PTS)
55厌丑、說(shuō)說(shuō)進(jìn)程和線程
進(jìn)程是程序分配靜態(tài)資源的基本單位
線程是程序動(dòng)態(tài)執(zhí)行的基本單位
56、緩存行大小標(biāo)準(zhǔn)以及一致性
64個(gè)字節(jié)
沒(méi)有一致性標(biāo)準(zhǔn)
57渔呵、抽象類和接口的區(qū)別
相同點(diǎn):
·都不能被實(shí)例化
·接口的實(shí)現(xiàn)類或者抽象類的子類都只有實(shí)現(xiàn)了接口或抽象類中的方法后才能實(shí)例化
不同點(diǎn):
·接口只有定義怒竿,不能有方法的實(shí)現(xiàn),1.8之后可以定義default扩氢,而抽象類可以有定義與實(shí)現(xiàn)耕驰,方法可在抽象類中實(shí)現(xiàn)
·實(shí)現(xiàn)接口的關(guān)鍵字未implements,繼承抽象類的關(guān)鍵字為extends录豺。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口耍属,但一個(gè)類只能繼承一個(gè)抽象類。所以使用接口可以間接實(shí)現(xiàn)多重繼承
·接口強(qiáng)調(diào)特定功能的實(shí)現(xiàn)巩检,而抽象類強(qiáng)調(diào)所述關(guān)系
·接口成員默認(rèn)為public static final厚骗,必須賦初始值,不能被修改兢哭;其他所有的成員方法都是public领舰、abstract的。抽象類中成員變量默認(rèn)為default,可以在子類中被重新定義冲秽,也可以被重新賦值舍咖;抽象方法被abstrace修飾,不能被private锉桑、static排霉、synchronized和native等修飾,必須以分號(hào)結(jié)尾民轴,不帶花括號(hào)