本文轉自JAVA知音。
1、一個".java"源文件中是否可以包括多個類(不是內部類)?有什么限制?
可以有多個類,但只能有一個public的類,并且public的類名必須與文件名相一致。
2、Java有沒有goto?
java中的保留字,現在沒有在java中使用。l
3、說說&和&&的區別。
&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。
&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式,例如,對于if(str!=
null&& !str.equals(s))表達式,當str為null時,后面的表達式不會執行,所以不會出現NullPointerException如果將&&改為&,則會拋出NullPointerException異常。If(x==33
&++y>0) y會增長,If(x==33 && ++y>0)不會增長
&還可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作,我們通常使用0x0f來與一個整數進行&運算,來獲取該整數的最低4個bit位,例如,0x31 & 0x0f的結果為0x01。
4、在JAVA中如何跳出當前的多重嵌套循環?
在Java中,要想跳出多重循環,可以在外面的循環語句前定義一個標號,然后在里層循環體的代碼中使用帶有標號的break語句,即可跳出外層循環。
例如:
for(int i=0;i<10;i++){
for(intj=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
for(intj=0;j
System.out.println(“i=”
+ i + “,j=” + j);
if(arr[i][j] ==5)
{
found =true;
break;
}
}
}
5、switch語句能否作用在byte上,能否作用在long上,能否作用在String上?
在switch(e)中,e只能是一個整數表達式或者枚舉常量(更大字體),整數表達式可以是int基本類型或Integer包裝類型,由于byte,short,char都可以隱含轉換為int,所以,這些類型以及這些類型的包裝類型也是可以的。顯然,long和String類型都不符合switch的語法規定,并且不能被隱式轉換成int類型,所以,它們不能作用于swtich語句中。
6、short s1= 1; s1 = (s1+1是int類型,而等號左邊的是short類型,所以需要強轉)1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?(沒有錯)
對于short s1= 1; s1 = s1 + 1;由于s1+1運算時會自動提升表達式的類型,所以結果是int型,再賦值給short類型s1時,編譯器將報告需要強制轉換類型的錯誤。
對于short s1= 1; s1 += 1;由于 +=是java語言規定的運算符,java編譯器會對它進行特殊處理,因此可以正確編譯。
7、char型變量中能不能存貯一個中文漢字?為什么?
char型變量是用來存儲Unicode編碼的字符的,unicode編碼字符集中包含了漢字,所以,char型變量中當然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字符集中,那么,這個char型變量中就不能存儲這個特殊漢字。補充說明:unicode編碼占用兩個字節,所以,char類型的變量也是占用兩個字節。
8、用最有效率的方法算出2乘以8等於幾?
2<<
3,(左移三位)因為將一個數左移n位,就相當于乘以了2的n次方,那么,一個數乘以8只要將其左移3位即可,而位運算cpu直接支持的,效率最高,所以,2乘以8等於幾的最效率的方法是2<< 3。
9、使用final關鍵字修飾一個變量時,是引用不能變,還是引用的對象不能變?
使用final關鍵字修飾一個變量時,是指引用變量不能變,引用變量所指向的對象中的內容還是可以改變的。例如,對于如下語句:
finalStringBuffer a=new
StringBuffer("immutable");執行如下語句將報告編譯期錯誤:
a=new StringBuffer("");但是,執行如下語句則可以通過編譯:
a.append(" broken!");
有人在定義方法的參數時,可能想采用如下形式來阻止方法內部修改傳進來的參數對象:
public void method(final StringBuffer
param){
}
實際上,這是辦不到的,在該方法內部仍然可以增加如下代碼來修改參數對象:
param.append("a");
10,靜態變量和實例變量的區別?
在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。
在程序運行時的區別:實例變量屬于某個對象的屬性,必須創建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量就可以被使用了。總之,實例變量必須創建對象后才可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。
例如,對于下面的程序,無論創建多少個實例對象,永遠都只分配了一個staticVar變量,并且每創建一個實例對象,這個staticVar就會加1;但是,每創建一個實例對象,就會分配一個instanceVar,即可能分配多個instanceVar,并且每個instanceVar的值都只自加了1次。
public class VariantTest{
publicstatic int staticVar = 0;
publicint instanceVar = 0;
publicVariantTest(){
staticVar++;
instanceVar++;
System.out.println(staticVar
+instanceVar);
}
}
好了同學們,我能介紹的也都全部介紹完給你們了,以上的部分就是我想說的內容,如果你也想在IT行業拿高薪,可以參加我們的JAVA全棧晉階訓練營課程,選擇最適合自己的課程學習,技術大牛親授,7個月后,進入名企拿高薪。我們的課程內容有:反射原理、枚舉原理與應用、注解原理、常用設計模式、正規表達式高級應用、JAVA操作Office原理詳解、JAVA圖像處理技術,等多個知識點的詳解和實戰。如果你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優勢的,想進阿里面試但擔心面試不過的,你都可以來,群:240448376注:加群要求
1、具有1-3工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加。
2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。
3、如果沒有工作經驗,但基礎非常扎實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加。
4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。
5.阿里Java高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!
6.小號或者小白之類加群一律不給過,謝謝。
最后,每一位讀到這里的網友,感謝你們能耐心地看完。覺得對你有幫助可以給個喜歡!希望在成為一名更優秀的Java程序員的道路上,我們可以一起學習、一起進步