1. 程式人生 > 其它 >Java基礎知識一

Java基礎知識一

什麼是自動拆裝箱?

裝箱:將基本型別用它們對應的引用型別包裝起來; 拆箱:將包裝型別轉換為基本資料型別;

面向物件和麵向過程的區別 兩者的主要區別在於解決問題的方式不同:

面向過程把解決問題的過程拆成一個個方法,通過一個個方法的執行解決問題。 面向物件會先抽象出物件,然後用物件執行方法的方式解決問題。 另外,面向物件開發的程式一般更易維護、易複用、易擴充套件。

成員變數與區域性變數的區別有哪些? 語法形式 :從語法形式上看,成員變數是屬於類的,而區域性變數是在程式碼塊或方法中定義的變數或是方法的引數;成員變數可以被 public,private,static 等修飾符所修飾,而區域性變數不能被訪問控制修飾符及 static 所修飾;但是,成員變數和區域性變數都能被 final 所修飾。 儲存方式 :從變數在記憶體中的儲存方式來看,如果成員變數是使用 static 修飾的,那麼這個成員變數是屬於類的,如果沒有使用 static 修飾,這個成員變數是屬於例項的。而物件存在於堆記憶體,區域性變數則存在於棧記憶體。 生存時間 :從變數在記憶體中的生存時間上看,成員變數是物件的一部分,它隨著物件的建立而存在,而區域性變數隨著方法的呼叫而自動消失。 預設值 :從變數是否有預設值來看,成員變數如果沒有被賦初始值,則會自動以型別的預設值而賦值(一種情況例外:被 final 修飾的成員變數也必須顯式地賦值),而區域性變數則不會自動賦值。

物件的相等與指向他們的引用相等,兩者有什麼不同? 物件的相等一般比較的是記憶體中存放的內容是否相等。 引用相等一般比較的是他們指向的記憶體地址是否相等。

#一個類的構造方法的作用是什麼? 構造方法是一種特殊的方法,主要作用是完成物件的初始化工作。

#如果一個類沒有宣告構造方法,該程式能正確執行嗎? 如果一個類沒有宣告構造方法,也可以執行!因為一個類即使沒有宣告構造方法也會有預設的不帶引數的構造方法。如果我們自己添加了類的構造方法(無論是否有參),Java 就不會再新增預設的無引數的構造方法了,這時候,就不能直接 new 一個物件而不傳遞引數了,所以我們一直在不知不覺地使用構造方法,這也是為什麼我們在建立物件的時候後面要加一個括號(因為要呼叫無參的構造方法)。如果我們過載了有參的構造方法,記得都要把無參的構造方法也寫出來(無論是否用到),因為這可以幫助我們在建立物件的時候少踩坑。

構造方法有哪些特點?是否可被 override? 構造方法特點如下:

  • 名字與類名相同。
  • 沒有返回值,但不能用 void 宣告建構函式。
  • 生成類的物件時自動執行,無需呼叫。 構造方法不能被 override(重寫),但是可以 overload(過載),所以你可以看到一個類中有多個建構函式的情況。

面向物件的三大特徵:封裝、繼承、多型

封裝: 封裝是指把一個物件的狀態資訊(也就是屬性)隱藏在物件內部,不允許外部物件直接訪問物件的內部資訊。但是可以提供一些可以被外界訪問的方法來操作屬性。

繼承 繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。通過使用繼承,可以快速地建立新的類,可以提高程式碼的重用,程式的可維護性,節省大量建立新類的時間 ,提高我們的開發效率。

多型 多型,顧名思義,表示一個物件具有多種的狀態,具體表現為父類的引用指向子類的例項。

多型的特點:

  • 物件型別和引用型別之間具有繼承(類)/實現(介面)的關係;
  • 引用型別變數發出的方法呼叫的到底是哪個類中的方法,必須在程式執行期間才能確定;
  • 多型不能呼叫“只在子類存在但在父類不存在”的方法;
  • 如果子類重寫了父類的方法,真正執行的是子類覆蓋的方法,如果子類沒有覆蓋父類的方法,執行的是父類的方法。

介面和抽象類有什麼共同點和區別? 共同點 :

都不能被例項化。 都可以包含抽象方法。 都可以有預設實現的方法(Java 8 可以用 default 關鍵在介面中定義預設方法)。

區別 :

口主要用於對類的行為進行約束,你實現了某個介面就具有了對應的行為。抽象類主要用於程式碼複用,強調的是所屬關係(比如說我們抽象了一個傳送簡訊的抽象類,)。 一個類只能繼承一個類,但是可以實現多個介面。 介面中的成員變數只能是 public static final 型別的,不能被修改且必須有初始值,而抽象類的成員變數預設 default,可在子類中被重新定義,也可被重新賦值。

深拷貝和淺拷貝區別瞭解嗎?什麼是引用拷貝? 關於深拷貝和淺拷貝區別,我這裡先給結論:

淺拷貝:淺拷貝會在堆上建立一個新的物件(區別於引用拷貝的一點),不過,如果原物件內部的屬性是引用型別的話,淺拷貝會直接複製內部物件的引用地址,也就是說拷貝物件和原物件共用同一個內部物件。 深拷貝 :深拷貝會完全複製整個物件,包括這個物件所包含的內部物件。