java object... arguments_Java面试之基础题---对象Object
參數傳遞:Java支持兩種數據類型:基本數據類型和引用數據類型。
原始數據類型是一個簡單的數據結構,它只有一個與之相關的值。引用數據類型是一個復雜的數據結構,它表示一個對象。原始數據類型的變量將該值直接存儲在其存儲器地址處。使用對象和引用變量時會有所不同。。Java中的所有參數都通過值傳遞。
當參數是原始是原始數據類型時,實際參數的值將復制到參數。在方法主體中對參數值進行的任何更改只會更改形式參數的副本,而不會更改實際參數的值。當參數通過參考值傳遞時,存儲在實際參數中的參考被復制到形式參數。實際參數和形式參數都指向內存中的相同對象。形式參數可以通過直接更改實例變量的值或通過調用對象上的方法來修改對象。通過形式參數對對象進行任何修改都可以通過實際參數立即可見,因為它們對保存對內存中同一對象的引用。形式參數本身可以被修改以引用方法內的另一個對象。要禁用將引用類型形式參數更改為引用不同對象的方法,在引用類型形式參數聲明中使用關鍵字final。
可變長度參數:(varargs:variable-length arguments),聲明一個接受可變數量的參數的方法或構造函數。聲明可變長度參數,在方法參數的數據類型之后添加一個省略號...,省略號...之前和之后添加空格時可選的??勺冮L度參數方法可以有多個參數,但最多可以有一個可變長度參數??勺冮L度參數方法的可變長度參數必須是參數列表的最后一個,可以使用for循環來處理可變長度參數的參數列表。length屬性給出了可變長度參數傳遞的值的數量。
重載可變長度參數方法
方法重載規則適應于可變長度參數方法??梢允褂每勺冮L度參數重載一個方法,只要方法的參數在連續順序或數字上不同。
Java的關鍵字this。它是對類的當前實例的引用。它只能在實例的上下文使用。當實例變量或類變量被具有相同名稱的另一個變量覆蓋時,需要使用關鍵字this限定一個實例變量,并使用類名稱定義一個類變量。可以使用關鍵字this來限定實例方法名。
final關鍵字不允許修改或替換其原始值或定義??梢栽谝韵氯齻€上下文中使用:變量聲明,類聲明,方法聲明。變量被聲明為final,它只能被賦值一次。final變量的值在設置后不能修改。變量聲明包括局部變量的聲明,方法/構造函數的形式參數,實例變量和類變量。final變量的值只設置一次,它不能被重新賦值。有兩種方法來初始化final變量的值:(1)在聲明時給予初始化。(2)將其初始化延遲到稍后的時間。必須在第一次讀取final變量之前初始化它。
final類,它不能被擴展或繼承。
final方法,不能在包含該方法的類的子類中重新定義(覆蓋或隱藏)
構造函數是用于在對象創建后立即初始化對象的代碼塊。構造函數的結構看起來類似于一個方法。構造函數名稱與類的名稱相同。構造函數名稱后面是一對括號,可能包括參數。可選的,右括號后面可以是關鍵字throws,其后面是逗號分隔異常列表。
重載構造函數:一個類可以有多個構造函數。也叫重載構造函數。如果一個類有多個構造函數,它們的順序和參數類型都必須與其它構造函數不同。每個對象創建表達式調用一次構造函數??梢栽趯ο髣摻ǖ倪^程中只執行一個構造函數的代碼一次。
從另一個構造函數調用構造函數:構造函數可以調用同一類中的另一個構造函數。必須使用關鍵字this從另一個構造函數調用另外一個構造函數。如果構造函數調用另一個構造函數,它必須是構造函數體中的第一個可執行語句。構造函數不能調用自身,因為它將導致遞歸調用。
從構造函數返回:構造函數在其聲明中不能返回類型。但可以在構造函數體中使用沒有返回表達式的return語句。當一個構造函數中的返回語句被執行時,控制返回給調用者,忽略構造函數的其余代碼。
靜態初始化塊:靜態初始化器。當類定義被加載到JVM中時,只對一個類執行一次靜態初始化器,需要在其聲明的開頭使用static關鍵字。在一個類中可以有多個靜態初始化器。所有靜態初始化器都按文本出現的順序執行,并在任何實例初始化器之前執行。
Java? Object 類:在java.lang 包中。所有的Java類都直接或間接擴展Object類。所有的Java類都是Object類的子類,Object類是所有類的超類。Object類本身沒有超類。Object類的引用變量可以保存任何類的對象的引用。Object類有九個方法??梢栽贘ava中的所有類中使用。toString、equals、hashCode、clone、finalize沒有實現,需要子類自定義。在對象銷毀前被垃圾收集器調用。notify、notifyAll、wait、getClass()在Object類中實現,不能自定義它。它返回對對象的Class對象的引用。
對象的哈希代碼:哈希碼(也叫散列碼)是一個整數值。計算整數的算法稱為散列函數。Java使用散列碼從基于散列的集合中有效地檢索數據。Object類有一個返回int的hashCode方法,它是對象的哈希碼。該方法的默認實現通過將對象的內存地址轉換為整數來計算對象的哈希碼。如果兩個對象使用equals()方法相等,則它們必須具有相同的哈希碼。如果對同一個對象多次調用hashCode()方法,則該方法必須返回相同的整數值。如果一個類覆蓋這兩個方法中的任何一個,它必須基于散列集合覆蓋該類的對象以保證能正確工作。Java 7 引入了一個實用程序類java.lang.Objects 。它包含一個hash()方法,用于計算任意數量值的哈希碼。
equals()方法的特性:1.自反性。x.equals(x)應該返回true
2、對稱性。如果x.equals(y)返回true,那么y.equals(x)
3、傳遞性,如果x.equals(y)為true,且y.equals(z),那么x.equals(z)
4、一致性,如果x.equals(y)返回true,它應該返回true,知道x或y的狀態改變
類的toString()方法非常重要。當需要對象的字符串表示時,Java會自動調用toString()方法。當連接一個字符串和一個對象時,實例調用的就是toString()方法。
Java對象克隆:Java不提供克隆(復制)對象的自動機制??寺ο笠馕吨鹞粡椭茖ο蟮膬热荨RС挚寺〔僮?#xff0c;請在類中實現clone()方法。clone()方法聲明為protected。因此,不能從客戶端代碼調用它。需要在類中聲明clone()方法為public來克隆類的對象。它的返回類型是Object。這就需要使用clone()方法轉換返回值。
Java提供了一種在對象即將被銷毀時執行資源釋放的方法。在Java中創建對象,但是不能銷毀對象。JVM運行一個稱為垃圾收集器的低優先級特殊任務來銷毀不再引用的所有對象。垃圾回收器給我們一個機會,在對象被銷毀前執行清理代碼。Object類有一個finalize()方法就是用于在對象被銷毀之前執行清理代碼,這個方法聲明為protected,Object類中的finalize()方法不會做任何事情。所以需要覆蓋類中的finalize()方法。
Java不可變對象:在創建狀態后無法改變狀態的對象稱為不可變對象。一個對象不可變的類稱為不可變類。不變的對象可以由程序的不同區域共享而不用擔心其狀態改變。不可變對象本質上是線程安全的。關鍵字final聲明屬性,那么屬性不可變,對象也就是不可變的。
總結
以上是生活随笔為你收集整理的java object... arguments_Java面试之基础题---对象Object的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: r18安卓版游戏(r18安卓)
- 下一篇: groovy 字符串截取最后一个_Jav