1. 程式人生 > >面試篇——Java基本語法

面試篇——Java基本語法

1.一個“.java”原始檔中是否可以包括多個類(不是內部類)?有什麼限制?

可以有多個類,但只能有一個public的類,並且public的類名必須與檔名相一致。一個檔案中可以只有非public類,如果只有一個非public類,此類可以跟檔名不同。

2.&和&&的區別

&和&&都可以用作邏輯與的運算子,&&為短路與,&不是短路與。另外&可以作為整數位的運算子
例1:對於if(str != null&& !str.equals(“”))表示式,當str為null時,後面的表示式不會執行,所以不會出現現 NullPointerException 如果將&&改為&,則會丟擲 NullPointerException 異常。
例2:If(x= =33 &++y>0) y 會增長,If(x= =33 && ++y>0)不會增長。

3.java基本資料型別佔幾個位元組

4.Integer 與 int 的區別

int 是Java提供的8種原始資料型別之一,另外Java為每個原始型別提供了封裝類,Integer 是Java為int提供的封裝類。int的預設值為0,而integer的預設值為null,即integer可以區分出未賦值和值為0的區別,int則無法表達出未賦值的情況
例如:在業務中表示year,如果用int,在沒有賦值時,int型別會給一個預設值0,這樣就不知道這個year=0,是手工還是預設給的值,而定義成integer則在沒有賦值時是null,推薦使用封裝型別。

5.請設計一個一百億的計算器

如果只是大整數運算,使用BigInteger就可以,如果浮點資料參與去處,需要使用BigDecimal進行運算。java中基本型別的浮點數運算是不精確的,需要使用BigDecimal運算,尤其是金融,會計方向的軟體

6.char型變數中能不能儲存一箇中文漢字

char型變數是用來儲存Unicode編碼的字元的,Unicode編碼字符集中包含了漢字,所以char型變數中可以儲存漢字。

7.short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

對於 short s1 = 1; s1 = s1 + 1;由於 s1+1 運算時會自動提升表示式的型別,所以結果是 int型,再賦值給 short 型別 s1 時,編譯器會提示錯誤,需要強制轉換型別。
對於 short s1 = 1; s1 += 1;由於+=是 java 語言規定的運算子,Java 編譯器會對它進行特殊處理,因此可以正確編譯。

8."=="和 equals 方法有什麼區別?

(1)“= =”操作符專門用來比較兩個變數的值是否相等,也就是用於比較變數所對應的記憶體中所儲存的數值是否相同,要比較兩個基本型別的資料或兩個引用變數是否相等,只能用“= =”操作符。
如果一個變數指向的資料是物件型別的,那麼這時候涉及了兩塊記憶體,物件本身佔用一塊記憶體(堆記憶體),變數也佔用一塊記憶體,例如 Objet obj = new Object();變數 obj 是一個記憶體,new Object()是另一個記憶體,此時,變數 obj 所對應的記憶體中儲存的數值就是物件佔用的那塊記憶體的首地址。對於指向物件型別的變數,如果要比較兩個變數是否指向同一個物件,即要看這兩個變數所對應的記憶體中的數值是否相等,這時候就需要用==操作符進行比較。

(2)“eauals”方法是用於比較兩個獨立物件的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個物件是獨立的。
例如,對於下面的程式碼:
String a=new String(“foo”);
String b=new String(“foo”);
兩條 new 語句建立了兩個物件,然後用 a,b 這兩個變數分別指向了其中一個物件,這是兩個不同的物件,它們的首地址是不同的,即 a 和 b 中儲存的數值是不相同的,所以,表示式 a= =b 將返回 false,而這兩個物件中的內容是相同的,所以,表示式 a.equals(b)將返回 true。
(3)在實際開發中,我們經常要比較傳遞進行來的字串內容是否等,例如,Stringinput =…;input.equals(“quit”),如果一個類沒有自己定義 equals 方法,那麼它將繼承 Object 類的 equals 方法,Object 類的 equals 方法的實現程式碼如下:
boolean equals(Object o){
return this= =o;
}
這說明,如果一個類沒有自己定義 equals 方法,它預設的 equals 方法(從 Object類繼承的)就是使用= =操作符,也是在比較兩個變數指向的物件是否是同一物件,這時候使用 equals 和使用==會得到同樣的結果,如果比較的是兩個獨立的物件則總返回 false。如果你編寫的類希望能夠比較該類建立的兩個例項物件的內容是否相同,那麼你必須覆蓋 equals 方法,由你自己寫程式碼來決定在什麼情況即可認為兩個物件的內容是相同的。當此方法被重寫時,通常有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定宣告相等物件必須具有相等的雜湊碼。hashcode 這個方法是用來鑑定 2 個物件是否相等的。hashcode 方法一般使用者不會去呼叫,比如在 hashmap 中,由於 key 是不可以重複的,他在判斷 key是不是重複的時候就判斷了 hashcode 這個方法,而且也用到了 equals 方法。這裡不可以重複是說 equals 和 hashcode 只要有一個不等就可以了。所以簡單來講,hashcode 相當於是一個物件的編碼。我們一般在覆蓋 equals 的同時也要覆蓋 hashcode,讓他們的邏輯一致。

9.作用域 public,private,protected,以及不寫時的區別?


類的成員不寫訪問修飾時預設為default。預設對於同一包中的其他類相當於公開(public),對於不是一個包中的其他類相當於私有(private)。受保護(protected)對子類相當於公開,對不是同一包中的沒有父子關係的類相當於私有。
java中,外部類的修飾符只能是public或預設,類的成員(包括內部類)的修飾符可以是以上四種。