摘要:所以看出和兩個(gè)的對(duì)應(yīng)指針數(shù)一樣,一個(gè)為一個(gè)為這就引出了變量的知識(shí)點(diǎn),如手工畫的圖二為啥強(qiáng)制子類父類變量名不同阿里巴巴手冊(cè)是這樣寫的強(qiáng)制避免在子父類的成員變量之間或者不同代碼塊的局部變量之間采用完全相同的命名方式,那會(huì)導(dǎo)致代碼可讀性降低。
摘要: 原創(chuàng)出處 https://www.bysocket.com 「公眾號(hào):泥瓦匠BYSocket 」歡迎關(guān)注和轉(zhuǎn)載,保留摘要,謝謝!
目錄
父子類變量名相同會(huì)咋樣?
為啥強(qiáng)制子類、父類變量名不同?
可落地項(xiàng)目小思考
一、父子類變量名相同會(huì)咋樣?有個(gè)小故事,今天群里面有個(gè)人問下面如圖輸出什么?
我回答:60。但這是錯(cuò)的,答案結(jié)果是 40 。我知錯(cuò)能改,然后說了下父子類變量不建議同一個(gè)名稱。
可見,父子變量名相同會(huì)令人 “Confusing”。再舉個(gè)例子,新建 ParentClass 類:
public class ParentClass { public String name = "parent"; public static void main(String[] args) { ParentClass parentClass = new SonClass(); SonClass sonClass = new SonClass(); System.out.println("parentClass.name = " + parentClass.name); System.out.println("sonClass.name = " + sonClass.name); System.out.println("debug..."); } } class SonClass extends ParentClass { public String name = "son"; }
上面如果答對(duì)的,這個(gè)肯定知道結(jié)果。運(yùn)行程序打印如下:
parentClass.name = parent sonClass.name = son debug...
斷點(diǎn)到 System.out.println("debug..."); 該行,debug 下如圖:
debug 后,答案顯然:
前面兩行,new 出來兩個(gè)不同 SonClass 實(shí)例
每個(gè)實(shí)例都會(huì)有子類的成員變量以及父類的成員變量,這個(gè)叫做實(shí)例變量
如果是 String 的值,都會(huì)指向 JVM 常量池。所以看出 son 和 parent 兩個(gè) String 的對(duì)應(yīng)指針數(shù)一樣,一個(gè)為 440/一個(gè)為 439
這就引出了變量的知識(shí)點(diǎn),如手工畫的圖:
二、為啥強(qiáng)制子類、父類變量名不同?阿里巴巴 Java 手冊(cè)是這樣寫的:
【強(qiáng)制】避免在子父類的成員變量之間或者不同代碼塊的局部變量之間采用完全相同的命名方式,那會(huì)導(dǎo)致代碼可讀性降低。
說明:子類、父類成員變量名相同,即使屬性是 public 也是能通過編譯,雖然局部變量不在同一方法內(nèi)的不同代碼中同名也是合法的,但避免使用。 setter / getter 的參數(shù)名稱也避免成員變量名相同。
具體的反例我也不寫了。為啥強(qiáng)制,顯而易見有幾點(diǎn):
可以提高代碼可讀性
減少新人看代碼時(shí)不必要的困惑
減少重構(gòu)時(shí)不必要的困惑
...
多次使用能值出同源
正確的例子 ParentClass 類:
public class ParentClass { public String parentName = "parent"; public static void main(String[] args) { ParentClass parentClass = new SonClass(); SonClass sonClass = new SonClass(); System.out.println("parentClass.parentName = " + parentClass.parentName); System.out.println("sonClass.sonName = " + sonClass.sonName); System.out.println("debug..."); } } class SonClass extends ParentClass { public String sonName = "son"; }
兩種寫法的優(yōu)缺點(diǎn),一目了然。
三、可落地小總結(jié)這里是說了一種代碼風(fēng)格,類似味道。本身不影響程序運(yùn)行,沒有所謂的潛在故障和錯(cuò)誤。那么味道的好處總會(huì)能體驗(yàn)到。
比如這里談到繼承,OOP 講究:高內(nèi)聚,低耦合;多組合,少繼承。比如控制語句,推薦多層嵌套不超過 3 層。那繼承也一樣:推薦繼承關(guān)系不超過 3 層。
還有 Boolean 成員變量定義,命名不要加 is 前綴。不然 getter 方法會(huì)少了 is,部分解析會(huì)引起序列化問題。我的做法:在設(shè)計(jì)數(shù)據(jù)庫表字段的時(shí)候,不考慮 Boolean ,用 Byte 類型去處理。這樣 is 不 is 就不 care 了。
...
好的命名規(guī)約,好的編碼風(fēng)格,簡(jiǎn)捷清爽,引出無限風(fēng)光
代碼示例本文示例讀者可以通過查看下面?zhèn)}庫的中的 alibaba/java/ParentClass.java :
Github:https://github.com/JeffLi1993/java-core-learning-example
Gitee:https://gitee.com/jeff1993/java-core-learning-example
如果您對(duì)這些感興趣,歡迎 star、follow、收藏、轉(zhuǎn)發(fā)給予支持!
參考資料阿里 Java 手冊(cè)系列教程:https://www.bysocket.com/arch...
《阿里巴巴 Java 開發(fā)手冊(cè)》
以下專題教程也許您會(huì)有興趣《Spring Boot 2.x 系列教程》
《Java 核心系列教程》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/77486.html
摘要:總結(jié)泛型的類型必須是引用類型,不能是基本類型,泛型的個(gè)數(shù)可以有多個(gè),可以使用對(duì)創(chuàng)建對(duì)象時(shí)的泛型類型以及方法參數(shù)類型進(jìn)行限制,如使用關(guān)鍵字和對(duì)泛型的具體類型進(jìn)行向下限制或向上限制,最后一點(diǎn),可以聲明泛型數(shù)組,但是不能創(chuàng)建泛型數(shù)組的實(shí)例。 自從 JDK 1.5 提供了泛型概念,泛型使得開發(fā)者可以定義較為安全的類型,不至于強(qiáng)制類型轉(zhuǎn)化時(shí)出現(xiàn)類型轉(zhuǎn)化異常,在沒有反省之前,可以通過 Object...
摘要:面試通關(guān)要點(diǎn)匯總集部分解答說明如果你有幸能看到的話,本文整體框架來自阿里梁桂釗的博文,總結(jié)的非常不錯(cuò)。這樣做的目的是對(duì)內(nèi)部數(shù)據(jù)進(jìn)行了不同級(jí)別的保護(hù),防止錯(cuò)誤的使用了對(duì)象的私有部分。被繼承的類稱為基類和父類或超類。 showImg(https://segmentfault.com/img/remote/1460000013442471?w=1280&h=819); Java面試通關(guān)要點(diǎn)匯...
摘要:對(duì)象的引用關(guān)鍵字總是指向調(diào)用該方法的對(duì)象。根據(jù)出現(xiàn)位置的不同,作為對(duì)象的默認(rèn)引用有兩種情形。構(gòu)造器中引用該構(gòu)造器正在初始化的對(duì)象。如果同一個(gè)類中包含了兩個(gè)或兩個(gè)以上方法的方法名相同,但形參列表不同,則被稱為方法重載。 類和對(duì)象 定義類 面向?qū)ο蟮某绦蛟O(shè)計(jì)過程中有兩個(gè)重要概念:類(class)和對(duì)象(object,也被稱為實(shí)例,instance),其中類是某一批對(duì)象的抽象,可以把類理解成...
摘要:強(qiáng)制存儲(chǔ)方案和底層數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)獲得評(píng)審一致通過,并沉淀成為文檔。正例淘寶訂單狀態(tài)有已下單待付款已付款待發(fā)貨已發(fā)貨已收貨等。確定指導(dǎo)后續(xù)設(shè)計(jì)與演化的原則。 showImg(https://segmentfault.com/img/remote/1460000016159838?w=1215&h=642); 1、【強(qiáng)制】存儲(chǔ)方案和底層數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)獲得評(píng)審一致通過,并沉淀成為文檔。 說...
摘要:繼承的出現(xiàn)讓類與類之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提。繼承的注意事項(xiàng)繼承的注意事項(xiàng)在中,類只支持單繼承,不允許多繼承,也就是說一個(gè)類只能有一個(gè)直接父類,例如下面這種情況是不合法的。 01繼承的概述 *A:繼承的概念 *a:繼承描述的是事物之間的所屬關(guān)系,通過繼承可以使多種事物之間形成一種關(guān)系體系 *b:在Java中,類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上去構(gòu)建一個(gè)新的類, ...
閱讀 2007·2023-04-25 16:19
閱讀 3117·2021-11-24 09:39
閱讀 837·2021-11-16 11:44
閱讀 1699·2019-08-29 12:52
閱讀 1148·2019-08-26 13:33
閱讀 1081·2019-08-26 10:26
閱讀 2211·2019-08-23 16:42
閱讀 2576·2019-08-23 14:37