java面試題

原文鏈接:

https://blog.csdn.net/meism5/article/details/89021536

1.JDK 和 JRE 有什么區(qū)別佣耐?

JRE:Java Runtime Environment(java運(yùn)行時(shí)環(huán)境)政勃。即java程序的運(yùn)行時(shí)環(huán)境,包含了java虛擬機(jī)兼砖,java基礎(chǔ)類庫奸远。

JDK:Java Development Kit(java開發(fā)工具包)。即java語言編寫的程序所需的開發(fā)工具包讽挟。

JDK包含了JRE懒叛,同時(shí)還包括java源碼的編譯器javac、監(jiān)控工具jconsole耽梅、分析工具jvisualvm等薛窥。


2.== 和 equals 的區(qū)別是什么?

== 的作用:

基本類型:比較值是否相等

引用類型:比較內(nèi)存地址值是否相等

equals 的作用:

引用類型:默認(rèn)情況下褐墅,比較內(nèi)存地址值是否相等拆檬。可以按照需求邏輯妥凳,重寫對(duì)象的equals方法竟贯。


3.基本類型的包裝類對(duì)象使用 == 和 equals進(jìn)行比較的結(jié)果


4.什么是裝箱?什么是拆箱逝钥?裝箱和拆箱的執(zhí)行過程屑那?常見問題拱镐?

裝箱:基本類型轉(zhuǎn)變?yōu)榘b器類型的過程。通過調(diào)用包裝器類的 valueOf 方法實(shí)現(xiàn)的持际;

拆箱:包裝器類型轉(zhuǎn)變?yōu)榛绢愋偷倪^程沃琅。通過調(diào)用包裝器類的 xxxValue 方法實(shí)現(xiàn)的,xxx代表對(duì)應(yīng)的基本數(shù)據(jù)類型蜘欲。

如int裝箱的時(shí)候自動(dòng)調(diào)用Integer的valueOf(int)方法佛致;Integer拆箱的時(shí)候自動(dòng)調(diào)用Integer的intValue方法。

常見問題:

整型的包裝類 valueOf 方法返回對(duì)象時(shí)共郭,在常用的取值范圍內(nèi)稽荧,會(huì)返回緩存對(duì)象。

浮點(diǎn)型的包裝類 valueOf 方法返回新的對(duì)象澈歉。

布爾型的包裝類 valueOf 方法 Boolean類的靜態(tài)常量 TRUE | FALSE展鸡。


5.兩個(gè)對(duì)象hashCode()相同,equals() 也一定為 true嗎埃难?

首先莹弊,答案肯定是不一定。同時(shí)反過來equals為true涡尘,hashCode也不一定相同忍弛。

類的hashCode方法和equals方法都可以重寫,返回的值完全在于自己定義悟衩。

hashCode()返回該對(duì)象的哈希碼值剧罩;equals()返回兩個(gè)對(duì)象是否相等。

關(guān)于hashCode和equal是方法是有一些 常規(guī)協(xié)定 :

1座泳、兩個(gè)對(duì)象用equals()比較返回true惠昔,那么兩個(gè)對(duì)象的hashCode()方法必須返回相同的結(jié)果。

2挑势、兩個(gè)對(duì)象用equals()比較返回false镇防,不要求hashCode()方法也一定返回不同的值,但是最好返回不同值潮饱,億提搞哈希表性能来氧。

3、重寫equals()方法香拉,必須重寫hashCode()方法啦扬,以保證equals方法相等時(shí)兩個(gè)對(duì)象hashcode返回相同的值。


6.final 在 java 中的作用是什么凫碌?

final 語義是不可改變的扑毡。

被 final 修飾的類,不能夠被繼承盛险。

被 final 修飾的成員變量必須要初始化瞄摊,賦初值后不能再重新賦值(可以調(diào)用本對(duì)象方法修改屬性值)勋又。對(duì)基本類型來說是其值不可變;對(duì)引用變量來說其引用不可變换帜,即不能再指向其他的對(duì)象楔壤。

被 final 修飾的方法代表不能重寫。

7.final finally finalize()區(qū)別

final 表示最終的惯驼、不可改變的蹲嚣。用于修飾類、方法和變量跳座。

finally 異常處理的一部分端铛,它只能用在try/catch語句中,表示希望finally語句塊中的代碼最后一定被執(zhí)行(但是不一定會(huì)被執(zhí)行)

finalize()是在java.lang.Object里定義的疲眷,Object的finalize方法什么都不做,對(duì)象被回收時(shí)finalized方法會(huì)被調(diào)用您朽。

? ? 特殊情況下狂丝,可重寫finalize方法,當(dāng)對(duì)象被回收的時(shí)候釋放一些資源哗总。但注意几颜,要調(diào)用super.finalize()。


8.finally語句塊一定執(zhí)行嗎讯屈?

答案是不一定蛋哭。

直接返回未執(zhí)行到finally語句塊

拋出異常未執(zhí)行到finally語句塊

系統(tǒng)退出未執(zhí)行到finally語句塊


9.final 與 static 的區(qū)別

都可以修飾類、方法涮母、成員變量谆趾。

static可以修飾類的代碼塊,final不可以叛本。

static不可以修飾方法內(nèi)的局部變量沪蓬,final可以。

static修飾表示靜態(tài)或全局来候,被修飾的屬性和方法屬于類跷叉,可以用類名.靜態(tài)屬性 / 方法名 訪問

static修飾的代碼塊表示靜態(tài)代碼塊,當(dāng)Java虛擬機(jī)(JVM)加載類時(shí)营搅,就會(huì)執(zhí)行該代碼塊,只會(huì)被執(zhí)行一次

static修飾的屬性云挟,也就是類變量,是在類加載時(shí)被創(chuàng)建并進(jìn)行初始化转质,只會(huì)被創(chuàng)建一次

static修飾的變量可以重新賦值

static方法中不能用this和super關(guān)鍵字

static方法必須被實(shí)現(xiàn)园欣,而不能是抽象的abstract

static方法只能被static方法覆蓋

final修飾表示常量、一旦創(chuàng)建不可改變

final標(biāo)記的成員變量必須在聲明的同時(shí)賦值峭拘,或在該類的構(gòu)造方法中賦值俊庇,不可以重新賦值

final方法不能被子類重寫

final類不能被繼承狮暑,沒有子類,final類中的方法默認(rèn)是final的

final不能用于修飾構(gòu)造方法

private類型的方法默認(rèn)是final類型的



10.return 與 finally 的執(zhí)行順序?qū)Ψ祷刂档挠绊?/b>

對(duì)于 try 和 finally 至少一個(gè)語句塊包含 return 語句的情況:

finally 語句塊會(huì)執(zhí)行

finally 沒有 return辉饱,finally 對(duì) return 變量的重新賦值修改無效

try 和 finally 都包含return搬男,return 值會(huì)以 finally 語句塊 return 值為準(zhǔn)



11.String對(duì)象中的replace和replaceAll的區(qū)別?

replace方法:支持字符和字符串的替換彭沼。

replaceAll方法:基于正則表達(dá)式的字符串替換缔逛。



12.Math.round(-1.5) 等于多少

-1。

擴(kuò)展JDK中的java.lang.Math類

round:返回四舍五入姓惑,負(fù).5小數(shù)返回較大整數(shù)褐奴,如-1.5返回-1。

ceil:返回小數(shù)所在兩整數(shù)間的較大值于毙,如-1.5返回-1敦冬。

tail:返回小數(shù)所在兩整數(shù)間的較小值,如-1.5返回-2唯沮。


13.String 屬于基礎(chǔ)的數(shù)據(jù)類型嗎脖旱?

不屬于。

Java8種基礎(chǔ)的數(shù)據(jù)類型:byte介蛉、short萌庆、char、int币旧、long践险、float、double吹菱、boolean巍虫。


14.java 中操作字符串都有哪些類?它們之間有什么區(qū)別垫言?

String、StringBuffer倾剿、StringBuilder

String : final修飾筷频,String類的方法都是返回new String。即對(duì)String對(duì)象的任何改變都不影響到原對(duì)象前痘,對(duì)字符串的修改操作都會(huì)生成新的對(duì)象凛捏。

StringBuffer : 對(duì)字符串的操作的方法都加了synchronized,保證線程安全芹缔。

StringBuilder : 不保證線程安全坯癣,在方法體內(nèi)需要進(jìn)行字符串的修改操作,可以new StringBuilder對(duì)象最欠,調(diào)用StringBuilder對(duì)象的append示罗、replace惩猫、delete等方法修改字符串。


15.如何將字符串反轉(zhuǎn)蚜点?

1轧房、使用StringBuilder的reverse方法

2、不考慮字符串中的字符是否是Unicode編碼绍绘,自己實(shí)現(xiàn)奶镶。


16.String 類的常用方法

equals 字符串是否相同

equalsIgnoreCase 忽略大小寫后字符串是否相同

compareTo 根據(jù)字符串中每個(gè)字符的Unicode編碼進(jìn)行比較

compareToIgnoreCase 根據(jù)字符串中每個(gè)字符的Unicode編碼進(jìn)行忽略大小寫比較

indexOf 目標(biāo)字符或字符串在源字符串中位置下標(biāo)

lastIndexOf 目標(biāo)字符或字符串在源字符串中最后一次出現(xiàn)的位置下標(biāo)

valueOf 其他類型轉(zhuǎn)字符串

charAt 獲取指定下標(biāo)位置的字符

codePointAt 指定下標(biāo)的字符的Unicode編碼

concat 追加字符串到當(dāng)前字符串

isEmpty 字符串長度是否為0

contains 是否包含目標(biāo)字符串

startsWith 是否以目標(biāo)字符串開頭

endsWith 是否以目標(biāo)字符串結(jié)束

format 格式化字符串

getBytes 獲取字符串的字節(jié)數(shù)組

getChars 獲取字符串的指定長度字符數(shù)組

toCharArray 獲取字符串的字符數(shù)組

join 以某字符串,連接某字符串?dāng)?shù)組

length 字符串字符數(shù)

matches 字符串是否匹配正則表達(dá)式

replace 字符串替換

replaceAll 帶正則字符串替換

replaceFirst 替換第一個(gè)出現(xiàn)的目標(biāo)字符串

split 以某正則表達(dá)式分割字符串

substring 截取字符串

toLowerCase 字符串轉(zhuǎn)小寫

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

trim 去字符串首尾空格



17.普通類和抽象類有哪些區(qū)別陪拘?

抽象類不能被實(shí)例化

抽象類可以有抽象方法厂镇,抽象方法只需申明,無需實(shí)現(xiàn)

含有抽象方法的類必須申明為抽象類

抽象的子類必須實(shí)現(xiàn)抽象類中所有抽象方法左刽,否則這個(gè)子類也是抽象類

抽象方法不能被聲明為靜態(tài)

抽象方法不能用private修飾

抽象方法不能用final修飾



18.抽象類必須要有抽象方法嗎捺信?

不一定


19.抽象類能使用 final 修飾嗎?

不能悠反,抽象類是被用于繼承的残黑,final修飾代表不可修改、不可繼承的斋否。


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

抽象類可以有構(gòu)造方法拭荤;接口中不能有構(gòu)造方法茵臭。

抽象類中可以有普通成員變量;接口中沒有普通成員變量舅世。

抽象類中可以包含非抽象普通方法旦委;接口中的所有方法必須都是抽象的。

抽象類中的抽象方法的訪問權(quán)限可以是 public雏亚、protected 和 default缨硝;接口中的抽象方法只能是 public 類型的,并且默認(rèn)即為 public abstract 類型罢低。

抽象類中可以包含靜態(tài)方法查辩;JDK1.8 前接口中不能包含靜態(tài)方法,JDK1.8 及以后可以包含已實(shí)現(xiàn)的靜態(tài)方法网持。

抽象類和接口中都可以包含靜態(tài)成員變量宜岛,抽象類中的靜態(tài)成員變量可以是任意訪問權(quán)限;接口中變量默認(rèn)且只能是 public static final 類型功舀。

一個(gè)類可以實(shí)現(xiàn)多個(gè)接口萍倡,用逗號(hào)隔開,但只能繼承一個(gè)抽象類辟汰。

接口不可以實(shí)現(xiàn)接口列敲,但可以繼承接口阱佛,并且可以繼承多個(gè)接口,用逗號(hào)隔開戴而。


21.Java4種訪問修飾符權(quán)限的區(qū)別凑术?

Java語言中有四種權(quán)限訪問控制符,能夠控制類中成員變量和方法的可見性填硕。

public

? ? 被public修飾的成員變量和方法可以在任何類中都能被訪問到麦萤。

?? ?被public修飾的類,在一個(gè)java源文件中只能有一個(gè)類被聲明為public扁眯,而且一旦有一個(gè)類為public壮莹,那這個(gè)java源文件的文件名就必須要和這個(gè)被public所修飾的類的類名相同,否則編譯不能通過姻檀。

protected

? ? 被protected修飾的成員會(huì)被位于同一package中的所有類訪問到命满,也能被該類的所有子類繼承下來。

friendly

? ? 默認(rèn)绣版,缺省的胶台。在成員的前面不寫訪問修飾符的時(shí)候,默認(rèn)就是友好的杂抽。

?? ?同一package中的所有類都能訪問诈唬。

?? ?被friendly所修飾的成員只能被該類所在同一個(gè)package中的子類所繼承下來。


private

?? ?私有的缩麸。只能在當(dāng)前類中被訪問到铸磅。




22.Java中的 << ?>> ?>>> 什么意思?

<< ?表示左移杭朱,不分正負(fù)數(shù)阅仔,低位補(bǔ)0

>> ?表示右移,如果該數(shù)為正弧械,則高位補(bǔ)0八酒,若為負(fù)數(shù),則高位補(bǔ)1

>>> 表示無符號(hào)右移刃唐,也叫邏輯右移羞迷,即若該數(shù)為正,則高位補(bǔ)0唁桩,而若該數(shù)為負(fù)數(shù)闭树,則右移后高位同樣補(bǔ)0

<< 1? 相當(dāng)于乘以2

>> 1? 相當(dāng)于除以2

>>> 不考慮高位的正負(fù)號(hào),正數(shù)的 >>> 等同于 >>


23.javap 指令

javap是 Java class文件分解器荒澡,可以反編譯报辱,也可以查看java編譯器生成的字節(jié)碼等。


24.throw 和 throws 的區(qū)別?

throw:

表示方法內(nèi)拋出某種異常對(duì)象

如果異常對(duì)象是非 RuntimeException 則需要在方法申明時(shí)加上該異常的拋出 即需要加上 throws 語句 或者 在方法體內(nèi) try catch 處理該異常碍现,否則編譯報(bào)錯(cuò)

執(zhí)行到 throw 語句則后面的語句塊不再執(zhí)行

throws:

方法的定義上使用 throws 表示這個(gè)方法可能拋出某種異常

需要由方法的調(diào)用者進(jìn)行異常處理


25.try-catch-finally 中哪個(gè)部分可以省略幅疼?

catch 和 finally 語句塊可以省略其中一個(gè)。


26.常見的異常類有哪些昼接?

異常非常多爽篷,Throwable 是異常的根類。

Throwable 包含子類 錯(cuò)誤-Error 和 異常-Exception 慢睡。

Exception 又分為 一般異常和運(yùn)行時(shí)異常 RuntimeException逐工。

運(yùn)行時(shí)異常不需要代碼顯式捕獲處理。

下圖是常見異常類及其父子關(guān)系:

Throwable

|  ├ Error??

|  │ ├ IOError

|  │ ├ LinkageError

|  │ ├ ReflectionError

|  │ ├?ThreadDeath

|  │?└?VirtualMachineError

|  │?

|  ├ Exception??

|  │ ├?CloneNotSupportedException

|  │ ├?DataFormatException

|  │ ├?InterruptedException

|  │ ├?IOException

|  │ ├?ReflectiveOperationException

|  │ ├ RuntimeException?

|  │? ? ├?ArithmeticException

|  │? ? ├?ClassCastException

|  │? ? ├?ConcurrentModificationException

|  │? ? ├?IllegalArgumentException

|  │? ? ├?IndexOutOfBoundsException

|  │? ? ├?NoSuchElementException

|  │? ? ├?NullPointerException

|  │ └ SecurityException

|  │ └??SQLException



27.java 中 IO 流有哪些漂辐?

按數(shù)據(jù)流向:輸入流和輸出流

?? ?輸入和輸出都是從程序的角度來說的泪喊。輸入流:數(shù)據(jù)流向程序;輸出流:數(shù)據(jù)從程序流出髓涯。

按處理單位:字節(jié)流和字符流

?? ?字節(jié)流:一次讀入或讀出是8位二進(jìn)制袒啼;字符流:一次讀入或讀出是16位二進(jìn)制。

?? ?JDK中后綴是Stream是字節(jié)流纬纪;后綴是Reader蚓再,Writer是字符流。

按功能功能:節(jié)點(diǎn)流和處理流

?? ?節(jié)點(diǎn)流:直接與數(shù)據(jù)源相連包各,讀入或?qū)懗稣觯惶幚砹鳎号c節(jié)點(diǎn)流一塊使用,在節(jié)點(diǎn)流的基礎(chǔ)上问畅,再套接一層实檀。



28.Collection 和 Collections 有什么區(qū)別?

Collection是JDK中集合層次結(jié)構(gòu)中的最根本的接口按声。定義了集合類的基本方法。

Collections是一個(gè)包裝類恬吕。它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法,不能實(shí)例化签则,像一個(gè)Collection集合框架中的工具類。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铐料,一起剝皮案震驚了整個(gè)濱河市渐裂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钠惩,老刑警劉巖柒凉,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異篓跛,居然都是意外死亡膝捞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門愧沟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔬咬,“玉大人鲤遥,你說我怎么就攤上這事×炙遥” “怎么了盖奈?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長狐援。 經(jīng)常有香客問我钢坦,道長,這世上最難降的妖魔是什么啥酱? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任爹凹,我火速辦了婚禮,結(jié)果婚禮上懈涛,老公的妹妹穿的比我還像新娘逛万。我一直安慰自己,他們只是感情好批钠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布宇植。 她就那樣靜靜地躺著,像睡著了一般埋心。 火紅的嫁衣襯著肌膚如雪指郁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天拷呆,我揣著相機(jī)與錄音闲坎,去河邊找鬼。 笑死茬斧,一個(gè)胖子當(dāng)著我的面吹牛腰懂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播项秉,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绣溜,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了娄蔼?” 一聲冷哼從身側(cè)響起怖喻,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岁诉,沒想到半個(gè)月后锚沸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涕癣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年哗蜈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恬叹,死狀恐怖候生,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绽昼,我是刑警寧澤唯鸭,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站硅确,受9級(jí)特大地震影響目溉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菱农,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一缭付、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧循未,春花似錦陷猫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嫂粟,卻和暖如春娇未,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背星虹。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工零抬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宽涌。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓平夜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卸亮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褥芒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1、面向?qū)ο蟮奶卣饔心男┓矫? 答:面向?qū)ο蟮奶卣髦饕幸韵聨讉€(gè)方面: 1)抽象:抽象是將一類對(duì)象的共同特征總結(jié)出...
    yshenhn閱讀 1,159評(píng)論 0 8
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡單原理和應(yīng)用嫡良。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 4,587評(píng)論 1 114
  • 接口/抽象類意義規(guī)范、擴(kuò)展献酗、回調(diào)為其子類提供一個(gè)公共的類型 封裝子類中得重復(fù)內(nèi)容 定義抽象方法寝受,子類雖然有不同的實(shí)...
    MigrationUK閱讀 2,165評(píng)論 1 28
  • 由于時(shí)間倉促,有些地方未寫完,后面會(huì)繼續(xù)補(bǔ)充.如有不妥之處,歡迎及時(shí)與我溝通. 如果你也是在學(xué)習(xí)java,給你們推...
    分不清java閱讀 2,831評(píng)論 0 15
  • 相關(guān)概念 面向?qū)ο蟮娜齻€(gè)特征 封裝,繼承,多態(tài).這個(gè)應(yīng)該是人人皆知.有時(shí)候也會(huì)加上抽象. 多態(tài)的好處 允許不同類對(duì)...
    東經(jīng)315度閱讀 1,940評(píng)論 0 8