程序员基本功 07 面向对象的陷阱
1、instaceof運(yùn)算符的陷阱
instanceof運(yùn)算符的前一個(gè)操作數(shù)通常是一個(gè)引用類型的變量,后一個(gè)操作數(shù)通常是一個(gè)類,它用于判斷前面的對(duì)象是否是后面的類或其子類、實(shí)現(xiàn)類的實(shí)例。
instanceof運(yùn)算符有一個(gè)限制:要么與后面的類相同,要么是后面類的父類、要么是后面類型的子類。
使用null調(diào)用instanceof運(yùn)算符時(shí)返回false時(shí)非常有用的行為,因?yàn)檫@可以保證第一個(gè)操作數(shù)所引用的對(duì)象不是null。
2、構(gòu)造器不能使用void聲明返回值
構(gòu)造器是java每個(gè)類都會(huì)提供的一個(gè)特殊方法,負(fù)責(zé)對(duì)java對(duì)象執(zhí)行初始化操作,不管是定義實(shí)例變量時(shí)指定的初始值,還是在非靜態(tài)初始化塊中所做的操作,實(shí)際都會(huì)被提取到構(gòu)造器中被執(zhí)行。
3、構(gòu)造器只是初始化對(duì)象
在構(gòu)造器執(zhí)行之前,Java對(duì)象所需的內(nèi)存空間,應(yīng)該說(shuō)是由new關(guān)鍵字申請(qǐng)出來(lái)的。然后使用構(gòu)造器對(duì)這個(gè)對(duì)象進(jìn)行初始化。
一些時(shí)候程序創(chuàng)建Java對(duì)象時(shí)無(wú)需調(diào)用構(gòu)造函數(shù),可使用反序列化的方式恢復(fù)Java對(duì)象;使用clone方法分支Java對(duì)象。如果希望Java類的實(shí)例是可復(fù)制的,對(duì)該類有倆個(gè)要求:讓該Java類實(shí)現(xiàn)Cloneable接口,為Java類提供colne()方法,該方法負(fù)責(zé)進(jìn)行復(fù)制。
4、避免無(wú)限遞歸的構(gòu)造器
- 盡量不要在定義實(shí)例變量時(shí)指定實(shí)例變量的值為當(dāng)前類的實(shí)例;
- 盡量不要在初始化塊中創(chuàng)建當(dāng)前類的實(shí)例;
- 盡量不要在構(gòu)造器內(nèi)調(diào)用本構(gòu)造器創(chuàng)建的Java對(duì)象
5、區(qū)分重載的方法
第一階段JVM將會(huì)選取所有可獲得并匹配調(diào)用的方法或構(gòu)造器,到底調(diào)用哪個(gè)方法,此時(shí)JVM會(huì)在第一階段所選取的方法或構(gòu)造器中再次選取更精準(zhǔn)匹配的那一個(gè)。
6、private方法不能重寫(xiě)
子類不能訪問(wèn)父類的private方法。
7、包訪問(wèn)權(quán)限的方法也可能無(wú)法重寫(xiě)
對(duì)于不使用訪問(wèn)控制修飾符修飾的方法,它只能被與當(dāng)前類處于同一個(gè)包中的其他類訪問(wèn),其他包中的子類依然無(wú)法訪問(wèn)該方法。若其子類與該類處于同一個(gè)包中,子類可以重寫(xiě)父類的方法;否則,子類將不能重寫(xiě)父類的方法。
8、非靜態(tài)內(nèi)部類的構(gòu)造器必須傳入外部類的實(shí)例
內(nèi)部類能提供更好的封裝,而且可以直接訪問(wèn)外部類的private成員。
9、非靜態(tài)內(nèi)部類不能擁有靜態(tài)成員
推薦使用靜態(tài)內(nèi)部類
10、static關(guān)鍵字的作用
? static是一個(gè)修飾符,它用于修飾類里定義的:Field、方法、內(nèi)部類、初始化塊、內(nèi)部枚舉類。static的作用就是把類里定義的成員變成靜態(tài)成員,也就是類成員。
被static修飾的成員屬于類本身,而不是單個(gè)的Java對(duì)象,
11、靜態(tài)內(nèi)部類不能訪問(wèn)外部類的非靜態(tài)成員
?
12、native方法跨平臺(tái)時(shí)可能有問(wèn)題
對(duì)于native方法而,Java程序不會(huì)為該方法提供實(shí)現(xiàn)體。native方法通常需要借助C語(yǔ)言來(lái)完成,即需要使用C為Java提供實(shí)現(xiàn)。其實(shí)現(xiàn)步驟:
總結(jié)
以上是生活随笔為你收集整理的程序员基本功 07 面向对象的陷阱的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 程序员基本功08异常捕捉的陷阱
- 下一篇: 程序员基本功 06 流程控制的陷阱