天天看點

常見的java基礎面試題彙總-01

可以有多個類,但隻能有一個public的類,并且public的類名必須與檔案名相一緻。

java中的保留字,由于它是跳轉語句,使用時過于靈活,現在沒有在java中使用。

&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,隻要有一方為false,則結果為false。

&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式,例如,對于if(str != null && !str.equals(“”))表達式,當str為null時,後面的表達式不會執行,是以不會出現nullpointerexception如果将&&改為&,則會抛出nullpointerexception異常。if(x==33 & ++y>0) y會增長,if(x==33 && ++y>0)不會增長

&還可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作,我們通常使用0x0f來與一個整數進行&運算,來擷取該整數的最低4個bit位,例如,0x31 & 0x0f的結果為0x01。 

備注:這道題先說兩者的共同點,再說出&&和&的特殊之處,并列舉一些經典的例子來表明自己了解透徹深入、實際經驗豐富。 

在java中,要想跳出多重循環,可以在外面的循環語句前定義一個标号,然後在裡層循環體的代碼中使用帶有标号的break 語句,即可跳出外層循環。例如,

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;

}

另外,我個人通常并不使用标号這種方式,而是讓外層的循環條件表達式的結果可以受到裡層循環體代碼的控制,例如,要在二維數組中查找到某個數字。

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++)

if(arr[i][j]  == 5) 

found = true;

break;

在switch(expr1)中,expr1隻能是一個整數表達式或者枚舉常量(更大字型),整數表達式可以是int基本類型或integer包裝類型,由于,byte,short,char都可以隐含轉換為int,是以,這些類型以及這些類型的包裝類型也是可以的。顯然,long和string類型都不符合switch的文法規定,并且不能被隐式轉換成int類型,是以,它們不能作用于swtich語句中。 

對于short s1 = 1; s1 = s1 + 1; 由于s1+1運算時會自動提升表達式的類型,是以結果是int型,再指派給short類型s1時,編譯器将報告需要強制轉換類型的錯誤。

對于short s1 = 1; s1 += 1;由于 += 是java語言規定的運算符,java編譯器會對它進行特殊處理,是以可以正确編譯。 

char型變量是用來存儲unicode編碼的字元的,unicode編碼字元集中包含了漢字,是以,char型變量中當然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字元集中,那麼,這個char型變量中就不能存儲這個特殊漢字。補充說明:unicode編碼占用兩個位元組,是以,char類型的變量也是占用兩個位元組。

備注:後面一部分回答雖然不是在正面回答題目,但是,為了展現自己的學識和表現自己對問題了解的透徹深入,可以回答一些相關的知識,做到知無不言,言無不盡。 

2 << 3,

因為将一個數左移n位,就相當于乘以了2的n次方,那麼,一個數乘以8隻要将其左移3位即可,而位運算cpu直接支援的,效率最高,是以,2乘以8等於幾的最效率的方法是2 << 3。