JAVA基礎理解(四)

1.深拷貝和淺拷貝的區別是什麼?

淺拷貝:被複制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,淺拷貝僅僅複製所考慮的對象,而不復制它所引用的對象。

深拷貝:被複制對象的所有變量都含有與原來的對象相同的值,而那些引用其他對象的變量將指向被複制過的新對象。而不再是原有的那些被引用的對象。換言之。深拷貝把要複製的對象所引用的對象都複製了一遍。

2.String是基本數據類型嗎?

基本數據類型包括:

  • byte short int long char boolean float double

    java.lang.String 類 是final 類型的,因此不可以繼承這個類、不能修改這個類。爲了提高效率節省空間,我們應該用StringBuffer類

3.static的用法

Static 可以修飾內部類、方法、變量、代碼塊

Static 修飾的類是靜態內部類

Static 修飾的方法是靜態方法,表示該方法屬於當前類的,而不是屬於某個對象的,靜態方法不能被重寫,可以直接使用類名來調用。在static方法中不能使用this或者super關鍵字。

Static修飾變量是靜態變量或者叫類變量,靜態變量被所有實例所共享,不會依賴於對象。靜態變量在內存中只有一份拷貝,在JVM加載類時,只爲靜態分配一次內存。

Static修飾的代碼塊叫靜態代碼塊,通常用來做程序優化的,靜態代碼塊中的代碼在整個類加載時候只會執行一次。靜態代碼塊可以有多個,如果有多個,按照先後順序依次執行。

4.什麼是值傳遞和引用傳遞

對象被值傳遞,意味着傳遞了對象的一個副本,因此,就算是改變了對象副本,也不會影響源對象的值。

對象被引用傳遞,意味着傳遞的並不是實際的對象,而是對象的引用,外部對應用對象所做的改變會反映到所有對象上。

5.重載和重寫的區別

方法的重載Overloading與重寫Overriding是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們就說該方法被重寫(Overriding)。子類對象使用這個方法時,將調用子類的定義,對它而言,父類中的定義如同被屏蔽了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱爲方法的重載(Overloading)。

6.成員變量和局部變量的區別有哪些

1、從語法形式上看,成員變量是屬於類的,局部變量是在方法中定義的變量或是方法的參數;成員變量可以被public、private、static等修飾符修飾,而局部變量不能被訪問控制修飾符以及static修飾;成員變量和局部變量都能被final所修飾。

2、從變量在內存中存儲方式來看,成員變量是對象的一部分,而對象存在於堆內存,局部變量存在於棧內存。

3、從變量在內存中的生存時間上看,成員變量是對象的一部分,它隨着對象的創建而存在,而局部變量隨着方法的調用而自動消失。

4、成員變量如果沒有被賦初值,則會自動以類型的默認值而賦值(一種情況例外被final修飾但沒有被static修飾的成員變量必須顯示地賦值);而局部變量則不會自動賦值。

7.靜態方法和實例方法有何不同

靜態方法和實例方法的區別主要體現在兩個方面:

1、在外部調用靜態方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實例方法只有後面這種方式,也就是說,調用靜態方法可以無需創建對象。

2、靜態方法在訪問本類的成員時候,只允許訪問靜態成員(即靜態成員和靜態方法),而不允許訪問實例成員變量和實例方法;實例方法則無此限制。

8.什麼是多態?

允許不同類對象對同一消息做出響應。即同一消息可以根據發送對象的不同而採用多種不同的行爲方式。(發送消息就是函數調用)

9.多態的優點?

可替換性(substitutability)。多態對已存在代碼具有可替換性。例如,多態對圓Circle類工作,對其他任何圓形集合體,如圓環,也同樣工作。

可擴充性(extensibility)。多態對代碼具有可擴充性。增加新的子類不影響已經存在類的多態性、繼承性,一級其他特性的運行和操作,實際上新加子類更容易獲得多態功能。

10.多態存在的三個必要條件?

1、要有繼承

2、要有方法的重寫

3、父類引用指向子類對象(對於父類中定義的方法,如果子類中重寫了該方法,那麼父類類型的引用將會調用子類中的這個方法,這就是動態鏈接)

11.TreeMap、HashMap、LinkedHashMap的區別

LinkedHashMap 可以保證HashMap集合的有序。存入的順序和取出的順序一致。TreeMap實現了SortMap接口,能夠把它保存的記錄根據鍵排序,默認是按鍵值的升序排序的,也可以指定排序的比較器,當用Iterator遍歷TreeMap時,得到的記錄是排序過的。HashMap,不保證順序,即無序,具有很快的訪問速度,HashMap最多隻允許一條記錄的鍵爲null;允許多條記錄的值爲Null;HashMap不支持線程的同步。

12.Java(OOP)面向對象的特徵有哪些方面?

1)抽象:抽象是將一類對象的共同特徵總結出來構造類的過程,包括數據抽象和行爲抽象兩方面。抽象只關注對象有哪些屬性和行爲,並不關注這些行爲和細節是什麼。

2)繼承:繼承是從已有類得到繼承創建新類的過程。提供繼承信息的類被稱爲父類(超類、基類);得到繼承信息的類被稱爲子類(派生類)。繼承讓變化中的軟件系統有了一定的延續性,同時繼承也是封裝程序中可變因素的重要手段。

3)封裝:通常認爲封裝是把數據和操作數據的方法綁定起來,對數據的訪問只能通過已定義的接口。面相對象的本質就是將現實世界描繪成一系列完全自治、封閉的對象。我們在類中編寫的方法就是對實現細節的一種封裝;我們編寫一個類就是對數據和數據操作的封裝,可以說,封裝就是隱藏一切可隱藏的東西,指向外界提供最簡單的編程接口。

4)多態性:多態性是指允許不同子類型的對象對同一消息做出不同的響應。簡單的說就是用同樣的對象引用調用同樣的方法但是做了不同的事情。多態性分爲編譯時的多態的運行時多態性。如果將對象的方法視爲對象向外界提供的服務,那麼運行時多態性可以解釋爲:當A系統訪問B系統提供的服務時,B系統有多重提供服務的方式,但一切對A系統來說都是透明的。方法重載(Overload)實現的是編譯時的多態性(也稱爲前綁定),而方法重寫(override)實現的是運行時的多態性(也稱爲後綁定)。運行時的多態是面相對象最精髓的東西,要實現多態需要做兩件事:1.方法重寫(子類繼承父類並重寫父類中已有的或抽象的方法);2.對象造型(用父類引用應用子類型對象,這樣的引用調用同樣的方法就會根據子類對象的不同而表現出不同的行爲。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章