金3銀4準跳槽須知:來一波50道Java程序員編程基礎(chǔ)面試題(含答案)

Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。

給你java學(xué)習路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

1、面向?qū)ο蟮奶卣饔心男┓矫? 【基礎(chǔ)】

答:面向?qū)ο蟮奶卣髦饕幸韵聨讉€方面:

1)抽象:抽象就是忽略一個主題中與當前目標無關(guān)的那些方面,以便更充分地注意與當前目標有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節(jié)。抽象包括兩個方面,一是過程抽象,二是數(shù)據(jù)抽象。

2)繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。

3)封裝:封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥嬎闶加谶@個基本概念,即現(xiàn)實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。

4)多態(tài)性:多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。

小編推薦一個學(xué)Java的學(xué)習裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

2、作用域public,private,protected,以及不寫時的區(qū)別?【基礎(chǔ)】

答:區(qū)別如下:

作用域當前類同包子孫類其他

public √ √ √ √

protected √ √ √ ×

default √ √ × ×

private √ × × ×

不寫時默認為default。

3、String是最基本的數(shù)據(jù)類型嗎? 【基礎(chǔ)】

答:不是。

4、float型float f=3.4是否正確? 【基礎(chǔ)】

答:不正確;精度不準確,應(yīng)該用強制類型轉(zhuǎn)換,如下所示:float f=(float)3.4 。

5、語句float f=1.3;編譯能否通過?【基礎(chǔ)】

答:不能;應(yīng)該用強制類型轉(zhuǎn)換,如下所示:float f=(float)1.3; 。

6、short s1 = 1; s1 = s1 + 1;有什么錯?

short s1 = 1; s1 += 1;有什么錯? 【基礎(chǔ)】

答:short s1 = 1; s1 = s1 + 1;s1+1運算結(jié)果是int型,需要強制轉(zhuǎn)換類型;short s1 = 1; s1 += 1;可以正確編譯,自動類型提升。

7、Java有沒有g(shù)oto? 【基礎(chǔ)】

答:goto是java中的保留字,現(xiàn)在沒有在java中使用。

8、int和Integer有什么區(qū)別? 【基礎(chǔ)】

答:Java提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型);

int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。

Java為每個原始類型提供了封裝類:

原始類型: boolean,char,byte,short,int,long,float,double

封裝類型:Boolean,Character,Byte,Short,Integer,Long,F(xiàn)loat,Double引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當引用類型和原始類型用作某個類的實例數(shù)據(jù)時所指定的缺省值。對象引用實例變量的缺省值為null,而原始類型實例變量的缺省值與它們的類型有關(guān)。

9、&和&&的區(qū)別?【基礎(chǔ)】

答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。

10、簡述邏輯操作(&,|,^)與條件操作(&&,||)的區(qū)別?【基礎(chǔ)】

答:區(qū)別主要有兩點:a.條件操作只能操作布爾型的,而邏輯操作不僅可以操作布爾型,而且可以操作數(shù)值型b.邏輯操作不會產(chǎn)生短路。

11、heap和stack有什么區(qū)別?【基礎(chǔ)】

答:棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成,棧按照后進先出的方式進行處理;堆是棧的一個組成元素。

12、Math.round(11.5)等于多少? Math.round(-11.5)等于多少? 【基礎(chǔ)】

答:Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回與參數(shù)最接近的長整數(shù),參數(shù)加1/2后求其floor。

13、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 【基礎(chǔ)】

答:switch(expr1)中,expr1是一個整數(shù)表達式。因此傳遞給switch和case語句的參數(shù)應(yīng)該是int、short、char或者byte。long,string都不能作用于swtich。

14、編程題:用最有效率的方法算出2乘以8等於幾? 【基礎(chǔ)】

答: 2 << 3。

15、有沒有l(wèi)ength這個方法? String有沒有l(wèi)ength這個方法?【基礎(chǔ)】

答:數(shù)組沒有l(wèi)ength這個方法,有l(wèi)ength的屬性。String有l(wèi)ength這個方法。

16、在JAVA中,如何跳出當前的多重嵌套循環(huán)?【基礎(chǔ)】

答:在最外層循環(huán)前加label標識,然后用break:label方法即可跳出多重循環(huán)。

17、構(gòu)造器Constructor是否可被override? 【基礎(chǔ)】

答:構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。

18、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對? 【基礎(chǔ)】

答:不對,有相同的hash code。

19、是否可以繼承String類? 【基礎(chǔ)】

答:String類是final類,故不可以繼承。

20、以下二條語句返回值為true的有:

A:“beijing”==“beijing”;

B:“beijing”.equalsIgnoreCase(new String(“beijing”));【基礎(chǔ)】

答:A和B 。

21、當一個對象被當作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞? 【基礎(chǔ)】

答:是值傳遞。Java編程語言只有值傳遞參數(shù)。當一個對象實例作為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是對該對象的引用。對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用是永遠不會改變的。

22、我們在web應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?【基礎(chǔ)】

答:public String translate(String str){

String tempStr = "";

try{

tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

tempStr = tempStr.trim;

}catch (Exception e){

System.err.println(e.getMessage);

}

return tempStr;

}

23、String和StringBuffer的區(qū)別? 【基礎(chǔ)】

答:JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數(shù)據(jù)。這個String類提供了數(shù)值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數(shù)據(jù)要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)。

24、String, StringBuffer StringBuilder的區(qū)別。【基礎(chǔ)】

答:String的長度是不可變的;StringBuffer的長度是可變的,如果你對字符串中的內(nèi)容經(jīng)常進行操作,特別是內(nèi)容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString方法;線程安全;StringBuilder是從JDK 5開始,為StringBuffer該類補充了一個單個線程使用的等價類;通常應(yīng)該優(yōu)先使用StringBuilder類,因為它支持所有相同的操作,但由于它不執(zhí)行同步,所以速度更快。

25、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型? 【基礎(chǔ)】

答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。

26、定義類A和類B如下:【基礎(chǔ)】

class A {

int a=1;

double d=2.0;

void show{

System.out.println("Class A: a="+a +" d="+d);

}

}

class B extends A{

float a=3.0f;

String d="Java program.";

void show{

super.show;

System.out.println("Class B: a="+a +" d="+d);

}

}

(1)若在應(yīng)用程序的main方法中有以下語句:

A a=new A;

a.show;

則輸出的結(jié)果如何?

(2)若在應(yīng)用程序的main方法中定義類B的對象b:

A b=new B;

b.show;

則輸出的結(jié)果如何?

答:輸出結(jié)果為:

1)Class A: a=1 d=2.0 ;

2)Class A: a=1 d=2.0

Class B: a=3.0 d=Java program。

27、描述一下JVM加載class文件的原理機制? 【基礎(chǔ)】

答:JVM中類的裝載是由ClassLoader和它的子類來實現(xiàn)的,Java ClassLoader是一個重要的Java運行時系統(tǒng)組件。它負責在運行時查找和裝入類文件的類。

28、char型變量中能不能存貯一個中文漢字?為什么? 【基礎(chǔ)】

答:能夠定義成為一個中文的,因為java中以unicode編碼,一個char占16個字節(jié),所以放一個中文是沒問題的。

29、abstract class和interface有什么區(qū)別? 【基礎(chǔ)】

答:聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),。然而可以創(chuàng)建一個變量,其類型是一個抽象類,它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建abstract類的實例并讓它指向具體子類的一個實例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract類的子類為它們父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類可以在類中實現(xiàn)這些方法。接口(interface)是抽象類的變體。新型多繼承性可通過實現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,所有成員變量都是publicstatic final的。一個類可以實現(xiàn)多個接口,當類實現(xiàn)特殊接口時,它定義(即

將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof運算符可以用來決定某對象的類是否實現(xiàn)了接口。

30、Static Nested Class和Inner Class的不同?【基礎(chǔ)】

答:Static Nested Class是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實例被實例化。而通常的內(nèi)部類需要在外部類實例化后才能實例化。

小編推薦一個學(xué)Java的學(xué)習裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

31、java中會存在內(nèi)存泄漏嗎,請簡單描述?!净A(chǔ)】

答:會;存在無用但可達的對象,這些對象不能被GC回收,導(dǎo)致耗費內(nèi)存資源。

32、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized? 【基礎(chǔ)】

答:都不能。

33、靜態(tài)變量和實例變量的區(qū)別?【基礎(chǔ)】

答:靜態(tài)變量也稱為類變量,歸全類共有,它不依賴于某個對象,可通過類名直接訪問;而實例變量必須依存于某一實例,只能通過對象才能訪問到它。

34、是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用?【基礎(chǔ)】

答:不可以,如果其中包含對象的method,不能保證對象初始化。

35、寫clone方法時,通常都有一行代碼,是什么?【基礎(chǔ)】

答:Clone有缺省行為:super.clone,他負責產(chǎn)生正確大小的空間,并逐位復(fù)制。

36、GC是什么?為什么要有GC? 【基礎(chǔ)】

答:GC是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達到自動回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。Java程序員不用擔心內(nèi)存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調(diào)用下面的方法之一:System.gc或Runtime.getRuntime.gc 。

37、垃圾回收的優(yōu)點和原理。并考慮2種回收機制?!净A(chǔ)】

答:Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內(nèi)存管理。由于有個垃圾回收機制,Java中的對象不再有“作用域”的概念,只有對象的引用才有“作用域”。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調(diào)用垃圾回收器對某個對象或所有對象進行垃圾回收?;厥諜C制有分代復(fù)制垃圾回收和標記垃圾回收,增量垃圾回收。

38、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動通知虛擬機進行垃圾回收?【基礎(chǔ)】

答:對于GC來說,當程序員創(chuàng)建對象時,GC就開始監(jiān)控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當GC確定一些對象為"不可達"時,GC就有責任回收這些內(nèi)存空間。可以。程序員可以手動執(zhí)行System.gc,通知GC運行,但是Java語言規(guī)范并不保證GC一定會執(zhí)行。

39、String s=new String(“xyz”);創(chuàng)建了幾個String Object? 【基礎(chǔ)】

答:兩個對象,一個是"xyx",一個是指向"xyx"的引用對象s。

40、接口是否可繼承接口?抽象類是否可實現(xiàn)(implements)接口?抽象類是否可繼承實體類(concrete class)? 【基礎(chǔ)】

答:接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類可繼承實體類,但前提是實體類必須有明確的構(gòu)造函數(shù)。

41、Java的接口和C++的虛類的相同和不同處?!净A(chǔ)】

答:由于Java不支持多繼承,而有可能某個類或?qū)ο笠褂梅謩e在幾個類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩?,現(xiàn)有的單繼承機制就不能滿足要求。與繼承相比,接口有更高的靈活性,因為接口中沒有任何實現(xiàn)代碼。當一個類實現(xiàn)了接口以后,該類要實現(xiàn)接口里面所有的方法和屬性,并且接口里面的屬性在默認狀態(tài)下面都是public static,所有方法默認情況下是public.一個類可以實現(xiàn)多個接口。

42、一個“.java”源文件中是否可以包含多個類(不是內(nèi)部類)?有什么限制?【基礎(chǔ)】

答:可以;必須只有一個類名與文件名相同。

43、說出一些常用的類,包,接口,請各舉5個?!净A(chǔ)】

答:常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer;

常用的包:java.lang java.awt java.io java.util java.sql;

常用的接口:Remote List Map Document NodeList

44、Anonymous Inner Class (匿名內(nèi)部類)是否可以extends(繼承)其它類?是否可以implements(實現(xiàn))interface(接口)? 【基礎(chǔ)】

答:可以繼承其他類或?qū)崿F(xiàn)其他接口,在swing 編程中常用此方式。

45、內(nèi)部類可以引用他包含類的成員嗎?有沒有什么限制?【基礎(chǔ)】

答:一個內(nèi)部類對象可以訪問創(chuàng)建它的外部類對象的內(nèi)容。

46、java中實現(xiàn)多態(tài)的機制是什么?【基礎(chǔ)】

答:方法的覆蓋Overriding和重載Overloading是java多態(tài)性的不同表現(xiàn);覆蓋Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。

47、在java中一個類被聲明為final類型,表示了什么意思?【基礎(chǔ)】

答:表示該類不能被繼承,是頂級類。

48、下面哪些類可以被繼承? 【基礎(chǔ)】

1)java.lang.Thread (T)

2)java.lang.Number (T)

3)java.lang.Double (F)

4)java.lang.Math (F)

5)java.lang.Void (F)

6)java.lang.Class (F)

7)java.lang.ClassLoader (T)

答:1、2、7可以被繼承。

49、指出下面程序的運行結(jié)果: 【基礎(chǔ)】

class A{

static{

System.out.print("1");

}

public A{

System.out.print("2");

}

}

class B extends A{

static{

System.out.print("a");

}

public B{

System.out.print("b");

}

}

public class Hello{

public static void main(String ars){

A ab = new B; //執(zhí)行到此處,結(jié)果: 1a2b

ab = new B; //執(zhí)行到此處,結(jié)果: 1a2b2b

}

}

答:輸出結(jié)果為1a2b2b;類的static代碼段,可以看作是類首次加載(虛擬機加載)執(zhí)行的代碼,而對于類加載,首先要執(zhí)行其基類的構(gòu)造,再執(zhí)行其本身的構(gòu)造。

50、繼承時候類的執(zhí)行順序問題,一般都是選擇題,問你將會打印出什么?【基礎(chǔ)】

父類:

package test;

public class FatherClass {

public FatherClass {

System.out.println("FatherClass Create");

}

}

子類:

package test;

import test.FatherClass;

public class ChildClass extends FatherClass {

public ChildClass {

System.out.println("ChildClass Create");

}

public static void main(String args) {

FatherClass fc = new FatherClass;

ChildClass cc = new ChildClass;

}

}

小編推薦一個學(xué)Java的學(xué)習裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

答:輸出結(jié)果為:

FatherClass Create

FatherClass Create

ChildClass Create

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容