【面試虐菜】—— JAVA面試題(2)


前篇推薦:http://www.cnblogs.com/xing901022/p/3975626.html

1 String = 與 new 的不同

使用“=”賦值不一定每次都創建一個新的字符串,而是從“字符串實例池”中查找字符串。使用“new”進行賦值,則每次都創建一個新的字符串

 

2 String與StringBuffer

String類是不可變類,字符串一旦初始化后,就不能被改變。而StringBuffer類是可變類,字符串值可以唄改變。常常在實際應用中看到累死這樣的代碼:String s=new(“hello”);s+=”world”,這兩句代碼首先創建一個字符hello,然后將world追加到hello結尾並重新賦值給變量s。然后,這個過程實際上是這樣的:首先創建一個StringBuffer對象,然后用StringBuffer類的append方法追加字符串,最后對StringBuffer對象調用toString方法合成字符串返回。可見,使用+號連接字符串時,本質上是使用了可變的StringBuffer類,經變動肯定性能效率受到影響,所以建議需要追加字符串時,可以考慮直接使用StringBuffer類。參考答案:String類是不可變類,即字符串值一旦初始化后就不可能改變。StringBuffer是可變字符串類,類似String的緩沖區,可以修改字符串的值

 

3 StringBuffer 與 StringBiulder的區別

StringBuffer是線程安全的字符串緩沖,而StringBuilder不是線程安全的。

 

4 包裝器類型?

包裝類器包括Byte、Short、Integer、Long、Float、Double、Character、Boolean等類,主要用來對byte、short、integer、long、float、double、character、boolean這八種基本數據類型進行包裝,使其稱為引用類型。

 

5 JAVA參數傳遞

解析:值傳遞時編寫應用時不可避免的操作。例如某方法聲明形式是public void f(int x){},寫方法是,必須為其傳遞一個int類型的實際參數,如f(10)。又如public  void g(Employee)。那么使用該方法時,必須為其傳遞一個Employee類型的實際參數,例如g(new Employee())。所以,對於初級程序員來說,了解Java語言的值傳遞規則非常重要。Java語言是本類型傳遞的值,例如f(10),僅僅把10復制給形式參數x,是值的拷貝。而引用類的傳遞時引用,即虛地址,例如g(new Employee())是把實際參數的虛地址傳遞給形式參數e,也就是說實際參數和形式參數的虛地址相同,物理上是同一個對象。參考答案:基本數據類型傳遞的是值,引用類型傳遞的是引用,即虛地址。

 

6 static修飾屬性或者方法

static修飾屬性或方法后,屬性和方法不在屬於某個特定的對象,而是所有共享,也可以說是static成員不依賴某個對象,在類加載時就被初始化。Static修飾的屬性或方法,可以直接使用類名調用,而不用先實例化對象再調用。 

 

7 == 操作符的作用

解析:實際編程中,==是非常常用的操作符。很多初級程序員會使用這樣的代碼if(s==”save”0{},結果會發現,即使當字符串s的值為save時,if條件依然不能被執行。是==在比較引用類型時,比較的是兩個對象的虛地址,而不是內容。要比較兩個對象的內容是否相同,往往需要使用equal方法,例如if(s.equals(“save”)){}。==比較基本類型時,將比值的二進制是否相等,例如(x==0.5){}。值得注意的是,與空指針null值進行比較,往往用==進行,例如if(s==null||s.equals(“”)),表示如果字符串是空指針或者空串。 參考答案:==可以用來比較基本類型或者引用類型。比較基本類型時,==用來比較二進制的值,比較引用類型時,用來比較對象的虛地址。

 

8 && 與 & 的不同

解析:實際編程中,常常需要使用“與”或者“或”的邏輯。其中&&和&存在一定區別&&可能發生各路問題,例如if(s!=null&&s.length()==6)中,如果要的值為null,那么第一表達式的值為false,返回值肯定是false,不會計算第二個表達式的值,這就是短路。然而使用&,例如if(s!=null&s.length()==6),假設s的值為,null,返回值肯定是false,但是會判斷第二個表達式的值,將發生空指針異常。實際工作中,經常使用&&操作符。 
參考答案:&&會發生短路問題,當第一個表達式的值為false時,將直接返回結果為false而不會判斷第二個表達式的值。而&不會發生短路問題,即使第一個表達式的值是false,會判斷第二個表達式的值

 

9 依賴 與 關聯 的關系

解析:關聯關系和依賴關系是非常常見的兩種關系,二者的區別也很明顯,程序員了解二者的區別能夠更深入的理解面向對象的思想。 
參考答案:依賴關系是一種瞬時關系,A依賴B,指的是A的某個行為的參數是B的類型,也就是說,A要想實現這個行為,必須依賴B的實例,A關聯B,是一種長久的關系。B作為A的屬性存在,只要實例化一個A的對象,就會為這個A的對象實例化一個B的對象,作為它的屬性使用,可以在A中任何需要使用B的地方使用B。 

 

10 JAVA的繼承

解析:繼承是面向對象語言的一大特征,主要作用是重復使用,子類通過繼承父類,能夠重復使用父類的屬性和方法。指的注意的是,有兩個策略都可使實現重復使用,一個是關聯,一個是繼承,實際編程中,關聯用的更多。因為子類繼承父類后,相當於父類中的細節將暴露給子類。初級程序員一定不要隨意使用繼承,避免濫用繼承。 參考答案:繼承主要為了能夠重復使用父類中的成員。Java語言中的繼承是單繼承,也就是說一個類最多只能繼承一個父類。 

 

11 super的作用

解析:使用一些IDE生成代碼時,常常會在構造方法中見到super這個關鍵字。顧名思義,super是和父類有關的一個關鍵字,熟悉super的用法對熟練掌握繼承很有必要。 

參考答案:如super():表示調用父類中的每一參考的構造方法:又如super(10);表示調用父類中的具有一個整型參數的構造方法。第二種用法是在子類中調用父類中的成員,如super.f();意思是調用父類中的f()方法。

 

12 final的作用

final修飾符是一個用途非常廣泛的修飾符,可以修飾類,方法,以及屬性。 

參考答案:final類是不能夠被繼承的類,稱為終極類,如String類就是final類,不能有子類。final修飾方法后,是終極方法,不能被子類覆蓋,但是可以被子類繼承使用。final類不能被繼承,final方法不能被覆蓋,final屬性不能被改變

 

13 object類的作用,都有什么方法。

解析:Object類是一個非常重要的類,是所有類的父類,包括數組在內,也就是對一個Java類,不管是API中定義的,還是自定義的類,都直接或間接的繼承了Object類。所以,如果有一個方法f(Object o),那么可以傳遞給這個方法任意一個類的對象,包括%%%%。因為所有對象都可以說是Object類型。 
參考答案:Object類是多有類的直接或間接的父類

常用方法:toString()  equals finalize()

 

14 Object類的equals與hashcode方法

解析:在Object類中,equals方法比較對象的引用值,也就是只有物理上是同一對象的兩個引用,在使用equals方法返回true。hashCode方法返回一個對象的內在地址的十六進制值。由於Object類是所有類的父類,所以任意類中都擁有這兩個方法,並都可以進行覆蓋。尤其是操作Set,Map對象時集合元素類的equals方法和hashCode方法非常必要,因為Set和Map判斷元素是否重%%%是依靠這兩個方法進行。一般的原則是:如果存在X和Y兩個對象,調用X.equals(Y)相同時,那么調用hashCode方法返回值也應該相同;如果X.equals(Y)返回false時,那么調用hashCode方法返回值可能相同,也可能不同。值得注意的是,只要你覆蓋了equals方法,一定%%%則覆蓋hashCode 方法。在實際工作中,很多IDE環境都支持覆蓋equals和hashCode 方法。 

參考答案:Oject類中的equals方法用來比較兩個引用值,hashCode用來返回引用的內地址的十六進制數值。在Set以及Map集合中,判斷兩個元素是否重復時,往往需要使用這兩個方法。這兩個方法往往被子類覆蓋,覆蓋的規則是:如果存在x和y兩個對象,調用x.equals(y)返回true時,那么調用hashCode方法的返回值也該相同;如果x.equals(y)返回false時,那么調用hashCode方法返回的值可能相同,也可能不同。

 

15 接口與抽象類

解析:接近歐的概念是一個設計層面的概念,初級程序員往往不會自己定義接口,但是會使用接口,理解接口的概念非常必要。接口定義了實現類的規范,即what to do的部分,所有實現類必須按照這個規范進行實現。 
參考答案:接口的特點是不能定義變量(只能定義靜態常量static final 修飾,博友說JDK8已經修正,這個沒有嘗試,期待參考),而且所有方法都是抽象方法。而抽象類中可以有變量,也不強制必須有抽象方法

 

16 類的繼承與接口的實現

解析:類繼承父類與類實現接口,本質上其實是一樣的。都是將父類或者接口作為模板,在這個模板上進行擴展或者重寫。程序員在實際編程中,常常需要繼承父類或者實現接口。 
參考答案:類繼承父類只是單繼承,也就是一個子類最多只有一個父類;而類實現接口可以多實現,就是一個子類可以同時實現多個接口,並覆蓋所有接口中的所有抽象方法。

 

17 comparable接口的作用

解析:comparable接口是在實際編程中常常使用的接口,該接口定義了comareTo(Object o)方法,用來定義對象的比較邏輯。這個接口常常在其他API中會強制使用,例如Arrays類的sort(Object[])方法,就強制數組元素必須實現Comparable接口,與這個接口類似的 另外一個接口是Comparator。  
參考答案:Comparable接口定義了compareTo(Object o)方法,可以用來實現對象的比較邏輯,這個接口常常在其他API中強制使用,用來規范對象的比較邏輯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM