溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

【Java面試】Java基礎(chǔ)知識(shí)面試題—2020最新版!

發(fā)布時(shí)間:2020-08-10 12:57:04 來源:ITPUB博客 閱讀:259 作者:六星_研鑫 欄目:編程語言
不積跬步無以至千里,這里會(huì)不斷收集和更新Java基礎(chǔ)相關(guān)的面試題,目前已收集100題。

歡迎加入我們的學(xué)習(xí)基地吧,免費(fèi)獲取最新BATJ面試題資料(傳送門: 925050116)!

1.什么是B/S架構(gòu)?什么是C/S架構(gòu)

B/S(Browser/Server),瀏覽器/服務(wù)器程序

C/S(Client/Server),客戶端/服務(wù)端,桌面應(yīng)用程序

2.你所知道網(wǎng)絡(luò)協(xié)議有那些?

HTTP:超文本傳輸協(xié)議

FTP:文件傳輸協(xié)議

SMPT:簡單郵件協(xié)議

TELNET:遠(yuǎn)程終端協(xié)議

POP3:郵件讀取協(xié)議

3.Java都有那些開發(fā)平臺(tái)?

JAVA SE:主要用在客戶端開發(fā)

JAVA EE:主要用在web應(yīng)用程序開發(fā)

JAVA ME:主要用在嵌入式應(yīng)用程序開發(fā)

4.什么是JVM?java虛擬機(jī)包括什么?

JVM:java虛擬機(jī),運(yùn)用硬件或軟件手段實(shí)現(xiàn)的虛擬的計(jì)算機(jī),Java虛擬機(jī)包括:寄存器,堆棧,處理器

5.Java是否需要開發(fā)人員回收內(nèi)存垃圾嗎?

大多情況下是不需要的。Java提供了一個(gè)系統(tǒng)級的線程來跟蹤內(nèi)存分配,不再使用的內(nèi)存區(qū)將會(huì)自動(dòng)回收

6.什么是JDK?什么是JRE?

JDK:java development kit:java開發(fā)工具包,是開發(fā)人員所需要安裝的環(huán)境

JRE:java runtime environment:java運(yùn)行環(huán)境,java程序運(yùn)行所需要安裝的環(huán)境

7.什么是數(shù)據(jù)結(jié)構(gòu)?

計(jì)算機(jī)保存,組織數(shù)據(jù)的方式

8.Java的數(shù)據(jù)結(jié)構(gòu)有那些?

線性表(ArrayList)

鏈表(LinkedList)

棧(Stack)

隊(duì)列(Queue)

圖(Map)

樹(Tree)

9.什么是OOP?

面向?qū)ο缶幊?/span>

10.什么是面向?qū)ο螅?/span>

世間萬物都可以看成一個(gè)對象。每個(gè)物體包括動(dòng)態(tài)的行為和靜態(tài)的屬性,這些就構(gòu)成了一個(gè)對象。

11.類與對象的關(guān)系?

類是對象的抽象,對象是類的具體,類是對象的模板,對象是類的實(shí)例

12.Java中有幾種數(shù)據(jù)類型

整形:byte,short,int,long

浮點(diǎn)型:float,double

字符型:char

布爾型:boolean

13.什么是隱式轉(zhuǎn)換,什么是顯式轉(zhuǎn)換

顯示轉(zhuǎn)換就是類型強(qiáng)轉(zhuǎn),把一個(gè)大類型的數(shù)據(jù)強(qiáng)制賦值給小類型的數(shù)據(jù);隱式轉(zhuǎn)換就是大范圍的變量能夠接受小范圍的數(shù)據(jù);

隱式轉(zhuǎn)換和顯式轉(zhuǎn)換其實(shí)就是自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。

14.Char類型能不能轉(zhuǎn)成int類型?能不能轉(zhuǎn)化成string類型,能不能轉(zhuǎn)成double類型

Char在java中也是比較特殊的類型,它的int值從1開始,一共有2的16次方個(gè)數(shù)據(jù);Char<int<long<float<double;Char

類型可以隱式轉(zhuǎn)成int,double類型,但是不能隱式轉(zhuǎn)換成string;如果char類型轉(zhuǎn)成byte,short類型的時(shí)候,需要強(qiáng)轉(zhuǎn)。

15.什么是拆裝箱?

拆箱:把包裝類型轉(zhuǎn)成基本數(shù)據(jù)類型

裝箱:把基本數(shù)據(jù)類型轉(zhuǎn)成包裝類型

16.Java中的包裝類都是那些?

byte:Byte

short:Short

int:Integer

long:Long

float:Float

double:Double

char:Character

boolean:Boolean

17.一個(gè)java類中包含那些內(nèi)容?

屬性、方法、內(nèi)部類、構(gòu)造方法、代碼塊。

18.例如: if(a+1.0=4.0),這樣做好嗎?

不好,因?yàn)橛?jì)算機(jī)在浮點(diǎn)型數(shù)據(jù)運(yùn)算的時(shí)候,會(huì)有誤差,盡量在布爾表達(dá)式中不使用浮點(diǎn)型數(shù)據(jù)(if,while,switch中判斷條件

不使用浮點(diǎn)型)

19.那針對浮點(diǎn)型數(shù)據(jù)運(yùn)算出現(xiàn)的誤差的問題,你怎么解決?

使用Bigdecimal類進(jìn)行浮點(diǎn)型數(shù)據(jù)的運(yùn)算

20.++i與i++的區(qū)別

++i:先賦值,后計(jì)算

i++:先計(jì)算,后賦值

21.程序的結(jié)構(gòu)有那些?

順序結(jié)構(gòu)

選擇結(jié)構(gòu)

循環(huán)結(jié)構(gòu)

22.數(shù)組實(shí)例化有幾種方式?

靜態(tài)實(shí)例化:創(chuàng)建數(shù)組的時(shí)候已經(jīng)指定數(shù)組中的元素,

int[] a=new int[]{1,3,3}

動(dòng)態(tài)實(shí)例化:實(shí)例化數(shù)組的時(shí)候,只指定了數(shù)組程度,數(shù)組中所有元素都是數(shù)組類型的默認(rèn)值

23.Java中各種數(shù)據(jù)默認(rèn)值

Byte,short,int,long默認(rèn)是都是0

Boolean默認(rèn)值是false

Char類型的默認(rèn)值是’’

Float與double類型的默認(rèn)是0.0

對象類型的默認(rèn)值是null

24.Java常用包有那些?

Java.lang

Java.io

Java.sql

Java.util

Java.awt

Java.net

Java.math

25.Java最頂級的父類是哪個(gè)?

Object

26.Object類常用方法有那些?

Equals

Hashcode

toString

wait

notify

clone

getClass

27.java中有沒有指針?

有指針,但是隱藏了,開發(fā)人員無法直接操作指針,由jvm來操作指針

28.java中是值傳遞引用傳遞?

理論上說,java都是引用傳遞,對于基本數(shù)據(jù)類型,傳遞是值的副本,而不是值本身。對于對象類型,傳遞是對象的引用,

當(dāng)在一個(gè)方法操作操作參數(shù)的時(shí)候,其實(shí)操作的是引用所指向的對象。

29.假設(shè)把實(shí)例化的數(shù)組的變量當(dāng)成方法參數(shù),當(dāng)方法執(zhí)行的時(shí)候改變了數(shù)組內(nèi)的元素,那么在方法外,數(shù)組元素有發(fā)生

改變嗎?

改變了,因?yàn)閭鬟f是對象的引用,操作的是引用所指向的對象

30.實(shí)例化數(shù)組后,能不能改變數(shù)組長度呢?

不能,數(shù)組一旦實(shí)例化,它的長度就是固定的

31.假設(shè)數(shù)組內(nèi)有5個(gè)元素,如果對數(shù)組進(jìn)行反序,該如何做?

創(chuàng)建一個(gè)新數(shù)組,從后到前循環(huán)遍歷每個(gè)元素,將取出的元素依次順序放入新數(shù)組中

32.形參與實(shí)參

形參:全稱為“形式參數(shù)”,是在定義方法名和方法體的時(shí)候使用的參數(shù),用于接收調(diào)用該方法時(shí)傳入的實(shí)際值;實(shí)參:

全稱為“實(shí)際參數(shù)”,是在調(diào)用方法時(shí)傳遞給該方法的實(shí)際值。

33.構(gòu)造方法能不能顯式調(diào)用?

不能構(gòu)造方法當(dāng)成普通方法調(diào)用,只有在創(chuàng)建對象的時(shí)候它才會(huì)被系統(tǒng)調(diào)用

34.構(gòu)造方法能不能重寫?能不能重載?

可以重寫,也可以重載

35.什么是方法重載?

方法的重載就是在同一個(gè)類中允許同時(shí)存在一個(gè)以上的同名方法,只要它們的參數(shù)個(gè)數(shù)或者類型不同即可。在這種情況下,

該方法就叫被重載了,這個(gè)過程稱為方法的重載(override)

36.內(nèi)部類與靜態(tài)內(nèi)部類的區(qū)別?

靜態(tài)內(nèi)部類相對與外部類是獨(dú)立存在的,在靜態(tài)內(nèi)部類中無法直接訪問外部類中變量、方法。如果要訪問的話,必須要new

一個(gè)外部類的對象,使用new出來的對象來訪問。但是可以直接訪問靜態(tài)的變量、調(diào)用靜態(tài)的方法;

普通內(nèi)部類作為外部類一個(gè)成員而存在,在普通內(nèi)部類中可以直接訪問外部類屬性,調(diào)用外部類的方法。

如果外部類要訪問內(nèi)部類的屬性或者調(diào)用內(nèi)部類的方法,必須要?jiǎng)?chuàng)建一個(gè)內(nèi)部類的對象,使用該對象訪問屬性或者調(diào)用方法。

如果其他的類要訪問普通內(nèi)部類的屬性或者調(diào)用普通內(nèi)部類的方法,必須要在外部類中創(chuàng)建一個(gè)普通內(nèi)部類的對象作為一個(gè)

屬性,外同類可以通過該屬性調(diào)用普通內(nèi)部類的方法或者訪問普通內(nèi)部類的屬性

如果其他的類要訪問靜態(tài)內(nèi)部類的屬性或者調(diào)用靜態(tài)內(nèi)部類的方法,直接創(chuàng)建一個(gè)靜態(tài)內(nèi)部類對象即可。

37.Static關(guān)鍵字有什么作用?

Static可以修飾內(nèi)部類、方法、變量、代碼塊

Static修飾的類是靜態(tài)內(nèi)部類

Static修飾的方法是靜態(tài)方法,表示該方法屬于當(dāng)前類的,而不屬于某個(gè)對象的,靜態(tài)方法也不能被重寫,可以直接使用類

名來調(diào)用。在static方法中不能使用this或者super關(guān)鍵字。

Static修飾變量是靜態(tài)變量或者叫類變量,靜態(tài)變量被所有實(shí)例所共享,不會(huì)依賴于對象。靜態(tài)變量在內(nèi)存中只有一份拷貝,

在JVM加載類的時(shí)候,只為靜態(tài)分配一次內(nèi)存。

Static修飾的代碼塊叫靜態(tài)代碼塊,通常用來做程序優(yōu)化的。靜態(tài)代碼塊中的代碼在整個(gè)類加載的時(shí)候只會(huì)執(zhí)行一次。靜態(tài)

代碼塊可以有多個(gè),如果有多個(gè),按照先后順序依次執(zhí)行。

38.Final在java中的作用

Final可以修飾類,修飾方法,修飾變量。

修飾的類叫最終類。該類不能被繼承。

修飾的方法不能被重寫。

修飾的變量叫常量,常量必須初始化,一旦初始化后,常量的值不能發(fā)生改變。

39.Java中操作字符串使用哪個(gè)類?

String,StringBuffer,StringBuilder

40.StringBuffer,Stringbuilder有什么區(qū)別?

StringBuffer與StringBuilder都繼承了AbstractStringBulder類,而AbtractStringBuilder又實(shí)現(xiàn)了CharSequence接口,

兩個(gè)類都是用來進(jìn)行字符串操作的。

在做字符串拼接修改刪除替換時(shí),效率比string更高。

StringBuffer是線程安全的,Stringbuilder是非線程安全的。所以Stringbuilder比stringbuffer效率更高,StringBuffer的

方法大多都加了synchronized關(guān)鍵字

41.String str=”aaa”,與String str=new String(“aaa”)一樣嗎?

不一樣的。因?yàn)閮?nèi)存分配的方式不一樣。

第一種,創(chuàng)建的”aaa”是常量,jvm都將其分配在常量池中。

第二種創(chuàng)建的是一個(gè)對象,jvm將其值分配在堆內(nèi)存中。

42.String str=”aa”,String s=”bb”,String aa=aa+s;一種創(chuàng)建了幾個(gè)對象?

一共有兩個(gè)引用,三個(gè)對象。因?yàn)椤盿a”與”bb”都是常量,常量的值不能改變,當(dāng)執(zhí)行字符串拼接時(shí)候,會(huì)創(chuàng)建一個(gè)新的

常量是” aabbb”,有將其存到常量池中。

43.將下java中的math類有那些常用方法?

Pow():冪運(yùn)算

Sqrt():平方根

Round():四舍五入

Abs():求絕對值

Random():生成一個(gè)0-1的隨機(jī)數(shù),包括0不包括1

44.String類的常用方法有那些?

charAt:返回指定索引處的字符

indexOf():返回指定字符的索引

replace():字符串替換

trim():去除字符串兩端空白

split():分割字符串,返回一個(gè)分割后的字符串?dāng)?shù)組

getBytes():返回字符串的byte類型數(shù)組

length():返回字符串長度

toLowerCase():將字符串轉(zhuǎn)成小寫字母

toUpperCase():將字符串轉(zhuǎn)成大寫字符

substring():截取字符串

format():格式化字符串

equals():字符串比較

45.判斷兩個(gè)對象是否相同,能使用equlas比較嗎?

不能。Equlas大多用來做字符串比較,要判斷基本數(shù)據(jù)類型或者對象類型,需要使用==

46.==與equlas有什么區(qū)別?

==可以判斷基本數(shù)據(jù)類型值是否相等,也可以判斷兩個(gè)對象指向的內(nèi)存地址是否相同,也就是說判斷兩個(gè)對象是否是同一個(gè)

對象,Equlas通常用來做字符串比較。

47.如何將字符串反轉(zhuǎn)?

Stringbuilder或者stringbuffer的reverse方法

48.面向?qū)ο蟮恼Z言有那些特征?

封裝、繼承、多態(tài)

49.Java中的繼承是單繼承還是多繼承

Java中既有單繼承,又有多繼承。對于java類來說只能有一個(gè)父類,對于接口來說可以同時(shí)繼承多個(gè)接口

50.什么是重寫?什么是重載?

重載和重寫都是java多態(tài)的表現(xiàn)。

重載叫override,在同一個(gè)類中多態(tài)的表現(xiàn)。當(dāng)一個(gè)類中出現(xiàn)了多個(gè)相同名稱的方法,但參數(shù)個(gè)數(shù)和參數(shù)類型不同,方法

重載與返回值無關(guān)

重寫叫overwrite,是字符類中多態(tài)的表現(xiàn)。當(dāng)子類出現(xiàn)與父類相同的方法,那么這就是方法重寫。方法重寫時(shí),子類的返回

值必須與父類的一致。如果父類方法拋出一個(gè)異常,子類重寫的方法拋出的異常類型不能小于父類拋出的異常類型。

51.構(gòu)造方法能不能重載?能不能重寫?

可以重載,必須重寫

52.如果父類只有有參構(gòu)造方法,那么子類必須要重寫父類的構(gòu)造方法嗎?

必須重寫

53.創(chuàng)建一個(gè)子類對象的時(shí)候,那么父類的構(gòu)造方法會(huì)執(zhí)行嗎?

會(huì)執(zhí)行。當(dāng)創(chuàng)建一個(gè)子類對象,調(diào)用子類構(gòu)造方法的時(shí)候,子類構(gòu)造方法會(huì)默認(rèn)調(diào)用父類的構(gòu)造方法。

54.什么是父類引用指向子類對象?

是java多態(tài)一種特殊的表現(xiàn)形式。創(chuàng)建父類引用,讓該引用指向一個(gè)子類的對象

55.當(dāng)父類引用指向子類對象的時(shí)候,子類重寫了父類方法和屬性,那么當(dāng)訪問屬性的時(shí)候,訪問是誰的屬性?調(diào)用方法時(shí),

調(diào)用的是誰的方法?

子類重寫了父類方法和屬性,訪問的是父類的屬性,調(diào)用的是子類的方法

56.Super與this表示什么?

Super表示當(dāng)前類的父類對象

This表示當(dāng)前類的對象

57.抽象的關(guān)鍵字是什么?

Abstract

58.抽象類必須要有抽象方法嗎

不是必須。抽象類可以沒有抽象方法。

59.如果一個(gè)類中有抽象方法,那么這個(gè)一定是抽象類?

包含抽象方法的類一定是抽象類

60.抽象類可以使用final修飾嗎?

不可以。定義抽象類就是讓其他繼承的,而final修飾類表示該類不能被繼承,與抽象類的理念違背了

61.普通類與抽象類有什么區(qū)別?

普通類不能包含抽象方法,抽象類可以包含抽象方法

抽象類不能直接實(shí)例化,普通類可以直接實(shí)例化

62.什么是接口?

接口就是某個(gè)事物對外提供的一些功能的聲明,是一種特殊的java類

63.JAVA為什么需要接口?

接口彌補(bǔ)了java單繼承的缺點(diǎn)

64.接口有什么特點(diǎn)?

接口中聲明全是public static final修飾的常量

接口中所有方法都是抽象方法

接口是沒有構(gòu)造方法的

接口也不能直接實(shí)例化

接口可以多繼承

65.接口與抽象類有什么區(qū)別?

抽象類有構(gòu)造方法,接口沒有構(gòu)造方法

抽象類只能單繼承,接口可以多繼承

抽象類可以有普通方法,接口中的所有方法都是抽象方法

接口的屬性都是public static final修飾的,而抽象的不是

66.Java中異常分為哪兩種?

編譯時(shí)異常

運(yùn)行時(shí)異常

67.說幾個(gè)常見的編譯時(shí)異常類?

NullPointerException:空指針異常

ArrayIndexOutOfBoundsException:數(shù)組下標(biāo)越界

NumberFormatException:數(shù)字轉(zhuǎn)換異常

IllegalArgumentException:參數(shù)不匹配異常

InstantiationException:對象初始化異常

ArithmeticException:算術(shù)異常

68.異常的處理機(jī)制有幾種?

異常捕捉:try…catch…finally,異常拋出:throws。

69.如何自定義一個(gè)異常

繼承一個(gè)異常類,通常是RumtimeException或者Exception

70.在異常捕捉時(shí),如果發(fā)生異常,那么try.catch.finally塊外的return語句會(huì)執(zhí)行嗎?

會(huì)執(zhí)行,如果有finally,在finally之后被執(zhí)行,如果沒有finally,在catch之后被執(zhí)行

71.Try.catch.finally是必須要存在的嗎?

Try塊必須存在,catch和finally可以不存在,但不能同時(shí)不存在

72.Thow與thorws區(qū)別

Throw寫在代碼塊內(nèi),throw后面跟的是一個(gè)具體的異常實(shí)例

Throw寫在方法前面后面,throws后面跟的是異常類,異常類可以出現(xiàn)多個(gè)

73.Error與Exception區(qū)別?

Error和Exception都是java錯(cuò)誤處理機(jī)制的一部分,都繼承了Throwable類。

Exception表示的異常,異??梢酝ㄟ^程序來捕捉,或者優(yōu)化程序來避免。

Error表示的是系統(tǒng)錯(cuò)誤,不能通過程序來進(jìn)行錯(cuò)誤處理。

74.使用Log4j對程序有影響嗎?

有,log4j是用來日志記錄的,記錄一些關(guān)鍵敏感的信息,通常會(huì)將日志記錄到本地文件或者數(shù)據(jù)庫中。記錄在本地文件中,

會(huì)有頻繁的io操作,會(huì)耗費(fèi)一些系統(tǒng)資源。記錄在數(shù)據(jù)庫中,會(huì)頻繁地操作數(shù)據(jù)庫表,對系統(tǒng)性能也有一定的影響。但是為

了程序安全以及數(shù)據(jù)的恢復(fù)或者bug的跟蹤,這點(diǎn)資源消耗是可以承受的。

75.Log4j日志有幾個(gè)級別?

由低到高:debug、info、wran、error

76.除了使用new創(chuàng)建對象之外,還可以用什么方法創(chuàng)建對象?

Java反射

77.Java反射創(chuàng)建對象效率高還是通過new創(chuàng)建對象的效率高?

通過new創(chuàng)建對象的效率比較高。通過反射時(shí),先找查找類資源,使用類加載器創(chuàng)建,過程比較繁瑣,所以效率較低

78.Java中集合框架的有幾個(gè)?

Coillection、Map。

79.Collection接口下有那些集合框架?

List:線性表、Set:無序集合。

80.List接口有什么特點(diǎn)?

順序存儲(chǔ)、可以有重復(fù)值。

81.Set接口有什么特點(diǎn)

無須存儲(chǔ)、不能有重復(fù)值。

82.ArrayList與LinkedList有什么區(qū)別?

ArrayList與LinkedList都實(shí)現(xiàn)了List接口。

ArrayList是線性表,底層是使用數(shù)組實(shí)現(xiàn)的,它在尾端插入和訪問數(shù)據(jù)時(shí)效率較高, 

Linked是雙向鏈表,他在中間插入或者頭部插入時(shí)效率較高,在訪問數(shù)據(jù)時(shí)效率較低

83.Array與ArrayList有什么不一樣?

Array與ArrayList都是用來存儲(chǔ)數(shù)據(jù)的集合。ArrayList底層是使用數(shù)組實(shí)現(xiàn)的,但是arrayList對數(shù)組進(jìn)行了封裝和功能擴(kuò)展,

擁有許多原生數(shù)組沒有的一些功能。我們可以理解成ArrayList是Array的一個(gè)升級版。

84.Map有什么特點(diǎn)

以鍵值對存儲(chǔ)數(shù)據(jù)

元素存儲(chǔ)循序是無須的

不允許出現(xiàn)重復(fù)鍵

85.JDBC操作的步驟

加載數(shù)據(jù)庫驅(qū)動(dòng)類

打開數(shù)據(jù)庫連接

執(zhí)行sql語句

處理返回結(jié)果

關(guān)閉資源

86.在使用jdbc的時(shí)候,如何防止出現(xiàn)sql注入的問題。

使用PreparedStatement類,而不是使用Statement類

87.怎么在JDBC內(nèi)調(diào)用一個(gè)存儲(chǔ)過程

使用CallableStatement

88.是否了解連接池,使用連接池有什么好處?

數(shù)據(jù)庫連接是非常消耗資源的,影響到程序的性能指標(biāo)。連接池是用來分配、管理、釋放數(shù)據(jù)庫連接的,可以使應(yīng)用程序

重復(fù)使用同一個(gè)數(shù)據(jù)庫連接,而不是每次都創(chuàng)建一個(gè)新的數(shù)據(jù)庫連接。通過釋放空閑時(shí)間較長的數(shù)據(jù)庫連接避免數(shù)據(jù)庫因?yàn)?/span>

創(chuàng)建太多的連接而造成的連接遺漏問題,提高了程序性能。

89.你所了解的數(shù)據(jù)源技術(shù)有那些?使用數(shù)據(jù)源有什么好處?

Dbcp,c3p0等,用的最多還是c3p0,因?yàn)閏3p0比dbcp更加穩(wěn)定,安全;通過配置文件的形式來維護(hù)數(shù)據(jù)庫信息,而不是通

過硬編碼。當(dāng)連接的數(shù)據(jù)庫信息發(fā)生改變時(shí),不需要再更改程序代碼就實(shí)現(xiàn)了數(shù)據(jù)庫信息的更新。

90.Java的io流分為哪兩種?

按功能來分

輸入流(input),輸出流(output)

按類型來分

字節(jié)流,字符流

91.常用io類有那些?

File

FileInputSteam,F(xiàn)ileOutputStream

BufferInputStream,BufferedOutputSream

PrintWrite

FileReader,F(xiàn)ileWriter

BufferReader,BufferedWriter

ObjectInputStream,ObjectOutputSream

92.字節(jié)流與字符流的區(qū)別

以字節(jié)為單位輸入輸出數(shù)據(jù),字節(jié)流按照8位傳輸

以字符為單位輸入輸出數(shù)據(jù),字符流按照16位傳輸

93.final、finalize()、finally

性質(zhì)不同

final為關(guān)鍵字;

finalize()為方法;

finally為區(qū)塊標(biāo)志,用于try語句中;

作用

final為用于標(biāo)識(shí)常量的關(guān)鍵字,final標(biāo)識(shí)的關(guān)鍵字存儲(chǔ)在常量池中(在這里final常量的具體用法將在下面進(jìn)行介紹);

finalize()方法在Object中進(jìn)行了定義,用于在對象“消失”時(shí),由JVM進(jìn)行調(diào)用用于對對象進(jìn)行垃圾回收,類似于C++中

的析構(gòu)函數(shù);用戶自定義時(shí),用于釋放對象占用的資源(比如進(jìn)行I/0操作);

finally{}用于標(biāo)識(shí)代碼塊,與try{}進(jìn)行配合,不論try中的代碼執(zhí)行完或沒有執(zhí)行完(這里指有異常),該代碼塊之中的程序

必定會(huì)進(jìn)行;

94.抽象類和接口的區(qū)別?

抽象類:

抽象方法,只有行為的概念,沒有具體的行為實(shí)現(xiàn)。使用abstract關(guān)鍵字修飾,沒有方法體。子類必須重寫這些抽象方法。

包含抽象方法的類,一定是抽象類。

抽象類只能被繼承,一個(gè)類只能繼承一個(gè)抽象類。

接口:

全部的方法都是抽象方法,屬型都是常量

不能實(shí)例化,可以定義變量。

接口變量可以引用具體實(shí)現(xiàn)類的實(shí)例

接口只能被實(shí)現(xiàn),一個(gè)具體類實(shí)現(xiàn)接口,必須實(shí)現(xiàn)全部的抽象方法

接口之間可以多實(shí)現(xiàn)

一個(gè)具體類可以實(shí)現(xiàn)多個(gè)接口,實(shí)現(xiàn)多繼承現(xiàn)象

95.線程同步的方法

wait():讓線程等待。將線程存儲(chǔ)到一個(gè)線程池中。

notify():喚醒被等待的線程。通常都喚醒線程池中的第一個(gè)。讓被喚醒的線程處于臨時(shí)阻塞狀態(tài)。

notifyAll(): 喚醒所有的等待線程。將線程池中的所有線程都喚醒。

96.線程與進(jìn)程的區(qū)別

進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,線程是CPU調(diào)度和分派的基本單位

進(jìn)程和線程的關(guān)系:

一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。

資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源。

線程在執(zhí)行過程中,需要協(xié)作同步。不同進(jìn)程的線程間要利用消息通信的辦法實(shí)現(xiàn)同步。

線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體。

線程與進(jìn)程的區(qū)別:

調(diào)度:線程作為調(diào)度和分配的基本單位,進(jìn)程作為擁有資源的基本單位。

并發(fā)性:不僅進(jìn)程之間可以并發(fā)執(zhí)行,同一個(gè)進(jìn)程的多個(gè)線程之間也可以并發(fā)執(zhí)行。

擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進(jìn)程的資源。

系統(tǒng)開銷:在創(chuàng)建或撤銷進(jìn)程的時(shí)候,由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的明顯大于創(chuàng)建或撤銷線程時(shí)的開銷。

但進(jìn)程有獨(dú)立的地址空間,進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對其他的進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同的執(zhí)行路徑 。

線程有自己的堆棧和局部變量,但線程之間沒有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比

多線程的程序健壯,但是在進(jìn)程切換時(shí),耗費(fèi)的資源較大,效率要差些。

97.&和&&的區(qū)別

&是位運(yùn)算符。&&是布爾邏輯運(yùn)算符,在進(jìn)行邏輯判斷時(shí)用&處理的前面為false后面的內(nèi)容仍需處理,用&&處理的前面為

false不再處理后面的內(nèi)容。

98.重載與重寫

Overload為重載,Override為重寫方法的重寫和重載是Java多態(tài)性的不同表現(xiàn)。重寫是父類與子類之間多態(tài)性的一種表現(xiàn),

重載是一個(gè)類中多態(tài)性的一種表現(xiàn)。

如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Override)。子類的對象使用這個(gè)方法時(shí),

將調(diào)用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。

如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overload)。

重載的方法是可以改變返回值的類型。

99.如果對象的引用被置為null,垃圾收集器是否會(huì)立即釋放對象占用的內(nèi)存?

不會(huì),在下一個(gè)垃圾回收周期中,這個(gè)對象將是可被回收的。

100.串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么?

吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等規(guī)模和大規(guī)模數(shù)據(jù)的應(yīng)用程序。而串行收集器對大多數(shù)的小應(yīng)

用(在現(xiàn)代處理器上需要大概100M左右的內(nèi)存)就足夠了。

                                                        你的支持,是我們的動(dòng)力!小手一掃,資料我有!   

【Java面試】Java基礎(chǔ)知識(shí)面試題—2020最新版!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI