java基礎面試(一),java基礎面試

來源:互聯網
上載者:User

java基礎面試(一),java基礎面試

1、使用final關鍵詞修飾一個變數時,是引用不能變,還是引用的變數不能變?

   使用final關鍵字修飾一個變數時,是指引用變數不能變,引用變數所指向的對象中的內容還是可以改變的。例如,對於如下語句:final StringBuffer a=new StringBuffer("immutable");

執行如下語句將報告編譯錯誤:a=new StringBuffer("");

但是執行如下則可以通過編譯:a.append("lallaal");

有人在定義方法的參數時,可能想採用如下形式來阻止方法內部修改傳進來的參數對象:

public void method(final StringBuffer param){},實際上,這是辦不到的,該方法在內部依舊可以修改對象參數。

2、靜態變數和執行個體變數的區別?

   在文法定義上的區別:靜態變數需要static修飾,而執行個體變數則不需要。

   在程式運行時的區別:執行個體變數屬於某個對象的屬性,必須建立了執行個體對象,其中的是合理變數才會被分配空間,才能使用這個執行個體變數。靜態變數不屬於某個執行個體對象,而是屬於類,也稱為類變數,只要程式載入了類的位元組碼,不用建立任何執行個體對象,靜態變數就會被分配記憶體空間,靜態變數就可以被使用。總之,執行個體變數必須建立對象後才可以通過這個對象使用,靜態變數則可以直接使類名引用。

3、是否可以從一個static方法內部發出對非static方法的調用?

  不可以,因為非static方法是要和被建立對象關聯在一起的, 必須建立一個對象 後才可對非靜態方法調用,而static方法調用時不需要建立對象,可以直接調用。也就是說,當一個靜態方法被調用的時候,可能還沒建立任何執行個體對象,如果從static方法中發出對非static方法的調用,那非static方法無法確認是關聯到哪一個對象上。所以答案是不可以。

4、Integer和int的區別

   int是java提供的8中未經處理資料類型之一。java為每一個未經處理資料類型提供了封裝類。Integer就是int的封裝類。int預設值為0,Integer預設值為null。前者無法表達出未賦值的狀態,後者可以區分。

5、Overload和Override的區別?Overloaded的方法是否可以改變傳回值的類型?

  Overload是重載,Overrid是覆蓋,也就是方法的重寫。

  overload表示同一個類中可以有多個名稱相同的方法,但是這些方法的參數列表各不相同(參數個數或參數類型不同)。

  重寫Override表示子類中的方法可以與父類中某個方法的名稱和參數完全相同,通過子類建立執行個體對象調用這個方式時,將調用子類中定義的方法,這相當於把父類中定義的方法完全覆蓋掉(這也是java多態一種體現)。子類覆蓋父類的方法時,只能比父類拋出更少的異常,或者比拋出父類異常的子類,因為子類可以解決父類的一些問題,不能比父類有更多的問題。子類方法的許可權只能比父類更大,不能更小。如果父類中的方法時private修飾,子類則不存在覆蓋限制,相當於子類增加了一個全新的方法。

  至於Overloaded的方法是否可以改變傳回值的類型這個問題,要看你倒底想問什麼呢?這個題目很模糊。如果幾個Overloaded的方法的參數列表不一樣,它們的返回者類型當然也可以不一樣。但我估計你想問的問題是:如果兩個方法的參數列表完全一樣,是否可以讓它們的傳回值不同來實現重載Overload。這是不行的,我們可以用反證法來說明這個問題,因為我們有時候調用一個方法時也可以不定義返回結果變數,即不要關心其返回結果,例如,我們調用map.remove(key)方法時,雖然remove方法有傳回值,但是我們通常都不會定義接收返回結果的變數,這時候假設該類中有兩個名稱和參數列表完全相同的方法,僅僅是傳回型別不同,java就無法確定編程者倒底是想調用哪個方法了,因為它無法通過返回結果類型來判斷。

  覆蓋需要注意一下幾點:

  a、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全符合,才能達到覆蓋的效果;

  b、覆蓋的方法的傳回值必須和被覆蓋的方法的返回一致;

  c、覆蓋的方法所拋出的異常必須和被覆蓋方法所拋出的異常一致,或者是其子類;

  d、被覆蓋的方法不能是被private修飾的方法,否則在其子類中只是定義了一個名字相同的新方法;

  Overload需要注意的幾點:

  

  1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));

        2、不能通過存取權限、傳回型別、拋出的異常進行重載;

        3、方法的異常類型和數目不會對重載造成影響;

6、abstractclass和interface文法上有什麼區別?

  1.抽象類別可以有構造方法,介面中不能有構造方法。

  2.抽象類別中可以有普通成員變數,介面中沒有普通成員變數

  3.抽象類別中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。

  4. 抽象類別中的抽象方法的訪問類型可以是public,protected和(預設類型,雖然

  eclipse下不報錯,但應該也不行),但介面中的抽象方法只能是public類型的,並且預設即為public abstract類型。

  5. 抽象類別中可以包含靜態方法,介面中不能包含靜態方法

  6. 抽象類別和介面中都可以包含靜態成員變數,抽象類別中的靜態成員變數的訪問類型可以任意,但介面中定義的變數只能是publicstatic final類型,並且預設即為publicstatic final類型。

  7. 一個類可以實現多個介面,但只能繼承一個抽象類別。

7、String、StringBuffer、StringBuilder的區別?

  String字串常量(final修飾,不可被繼承),String是常量,當建立之後即不可更改。

  StringBuffer字串變數,安全執行緒,也是final修飾,不允許被繼承,其中的絕大數方法都進行了同步處理,包括常用的appen方法也進行了同步處理(Synchronized),其toString方法會進行對象緩衝,以減少元素的開銷。

1 public synchronized String toString() { 2 if (toStringCache == null) { 3 toStringCache = Arrays.copyOfRange(value, 0, count); 4 } 5 return new String(toStringCache, true); 6 }

  StringBuilder字串變數(非安全執行緒的)與StringBuffer一樣都繼承和實現了相同的介面和類,方法除了沒有進行同步處理(synchronize)以外基本一致,不同之處在於toString方法會返回一個對象

1 public String toString() { 2 // Create a copy, don’t share the array 3 return new String(value, 0, count); 4 }

8、ArrayList和LinkedList有什麼區別?

  兩者都實現了list的介面,主要不同之處:

  1、ArrayList是基於索引的資料介面,它的底層是數組,可以以O(1)的時間複雜度對元素進行隨機訪問,LinkedList是以元素列表的形式儲存它的資料,每一行元素否和它的前一個和後一個元素串連在一起,這種情況下尋找的複雜度為O(n)。

  2、相對ArrayList,LinkedList的插入、添加和刪除操作的速度快,因為元素被添加到集合中的任意位置是,不需要想數組那樣重新計算大小或者更新索引。

  3、LinkedList比ArrayList更占記憶體,因為LinkedList為每一個節點儲存了兩個引用個,一個指向前一個元素,一個指向後一個元素。

9、講講類的執行個體化順序,比如父類待用資料,建構函式,欄位,子類待用資料,建構函式,欄位,當 new 的時候, 他們的執行順序

父類的靜態變數-->父類的靜態程式碼片段-->子類的靜態變數-->子類的靜態程式碼片段-->父類的非靜態變數-->父類的建構函式-->子類的非靜態變數-->子類的建構函式。

10、

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.