11、抽象類(lèi)必須要有抽象方法嗎?
不需要,抽象類(lèi)不一定非要有抽象方法。
示例代碼:
abstract class Cat { public static void sayHi() { System.out.println("hi~"); } }
上面代碼,抽象類(lèi)并沒(méi)有抽象方法但完全可以正常運(yùn)行。
(學(xué)習(xí)視頻推薦:java視頻教程)
12、普通類(lèi)和抽象類(lèi)有哪些區(qū)別?
普通類(lèi)不能包含抽象方法,抽象類(lèi)可以包含抽象方法。
抽象類(lèi)不能直接實(shí)例化,普通類(lèi)可以直接實(shí)例化。
13、抽象類(lèi)能使用 final 修飾嗎?
不能,定義抽象類(lèi)就是讓其他類(lèi)繼承的,如果定義為 final 該類(lèi)就不能被繼承,這樣彼此就會(huì)產(chǎn)生矛盾,所以 final 不能修飾抽象類(lèi),如下圖所示,編輯器也會(huì)提示錯(cuò)誤信息:
14、接口和抽象類(lèi)有什么區(qū)別?
實(shí)現(xiàn):抽象類(lèi)的子類(lèi)使用 extends 來(lái)繼承;接口必須使用 implements 來(lái)實(shí)現(xiàn)接口。
構(gòu)造函數(shù):抽象類(lèi)可以有構(gòu)造函數(shù);接口不能有。
main 方法:抽象類(lèi)可以有 main 方法,并且我們能運(yùn)行它;接口不能有 main 方法。
實(shí)現(xiàn)數(shù)量:類(lèi)可以實(shí)現(xiàn)很多個(gè)接口;但是只能繼承一個(gè)抽象類(lèi)。
訪問(wèn)修飾符:接口中的方法默認(rèn)使用 public 修飾;抽象類(lèi)中的方法可以是任意訪問(wèn)修飾符。
15、java 中 IO 流分為幾種?
按功能來(lái)分:輸入流(input)、輸出流(output)。
按類(lèi)型來(lái)分:字節(jié)流和字符流。
字節(jié)流和字符流的區(qū)別是:字節(jié)流按 8 位傳輸以字節(jié)為單位輸入輸出數(shù)據(jù),字符流按 16 位傳輸以字符為單位輸入輸出數(shù)據(jù)。
16、BIO、NIO、AIO 有什么區(qū)別?
BIO:Block IO 同步阻塞式 IO,就是我們平常使用的傳統(tǒng) IO,它的特點(diǎn)是模式簡(jiǎn)單使用方便,并發(fā)處理能力低。
NIO:New IO 同步非阻塞 IO,是傳統(tǒng) IO 的升級(jí),客戶端和服務(wù)器端通過(guò) Channel(通道)通訊,實(shí)現(xiàn)了多路復(fù)用。
AIO:Asynchronous IO 是 NIO 的升級(jí),也叫 NIO2,實(shí)現(xiàn)了異步非堵塞 IO ,異步 IO 的操作基于事件和回調(diào)機(jī)制。
17、Files的常用方法都有哪些?
Files.exists():檢測(cè)文件路徑是否存在。
Files.createFile():創(chuàng)建文件。
Files.createDirectory():創(chuàng)建文件夾。
Files.delete():刪除一個(gè)文件或目錄。
Files.copy():復(fù)制文件。
Files.move():移動(dòng)文件。
Files.size():查看文件個(gè)數(shù)。
Files.read():讀取文件。
Files.write():寫(xiě)入文件。
推薦教程:java常見(jiàn)面試題