java面試題,java試題
1、一個".java"源檔案中是否可以包括多個類(不是內部類)?有什麼限制?
答:可以,但是只能有一個public類 而且如果有public類的話,這個檔案的名字要和這個類的名字一樣。
2、Java有沒有goto?
答:java中的保留字,現在沒有在java中使用
3、說說&和&&的區別?
答:&和&&都可以用作邏輯與的運算子,表示邏輯與(and),當運算子兩邊的運算式的結果都為true時,整個運算結果才為true,只要一方為false,結果為false
&&還具有短路的功能,即如果第一個運算式為false,則不再計算第二個運算式,例如,對於if(str!=null&&!str.equal(""))運算式,當str為null時,後面運算式不執行,所以不會出現NullPointerEeception如果將&&改為&,則會拋出NullPointerEeception異常。if(x==3&++y>0)y會增長 如果是&&不會增長
&還可以用作運算子,當&操作符兩邊的運算式不是boolean類型時,&表示按位與操作,通常使用0x0f來與一個整數進行&運算,來擷取該整數的最低4個bit位,例如,0x31&0x0f的結果為0x01
兩者既有共同點,又各有特殊之處 如上述例子
4、在JAVA中如何跳出當前的多重嵌套迴圈?
答:在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,2},{2,2,5},{4,4}};
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隻能是一個整數運算式或者枚舉常量(更大字型),整數運算式可以是int基本類型或Integer封裝類型,由於,byte,short,char都可以隱含轉換為int,所以,這些類型以及這些類型的封裝類型也是可以的。顯然,long和String類型都不符合switch的文法規定,並且不能被隱式轉換成int類型,所以,它們不能作用於swtich語句中。
6、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編譯器會對它進行特殊處理,因此可以正確編譯。
7、char型變數中能不能存貯一個中文漢字?為什麼?
答:不能
char 只佔一個位元組。
漢字通常是兩個位元組來表示,可以使用char數組來表示漢字。
例如
char a[5]="你"
8、用最有效率的方法算出2乘以8等於幾?
答:用移位法2 左移3位 就是乘以8
9、請設計一個一百億的計算機
答:
10、使用final關鍵字修飾一個變數時,是引用不能變,還是引用的對象不能變?
答:
使用final關鍵字修飾一個變數時,是指引用變數不能變,引用變數所指向的對象中的內容還是可以改變的。例如,對於如下語句:
final StringBuffer a=new StringBuffer("immutable");
執行如下語句將報告編譯期錯誤:
a=new StringBuffer("");
但是,執行如下語句則可以通過編譯:
a.append(" broken!");
有人在定義方法的參數時,可能想採用如下形式來阻止方法內部修改傳進來的參數對象:
public void method(final StringBuffer param)
{
}
實際上,這是辦不到的,在該方法內部仍然可以增加如下代碼來修改參數對象:
param.append("a");
11、"=="和equals方法究竟有什麼區別?
答:==確實比較的是引用,equals比較的是引用指向的內容
12、靜態變數和執行個體變數的區別?
答:靜態變數有static 區別在於類變數和執行個體變數的區別是類變數是所有對象共有,其中一個對象將他值改變,其他對象得到的就是改變後的結果,而執行個體變數則屬於對象私人,某一個對象將其值改變,不影響其他對象.
13、是否可以從一個static方法內部發出對非static方法的調用?
不行,
可以這樣理解
static修飾的方法可以直接用類名調用
非static修飾的方法必須用類new出對象才能調用
當我們用類名直接調用時,可能這個類的對象並沒有new。
如果這時候static方法裡調用非static的方法就會出現null 指標異常,
當然這種錯誤編譯時間就不會通過
14、Integer與int的區別
答:Integer 是對象,定義的變數是對Integer對象地址的引用,==比較的是對象在記憶體中的物理地址。所以不等。
int定義的變數就是值的引用。(範圍為正負2^31)
15、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?
答:Math.round()是四捨五入的函數,所以Math.round(11.5)是12, Math.round(-11.5)是-11
16、下面的代碼有什麼不妥之處?
答:
17、請說出範圍public,private,protected,以及不寫時的區別
答:區別如下:
範圍 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時預設為friendly
18、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
答:方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
19、構造器Constructor是否可被override?
答:構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading
20、介面是否可繼承介面?抽象類別是否可實現(implements)介面?抽象類別是否可繼承具體類(concreteclass)?抽象類別中是否可以有靜態main方法?
答:1.介面可以繼承介面..但是要使用extends~而不是用implements如:interface a{}interface b extends a{}
2.抽象類別可以實現介面..比如java.util中的AbstractCollection類就是實現的Collection介面
3.抽象類別可以繼承實體類下面這段執行無誤的代碼說明的所有的問題:interface MyInterface {}interface AnotherInterface extends MyInterface {}class EntityClass {}abstract class AbstractClass extends EntityClass implements MyInterface {}
main方法都是靜態,抽象類別中的方法可以為抽象方法,也可以為具體的方法。
21、寫clone()方法時,通常都有一行代碼,是什嗎?
答:clone 有預設行為,super.clone();因為首先要把父類中的成員複製到位,然後才是複製自己的成員。
22、物件導向的特徵有哪些方面
答:封裝,繼承,多態
23、java中實現多態的機制是什嗎?
答:靠的是父類或介面定義的引用變數可以指向子類或具體實作類別的執行個體對象,而程式調用的方法在運行期才動態綁定,就是引用變數所指向的具體執行個體對象的方法,也就是記憶體裡正在啟動並執行那個對象的方法,而不是引用變數的類型中定義的方法。
25、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
答:abstract的method 不可以是static的,因為抽象的方法是要被子類實現的,而static與子類扯不上關係!
native方法表示該方法要用另外一種依賴平台的程式設計語言實現的,不存在著被子類實現的問題,所以,它也不能是抽象的,不能與abstract混用。
java面試題以什方式出
不止Java,IT技術類的面試流程幾乎都是一樣的。
1、筆試
筆試是在第一次去面試時,大多數公司都會給你提供一份筆試題目。
這份筆試題可能來源於網路,也可能是公司的技術人員修改過的題目,不過原本都是網路上的題目。
2、機試(中小公司很少機試)
機試一般都是在筆試之後,如果你看到別人去機試了,你卻被告知要回家等通知,那基本上就沒戲了。機試的內容通常都是要你簡單的搭一個環境,然後做一個登入/增刪改查中的任意一項。
你可以帶上自己的隨身碟,加快時間,但是如果機試的電腦U口被屏蔽了就悲劇了~
3、面談
面談是最關鍵的一步,可以說只要到了這一步,你前面的面試成績就不會有什麼作用了。面談完全可以決定你去留,哪怕你之前的環節表現不好也沒關係。面試官會拿你的簡曆問你一些你的個人資訊以及項目經驗,最關鍵的就是項目上的講述了,如果忽悠的好,基本上當場就拍板了,但是切記,簡曆上不要有太多自己不會的,不然一問三不知,之前表現再好,也被刷了
對於一道java面試題的答案
系統出現的一個 字串常量 系統自動建立一個String 對象
也就是你只要出現了 "aaaaa" 的形式 就已經建立對象了
然後你new語句 就相當於是照著已經存在的對象 再建立一個對象
所以為了節省空間的 你可以寫成String s="aaaaaaaa" ;
這樣就只有一個對象了