Java面試乾貨:這十個問題你都會了嗎?如果會,理解透徹嗎?
大家在面試的時候,往往會卡在一些基礎的問題上,這些問題甚至有一些我們認為是在鑽牛角尖,然而不可否認,這些基礎問題恰恰就是看你基礎牢不牢固的體現。
0、訪問修飾符中,public,private,protected,或者不寫時,它們之間有什麼區別?
答:類的成員不寫訪問修飾時預設為default。預設對於同一個包中的其他類相當於公開(public),對於不是同一個包中的其他類相當於私有(private)。受保護(protected)對子類相當於公開,對不是同一包中的沒有父子關係的類相當於私有。Java中,外部類的修飾符只能是public或預設,類的成員(包括內部類)的修飾符可以是以上四種。
1、Java的基本資料型別有哪些?String 是否為最基本的資料型別?
答:Java中的基本資料型別只有8個:byte、short、int、long、float、double、char、boolean;除了基本型別(primitive type),剩下的都是引用型別(reference type),列舉型別(enumeration type)也是引用型別,所以String不是基本資料型別。
2、float f=3.4;是否正確?
答:不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制型別轉換float f =(float)3.4; 或者寫成float f=3.4F;。

3、short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?如果錯,錯在哪裡?
答:對於short s1 = 1; s1 = s1 + 1;由於1是int型別,因此s1+1運算結果也是int 型,需要強制轉換型別才能賦值給short型,所以Short s1=1;s1=s1+1需要強制轉換資料型別。而short s1 = 1; s1 += 1;可以正確編譯,因為s1+= 1;相當於s1 = (short)(s1 + 1);其中有隱含的強制型別轉換。
4、在Java有沒有goto?如果有,為什麼沒看到人們使用呢?
答:goto 是Java中的保留字,在目前版本的Java中沒有使用。Java之父編寫的《The Java Programming Language》一書給出了一個Java關鍵字列表,其中有goto和const,但是這兩個是目前無法使用的關鍵字,因此有些地方將其稱之為保留字。
5、int和Integer有什麼區別?
答:Java是一門面向物件程式語言,但是為了在敲程式碼的時候方便還是加入了基本資料型別,int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉換。簡單的說,如果整型字面量的值在-128到127之間,那麼不會new新的Integer物件,而是直接引用常量池中的Integer物件。

6、解釋記憶體中的棧、堆和靜態區的用法。
答:一般我們定義一個數據型別的變數用來程式設計的話,它物件的引用,還有函式呼叫等等,都是儲存在棧空間;而new的關鍵字等創造的物件卻放在堆空間之中,而程式中的一些字變數,比如直接書寫的100、”hello”等等是放在靜態區。棧空間操作起來最快但是棧很小,通常大量的物件都是放在堆空間,但是從執行的角度來看,整個記憶體的剩餘空間甚至硬碟上記憶體都可以當成堆來用。
7、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:這個需要根據版本的變化而變化,因為從Java 5開始,Java中就開始加入了列舉型別,expr也可以是enum型別。而從Java 7開始,expr還可以是字串(String),但是長整型(long)在目前所有的版本中都是不可以的。而在Java5之前,在switch(expr)中,expr只能是byte、short、char、int。
8、陣列有沒有length()方法?String有沒有length()方法?
答:在JS中,獲得字串的長度是通過length屬性得到的,這一點讓得很多新手容易和Java搞混淆。而在Java中,陣列沒有lengh()方法的,但是陣列卻有length 的屬性。值得一提的是,String 有length()方法。

9、在Java中,如何跳出當前的多重巢狀迴圈?
答:在最外層迴圈前加一個標記如X,然後用break X;可以跳出多重迴圈。因為Java中支援帶標籤break語句,但是很多人都應該避免使用帶標籤的break,因為看到這個的人會說你的程式碼寫得爛,因為這樣並不優雅,甚至在很多時候,會起到相反的作用,所以很多Java大牛都告訴新手這個還是不知道為好。
歡迎剛入門的Java小白朋友們加入Java之家:863270610
群內提供免費的Java的學習資料(裡面有企業級技術、日常練習案例等多個知識點的資料,每晚我還會在群內直播上課)。