Java面试(一) -- 基础部分(1)
1 、一個(gè)".java" 源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?
答:可以有多個(gè)類,但只能有一個(gè) public 的類,并且 public 的類名必須與文件名相一致。.
2 、Java 有沒有 goto?
答:java中的保留字,現(xiàn)在沒有在java 中使用。
3 、說說& 和&& 的區(qū)別。
答:&和&&都可以用作邏輯與的運(yùn)算符,表示邏輯與(and),當(dāng)運(yùn)算符兩邊的表達(dá)式的結(jié)果都為 true 時(shí),整個(gè)運(yùn)算結(jié)果才為 true,否則,只要有一方為false,則結(jié)果為 false。&&還具有短路的功能,即如果第一個(gè)表達(dá)式為 false,則不再計(jì)算第二個(gè)表達(dá)式,例如,對于 if(str != null && !str.equals(“”))表達(dá)式,當(dāng) str 為 null 時(shí) , 后 面 的 表 達(dá) 式 不 會(huì) 執(zhí) 行 , 所 以 不 會(huì) 出 現(xiàn)NullPointerException 如 果 將 && 改 為 & , 則 會(huì) 拋 出NullPointerException 異常。If(x==33 & ++y>0) y 會(huì)增長,If(x==33&& ++y>0)y不會(huì)增長。&還可以用作位運(yùn)算符,當(dāng)&操作符兩邊的表達(dá)式不是 boolean 類型時(shí),&表示按位與操作,我們通常使用 0x0f 來與一個(gè)整數(shù)進(jìn)行&運(yùn)算,來獲取該整數(shù)的最低 4 個(gè) bit 位,例如,0x31 & 0x0f 的結(jié)果為 0x01。
4 、在 JAVA 中如何跳出當(dāng)前的多重嵌套循環(huán)?
答:在 Java 中,要想跳出多重循環(huán),可以在外面的循環(huán)語句前定義一個(gè)標(biāo)號(hào),然后在里層循環(huán)體的代碼中使用帶有標(biāo)號(hào)的 break 語句,即可跳出外層循環(huán)。例如,
ok:
for(int i=0;i<10;i++) {
for(int j=0;j<10;j++) {
System.out.println(“i=” + i + “,j=” + j);
if(j == 5) break ok;
}
}
另外,我個(gè)人通常并不使用標(biāo)號(hào)這種方式,而是讓外層的循環(huán)條件表達(dá)式的結(jié)果可以受到里層循環(huán)體代碼的控制,例如,要在二維數(shù)組中查找到某個(gè)數(shù)字。
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++) {
for(int j=0;j<arr[i].length;j++){
System.out.println(“i=” + i + “,j=” + j);
if(arr[i][j] == 5) {
found = true;
break;
}
}
}
5 、switch 語句能否作用在 byte 上,能否作用在 long 上,能否作用在String 上?
答:在 switch(expr1)中,expr1 只能是一個(gè)整數(shù)表達(dá)式或者枚舉常量(更大字體),整數(shù)表達(dá)式可以是 int 基本類型或 Integer 包裝類型,由于,byte,short,char 都可以隱含轉(zhuǎn)換為 int,所以,這些類型以及這些類型的包裝類型也是可以的。顯然,long 和String 類型都不符合 switch 的語法規(guī)定,并且不能被隱式轉(zhuǎn)換成 int 類型,所以,它們不能作用于swtich 語句中。
6.short s1 = 1; s1 = s1 + 1; 有什么錯(cuò)? short s1 = 1; s1 += 1; 有什么錯(cuò)?
答:對于 short s1 = 1; s1 = s1 + 1; 由于 s1+1 運(yùn)算時(shí)會(huì)自動(dòng)提升表達(dá)式的類型,所以結(jié)果是 int 型,再賦值給 short 類型 s1 時(shí),編譯器將報(bào)告需要強(qiáng)制轉(zhuǎn)換類型的錯(cuò)誤。對于
short s1 = 1; s1 += 1;由于 += 是 java 語言規(guī)定的運(yùn)算符,java編譯器會(huì)對它進(jìn)行特殊處理,因此可以正確編譯。
7 、char 型變量中能不能存貯一個(gè)中文漢字? 為什么?
答:char 型變量是用來存儲(chǔ) Unicode 編碼的字符的,unicode 編碼字符集中包含了漢字,所以,char 型變量中當(dāng)然可以存儲(chǔ)漢字啦。不過,如果某個(gè)特殊的漢字沒有被包含在 unicode 編碼字符集中,那么,這個(gè) char 型變量中就不能存儲(chǔ)這個(gè)特殊漢字。補(bǔ)充說明:unicode 編碼占用兩個(gè)字節(jié),所以,char 類型的變量也是占用兩個(gè)字節(jié)。
8 、用最有效率的方法算出 2 乘以 8 等於幾?
答:2 << 3,
理由:因?yàn)閷⒁粋€(gè)數(shù)左移 n 位,就相當(dāng)于乘以了 2 的 n 次方,那么,一個(gè)數(shù)乘以 8 只要將其左移 3位即可,而位運(yùn)算 cpu直接支持的,效率最高,所以,2乘以 8 等於幾的最效率的方法是2 << 3。
總結(jié)
以上是生活随笔為你收集整理的Java面试(一) -- 基础部分(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【重学C++】04 | 说透C++右值引
- 下一篇: PLC入门笔记3