Java基礎

1.JDK和JRE的區(qū)別:

  • JRE是Java運行時環(huán)境滑肉,包括bin文件(JVM)和lib文件(類庫包各,沒有javac)靶庙。
  • JDK是Java開發(fā)工具包问畅,包括JRE,include(java和JVM交互用的頭文件)六荒。
    通常安裝的eclipse护姆、idea等IDE有自己的編譯器而不是用JDK bin目錄中自帶的,所以在安裝時只要求你選中JRE路徑掏击。

2.final和static

  • final修飾變量卵皂,不能修改;修飾方法砚亭,不能覆蓋渐裂;修飾類,不能繼承钠惩。
  • static修飾的方法和類柒凉,存儲在方法區(qū),隨類一起被加載篓跛。static不能和abstract
  • static 不能和abstract一起修飾方法膝捞,必須有實現(xiàn)。
  • static不能修飾接口,抽象類蔬咬。

3.自動裝箱是Java編譯器在基本數(shù)據(jù)類型和對應的對象包裝類型間的轉(zhuǎn)化鲤遥,即int轉(zhuǎn)化為Integer,自動拆箱是Integer調(diào)用其方法將其轉(zhuǎn)化為int。

4.覆蓋||重寫(override)

  • 必須有繼承林艘。重寫方法的方法名稱盖奈、參數(shù)列表必須與原方法的相同,返回類型可以相同也可以是原類型的子類型(從Java SE5開始支持)狐援。
  • 重寫方法不能比原方法訪問性權限小钢坦。
  • 重寫方法不能比原方法拋出更多的異常。
  • final方法不能被重寫的啥酱。
  • private方法不能被重寫爹凹,否則在其子類中只是新定義了一個方法,并沒有對其進行重寫镶殷。
  • static方法不能被重寫禾酱。因為靜態(tài)方法是在編譯時把靜態(tài)方法和類的引用類型進行匹配。
  • 重寫是發(fā)生在運行時的绘趋。因為編譯期編譯器不知道無法確定該去調(diào)用哪個方法颤陶,JVM會在代碼運行時決定。

5.重載(overload)

  • 發(fā)生在同一個類中陷遮,方法名相同滓走。
  • 返回類型可以不同,但只有返回類型不同不構成重載拷呆。
  • 重載是編譯時多態(tài)闲坎,重寫是運行時多態(tài)疫粥。

6.繼承時靜態(tài)語句塊茬斧,非靜態(tài)語句塊,構造函數(shù)的運行順序梗逮。

  • 父類靜態(tài)語句塊 子類靜態(tài)語句塊>父類非靜態(tài)語句塊>父類構造方法 >子類非靜態(tài)語句塊>子類構造方法项秉。

7.String

  • final,因此不可繼承
  • JDK9之前慷彤,char 16位——private final char value[];
  • JDK9之后娄蔼,byte 8位——private final byte[] value
  • String 支持多種編碼,如果不指定編碼的話底哗,它可能使用兩種編碼岁诉,分別為 LATIN1 和 UTF16。LATIN1 可能比較陌生跋选,其實就是 ISO-8859-1 編碼涕癣,屬于單字節(jié)編碼。而 UTF16 為雙字節(jié)編碼前标,它使用1個或2個16位長的空間存儲坠韩。
String s = "abc";
String ss = new String("abc");// 兩個對象距潘,一個是靜態(tài)存儲區(qū)的"abc",一個是用new創(chuàng)建在堆上的對象。

String a = "Programming"; 
String b = new String("Programming"); 
String c = "Program" + "ming";     
System.out.println(a == b);//false
System.out.println(b == c);//false
System.out.println(a == c);//true
System.out.println(a.equals(b));//true
System.out.println(a.equals(c));//true 
System.out.println(a.intern() == b.intern());//true
和StringBuffer只搁,StringBuilder的區(qū)別
  • String 不可變音比,因此是線程安全的
  • StringBuilder可變。不是線程安全的
  • StringBuffer 可變氢惋。是線程安全的洞翩,內(nèi)部使用 synchronized 來同步

String.intern()
String s3 = s1.intern(); //首先把 s1 引用的對象放到 String Pool(字符串常量池)中,然后返回這個對象引用明肮。因此 s3 和 s1 引用的是同一個字符串常量池的對象菱农。

8.抽象的(abstract)方法是否可同時是靜態(tài)的(static),是否可同時是本地方法(native),是否可同時被synchronized修飾?

答:都不能柿估。抽象方法需要子類重寫循未,而靜態(tài)的方法是無法被重寫的,因此二者是矛盾的秫舌。本地方法是由本地代碼(如C代碼)實現(xiàn)的方法的妖,而抽象方法是沒有實現(xiàn)的,也是矛盾的足陨。synchronized和方法的實現(xiàn)細節(jié)有關嫂粟,抽象方法不涉及實現(xiàn)細節(jié),因此也是相互矛盾的墨缘。

9.接口和抽象類

  • 先繼承后實現(xiàn)星虹,單繼承多實現(xiàn)。(class X extends C implements A,B)
  • 接口可以繼承接口镊讼。抽象類可以實現(xiàn)(implements)接口宽涌,抽象類可繼承具體類,但前提是具體類必須有明確的構造函數(shù)蝶棋。
  • 抽象類可以包含抽象方法和非抽象方法卸亮,但接口只有抽象方法。
  • 接口方法和字段默認是public玩裙。
  • 接口不能有構造函數(shù)兼贸,抽象類可以。
  • 接口的初始化不會引起其父接口的初始化吃溅。
  • 抽象類與普通類最大的區(qū)別是抽象類不能實例化溶诞,需要繼承抽象類才能實例化其子類。
  • 接口中可以有默認的方法實現(xiàn)决侈。
  • 接口的字段默認都是 static 和 final 的螺垢。(聲明時必須賦值)

10.在Java 中,如何跳出當前的多重嵌套循環(huán)?

  • 在最外層循環(huán)前加一個標記如A甩苛,然后用break A;可以跳出多重循環(huán)蹂楣。(Java中支持帶標簽的break和continue語句,作用有點類似于C和C++中的goto語句讯蒲,但是就像要避免使用goto一樣痊土,應該避免使用帶標簽的break和continue,因為它不會讓你的程序變得更優(yōu)雅墨林,很多時候甚至有相反的作用赁酝,所以這種語法其實不知道更好)

11.Object

方法:
public final native Class<?> getClass()

public native int hashCode()

public boolean equals(Object obj)

protected native Object clone() throws CloneNotSupportedException

public String toString()

public final native void notify()

public final native void notifyAll()

public final native void wait(long timeout) throws InterruptedException

public final void wait(long timeout, int nanos) throws InterruptedException

public final void wait() throws InterruptedException

protected void finalize() throws Throwable {}

12.equals

  • 基本類型,== 判斷兩個值是否相等旭等,基本類型沒有 equals() 方法酌呆。
  • 引用類型,== 判斷兩個實例是否引用同一個對象搔耕,而 equals() 判斷引用的對象是否等價隙袁。
    【equals判斷過程】首先判斷是否是同一個對象的引用,若是則返回true弃榨,否則菩收,則判斷是否屬于同一個類類(instanceof),是則將Object轉(zhuǎn)型鲸睛,然后繼續(xù)判斷關鍵域娜饵,否則返回false。

13.hashcode

  • 在覆蓋 equals() 方法時應當總是覆蓋 hashCode() 方法官辈,保證等價的兩個實例散列值也相等箱舞。
一個數(shù)與 31 相乘可以轉(zhuǎn)換成移位和減法:31*x == (x<<5)-x,編譯器會自動進行這個優(yōu)化拳亿。
@Override
public int hashCode() {
    int result = 17;
    result = 31 * result + x;
    result = 31 * result + y;
    result = 31 * result + z;
    return result;
}

14.深拷貝和淺拷貝

https://blog.csdn.net/bigconvience/article/details/25025561

15.異常

【分類】Throwable 是所有異常的父類

Throwable分為兩種: Error 和 Exception晴股。其中 Error 用來表示 JVM 無法處理的錯誤
Exception 分為兩種:

  • 受檢異常 :需要用 try...catch... 語句捕獲并進行處理,并且可以從異常中恢復风瘦;
  • 非受檢異常 :是程序運行時錯誤队魏,例如除 0 會引發(fā) Arithmetic Exception公般。
image.png

16.反射

https://www.sczyh30.com/posts/Java/java-reflection-1/

【弊端】
  • 由于反射會額外消耗一定的系統(tǒng)資源万搔,因此如果不需要動態(tài)地創(chuàng)建一個對象,那么就不需要用反射官帘。
  • 反射調(diào)用方法時可以忽略權限檢查瞬雹,因此可能會破壞封裝性而導致安全問題。

用法:
1.在運行時判斷任意一個對象所屬的類刽虹;
2.在運行時構造任意一個類的對象酗捌;
3.在運行時判斷任意一個類所具有的成員變量和方法(通過反射甚至可以調(diào)用private方法);
4.在運行時調(diào)用任意一個對象的方法

參考資料:
https://github.com/CyC2018/Interview-Notebook/blob/master/notes/Java%20%E5%9F%BA%E7%A1%80.md

17.HashMap可以通過下面的語句進行同步:

Map m = Collections.synchronizeMap(hashMap);

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胖缤,隨后出現(xiàn)的幾起案子尚镰,更是在濱河造成了極大的恐慌,老刑警劉巖哪廓,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狗唉,死亡現(xiàn)場離奇詭異,居然都是意外死亡涡真,警方通過查閱死者的電腦和手機分俯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哆料,“玉大人缸剪,你說我怎么就攤上這事《啵” “怎么了杏节?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長典阵。 經(jīng)常有香客問我象踊,道長叔汁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮谷醉,結果婚禮上,老公的妹妹穿的比我還像新娘澡匪。我一直安慰自己蒂秘,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布染突。 她就那樣靜靜地躺著捻爷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪份企。 梳的紋絲不亂的頭發(fā)上也榄,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音司志,去河邊找鬼甜紫。 笑死,一個胖子當著我的面吹牛骂远,可吹牛的內(nèi)容都是我干的囚霸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼激才,長吁一口氣:“原來是場噩夢啊……” “哼拓型!你這毒婦竟也來了额嘿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤劣挫,失蹤者是張志新(化名)和其女友劉穎册养,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體压固,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡捕儒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了邓夕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刘莹。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖焚刚,靈堂內(nèi)的尸體忽然破棺而出点弯,到底是詐尸還是另有隱情,我是刑警寧澤矿咕,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布抢肛,位于F島的核電站,受9級特大地震影響碳柱,放射性物質(zhì)發(fā)生泄漏捡絮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一莲镣、第九天 我趴在偏房一處隱蔽的房頂上張望福稳。 院中可真熱鬧,春花似錦瑞侮、人聲如沸的圆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽越妈。三九已至,卻和暖如春钮糖,著一層夾襖步出監(jiān)牢的瞬間梅掠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工店归, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阎抒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓娱节,卻偏偏與公主長得像挠蛉,于是被迫代替她去往敵國和親祭示。 傳聞我的和親對象是個殘疾皇子肄满,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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

  • 整理來自互聯(lián)網(wǎng) 1谴古,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境稠歉,java的開發(fā)工具...
    Ncompass閱讀 1,540評論 0 6
  • 一:java概述:1掰担,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境怒炸,java的開發(fā)工...
    ZaneInTheSun閱讀 2,654評論 0 11
  • 一:java概述: 1带饱,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境阅羹,java的開發(fā)...
    慕容小偉閱讀 1,792評論 0 10
  • 博敏文化閱讀 361評論 0 3
  • ·文/子檱 “放棄自由喜歡兩個人勺疼, 綁住的兩個人, 互不相讓還是相愛分享一生捏鱼≈绰”..... 鈴聲響起,慧慧看著手機...
    子檱閱讀 303評論 0 0