java object... arguments_Java面试之基础题---对象Object
參數(shù)傳遞:Java支持兩種數(shù)據(jù)類型:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
原始數(shù)據(jù)類型是一個(gè)簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),它只有一個(gè)與之相關(guān)的值。引用數(shù)據(jù)類型是一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),它表示一個(gè)對(duì)象。原始數(shù)據(jù)類型的變量將該值直接存儲(chǔ)在其存儲(chǔ)器地址處。使用對(duì)象和引用變量時(shí)會(huì)有所不同。。Java中的所有參數(shù)都通過(guò)值傳遞。
當(dāng)參數(shù)是原始是原始數(shù)據(jù)類型時(shí),實(shí)際參數(shù)的值將復(fù)制到參數(shù)。在方法主體中對(duì)參數(shù)值進(jìn)行的任何更改只會(huì)更改形式參數(shù)的副本,而不會(huì)更改實(shí)際參數(shù)的值。當(dāng)參數(shù)通過(guò)參考值傳遞時(shí),存儲(chǔ)在實(shí)際參數(shù)中的參考被復(fù)制到形式參數(shù)。實(shí)際參數(shù)和形式參數(shù)都指向內(nèi)存中的相同對(duì)象。形式參數(shù)可以通過(guò)直接更改實(shí)例變量的值或通過(guò)調(diào)用對(duì)象上的方法來(lái)修改對(duì)象。通過(guò)形式參數(shù)對(duì)對(duì)象進(jìn)行任何修改都可以通過(guò)實(shí)際參數(shù)立即可見(jiàn),因?yàn)樗鼈儗?duì)保存對(duì)內(nèi)存中同一對(duì)象的引用。形式參數(shù)本身可以被修改以引用方法內(nèi)的另一個(gè)對(duì)象。要禁用將引用類型形式參數(shù)更改為引用不同對(duì)象的方法,在引用類型形式參數(shù)聲明中使用關(guān)鍵字final。
可變長(zhǎng)度參數(shù):(varargs:variable-length arguments),聲明一個(gè)接受可變數(shù)量的參數(shù)的方法或構(gòu)造函數(shù)。聲明可變長(zhǎng)度參數(shù),在方法參數(shù)的數(shù)據(jù)類型之后添加一個(gè)省略號(hào)...,省略號(hào)...之前和之后添加空格時(shí)可選的。可變長(zhǎng)度參數(shù)方法可以有多個(gè)參數(shù),但最多可以有一個(gè)可變長(zhǎng)度參數(shù)。可變長(zhǎng)度參數(shù)方法的可變長(zhǎng)度參數(shù)必須是參數(shù)列表的最后一個(gè),可以使用for循環(huán)來(lái)處理可變長(zhǎng)度參數(shù)的參數(shù)列表。length屬性給出了可變長(zhǎng)度參數(shù)傳遞的值的數(shù)量。
重載可變長(zhǎng)度參數(shù)方法
方法重載規(guī)則適應(yīng)于可變長(zhǎng)度參數(shù)方法。可以使用可變長(zhǎng)度參數(shù)重載一個(gè)方法,只要方法的參數(shù)在連續(xù)順序或數(shù)字上不同。
Java的關(guān)鍵字this。它是對(duì)類的當(dāng)前實(shí)例的引用。它只能在實(shí)例的上下文使用。當(dāng)實(shí)例變量或類變量被具有相同名稱的另一個(gè)變量覆蓋時(shí),需要使用關(guān)鍵字this限定一個(gè)實(shí)例變量,并使用類名稱定義一個(gè)類變量。可以使用關(guān)鍵字this來(lái)限定實(shí)例方法名。
final關(guān)鍵字不允許修改或替換其原始值或定義。可以在以下三個(gè)上下文中使用:變量聲明,類聲明,方法聲明。變量被聲明為final,它只能被賦值一次。final變量的值在設(shè)置后不能修改。變量聲明包括局部變量的聲明,方法/構(gòu)造函數(shù)的形式參數(shù),實(shí)例變量和類變量。final變量的值只設(shè)置一次,它不能被重新賦值。有兩種方法來(lái)初始化final變量的值:(1)在聲明時(shí)給予初始化。(2)將其初始化延遲到稍后的時(shí)間。必須在第一次讀取final變量之前初始化它。
final類,它不能被擴(kuò)展或繼承。
final方法,不能在包含該方法的類的子類中重新定義(覆蓋或隱藏)
構(gòu)造函數(shù)是用于在對(duì)象創(chuàng)建后立即初始化對(duì)象的代碼塊。構(gòu)造函數(shù)的結(jié)構(gòu)看起來(lái)類似于一個(gè)方法。構(gòu)造函數(shù)名稱與類的名稱相同。構(gòu)造函數(shù)名稱后面是一對(duì)括號(hào),可能包括參數(shù)。可選的,右括號(hào)后面可以是關(guān)鍵字throws,其后面是逗號(hào)分隔異常列表。
重載構(gòu)造函數(shù):一個(gè)類可以有多個(gè)構(gòu)造函數(shù)。也叫重載構(gòu)造函數(shù)。如果一個(gè)類有多個(gè)構(gòu)造函數(shù),它們的順序和參數(shù)類型都必須與其它構(gòu)造函數(shù)不同。每個(gè)對(duì)象創(chuàng)建表達(dá)式調(diào)用一次構(gòu)造函數(shù)。可以在對(duì)象創(chuàng)建的過(guò)程中只執(zhí)行一個(gè)構(gòu)造函數(shù)的代碼一次。
從另一個(gè)構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù):構(gòu)造函數(shù)可以調(diào)用同一類中的另一個(gè)構(gòu)造函數(shù)。必須使用關(guān)鍵字this從另一個(gè)構(gòu)造函數(shù)調(diào)用另外一個(gè)構(gòu)造函數(shù)。如果構(gòu)造函數(shù)調(diào)用另一個(gè)構(gòu)造函數(shù),它必須是構(gòu)造函數(shù)體中的第一個(gè)可執(zhí)行語(yǔ)句。構(gòu)造函數(shù)不能調(diào)用自身,因?yàn)樗鼘?dǎo)致遞歸調(diào)用。
從構(gòu)造函數(shù)返回:構(gòu)造函數(shù)在其聲明中不能返回類型。但可以在構(gòu)造函數(shù)體中使用沒(méi)有返回表達(dá)式的return語(yǔ)句。當(dāng)一個(gè)構(gòu)造函數(shù)中的返回語(yǔ)句被執(zhí)行時(shí),控制返回給調(diào)用者,忽略構(gòu)造函數(shù)的其余代碼。
靜態(tài)初始化塊:靜態(tài)初始化器。當(dāng)類定義被加載到JVM中時(shí),只對(duì)一個(gè)類執(zhí)行一次靜態(tài)初始化器,需要在其聲明的開(kāi)頭使用static關(guān)鍵字。在一個(gè)類中可以有多個(gè)靜態(tài)初始化器。所有靜態(tài)初始化器都按文本出現(xiàn)的順序執(zhí)行,并在任何實(shí)例初始化器之前執(zhí)行。
Java? Object 類:在java.lang 包中。所有的Java類都直接或間接擴(kuò)展Object類。所有的Java類都是Object類的子類,Object類是所有類的超類。Object類本身沒(méi)有超類。Object類的引用變量可以保存任何類的對(duì)象的引用。Object類有九個(gè)方法。可以在Java中的所有類中使用。toString、equals、hashCode、clone、finalize沒(méi)有實(shí)現(xiàn),需要子類自定義。在對(duì)象銷毀前被垃圾收集器調(diào)用。notify、notifyAll、wait、getClass()在Object類中實(shí)現(xiàn),不能自定義它。它返回對(duì)對(duì)象的Class對(duì)象的引用。
對(duì)象的哈希代碼:哈希碼(也叫散列碼)是一個(gè)整數(shù)值。計(jì)算整數(shù)的算法稱為散列函數(shù)。Java使用散列碼從基于散列的集合中有效地檢索數(shù)據(jù)。Object類有一個(gè)返回int的hashCode方法,它是對(duì)象的哈希碼。該方法的默認(rèn)實(shí)現(xiàn)通過(guò)將對(duì)象的內(nèi)存地址轉(zhuǎn)換為整數(shù)來(lái)計(jì)算對(duì)象的哈希碼。如果兩個(gè)對(duì)象使用equals()方法相等,則它們必須具有相同的哈希碼。如果對(duì)同一個(gè)對(duì)象多次調(diào)用hashCode()方法,則該方法必須返回相同的整數(shù)值。如果一個(gè)類覆蓋這兩個(gè)方法中的任何一個(gè),它必須基于散列集合覆蓋該類的對(duì)象以保證能正確工作。Java 7 引入了一個(gè)實(shí)用程序類java.lang.Objects 。它包含一個(gè)hash()方法,用于計(jì)算任意數(shù)量值的哈希碼。
equals()方法的特性:1.自反性。x.equals(x)應(yīng)該返回true
2、對(duì)稱性。如果x.equals(y)返回true,那么y.equals(x)
3、傳遞性,如果x.equals(y)為true,且y.equals(z),那么x.equals(z)
4、一致性,如果x.equals(y)返回true,它應(yīng)該返回true,知道x或y的狀態(tài)改變
類的toString()方法非常重要。當(dāng)需要對(duì)象的字符串表示時(shí),Java會(huì)自動(dòng)調(diào)用toString()方法。當(dāng)連接一個(gè)字符串和一個(gè)對(duì)象時(shí),實(shí)例調(diào)用的就是toString()方法。
Java對(duì)象克隆:Java不提供克隆(復(fù)制)對(duì)象的自動(dòng)機(jī)制。克隆對(duì)象意味著逐位復(fù)制對(duì)象的內(nèi)容。要支持克隆操作,請(qǐng)?jiān)陬愔袑?shí)現(xiàn)clone()方法。clone()方法聲明為protected。因此,不能從客戶端代碼調(diào)用它。需要在類中聲明clone()方法為public來(lái)克隆類的對(duì)象。它的返回類型是Object。這就需要使用clone()方法轉(zhuǎn)換返回值。
Java提供了一種在對(duì)象即將被銷毀時(shí)執(zhí)行資源釋放的方法。在Java中創(chuàng)建對(duì)象,但是不能銷毀對(duì)象。JVM運(yùn)行一個(gè)稱為垃圾收集器的低優(yōu)先級(jí)特殊任務(wù)來(lái)銷毀不再引用的所有對(duì)象。垃圾回收器給我們一個(gè)機(jī)會(huì),在對(duì)象被銷毀前執(zhí)行清理代碼。Object類有一個(gè)finalize()方法就是用于在對(duì)象被銷毀之前執(zhí)行清理代碼,這個(gè)方法聲明為protected,Object類中的finalize()方法不會(huì)做任何事情。所以需要覆蓋類中的finalize()方法。
Java不可變對(duì)象:在創(chuàng)建狀態(tài)后無(wú)法改變狀態(tài)的對(duì)象稱為不可變對(duì)象。一個(gè)對(duì)象不可變的類稱為不可變類。不變的對(duì)象可以由程序的不同區(qū)域共享而不用擔(dān)心其狀態(tài)改變。不可變對(duì)象本質(zhì)上是線程安全的。關(guān)鍵字final聲明屬性,那么屬性不可變,對(duì)象也就是不可變的。
總結(jié)
以上是生活随笔為你收集整理的java object... arguments_Java面试之基础题---对象Object的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: r18安卓版游戏(r18安卓)
- 下一篇: Linux安装DNS服务(linux安装