成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java內部類使用的四點建議

開發 后端
在Java類中再創建一個類,則這個類中的子類就叫做Java內部類。成員內部類的定義、使用雖然跟普通的類查不到,但是仍然有一些比較特殊的地方。

在Java內部類中可以隨意使用外部類的成員方法以及成員變量。

眾所周知,在定義成員方法或者成員變量的時候,可以給其加上一些權限的修飾詞,以防止其他類的訪問。如在成員變量或者成員方法前面,加上Private關鍵字,則其他類就無法調用這個類中的成員方法或則和成員變量。但是,如果這個類有成員內部類,則不受這方面的限制。也就是說,在成員內部類中可以隨意引用外部類的成員方法以及成員變量,即使這些類成員方法或者成員變量被修飾了private。如在成員外部類中定義了一個i變量,并且利用private關鍵字來修飾。此時在其他類中是不能夠引用這個私有成員變量的。但是這個類的成員內部類的方法中,則不僅可以引用這個外部類的私有變量,而且還可以對其進行賦值等操作。這個賦值操作對于外部類也是有效的。即成員內部類可以更改外部類中私有變量的值。(深入理解嵌套類和內部類)

要在外部類中實例化內部類對象的引用。

如果一個類定義在另外一個類中,成為成員內部類,此時一定要注意,內部類的實例一定要綁定在Java外部類的實例上。(如何在內部類中返回外部類對象)也就是說,要從外部類中初始化一個內部類的對象,此時內部類的對象就會綁定在外部類的對象上。這跟普通的類有所不同。普通的類,創建完之后,不一定馬上需要實例化。在需要用到這個對象的時候,再進行實例化即可。但是,如果一個類成為另外一個類的成員內部類,則就不同了。必須要在外部類中實例化內部類對象的引用,以實現將內部類的實例綁定在外部類的實例上。簡單的說,就是在定義外部類的時候,如果有成員內部類,那么就不要望了在外部類中利用new關鍵字來實例化內部類對象的引用。而對于外部類來說,則可以在需要的時候再進行實例化。如此就可以保證,利用外部類創建對象的同時創建了內部類的對象。從而可以保證Java內部類的實例綁定在外部類的實例上。

成員內部類中成員方法與成員變量的私有性。

作為成員內部類,可以隨意引用外部類中的成員變量與成員方法。那么在成員內部類中定義的成員變量,外部類是否也可以隨意訪問呢?答案是否定的。內部類可以訪問它外部類的成員,但是內部類的成員(如成員變量或者成員方法)只有在內部類的范圍之內是可知的,不能夠被外部類直接引用。如現在在外部類中定義了一個變量i,在內部類中定義了另一個變量ii。此時在成員內部類中,可以直接引用這個外部類中的變量i,也可以對其直接進行賦值,如i=5等等。但是在外部類中,則不能夠直接引用內部類中的成員變量。如在外部類中,利用ii=5的賦值語句改變這個變量的值,就屬于語法錯誤,在編譯的時候就會出現錯誤。如果外部類真的要引用內部類的成員,那也不是不可以。只是不能夠進行直接的引用,而是要使用內部類對象引用的方法才能夠調用內部類的成員變量。這一點程序開發人員需要切記。成員內部類與外部類相互訪問彼此的成員方法限制是不同的。特別需要注意的是,如果在外部類和非靜態方法之外實例化內部對象,則需要使用外部類.內部類的形式來制定這個對象的類型。這非常的麻煩。為此要盡量避免在外部類和非靜態方法之外實例化內部類對象。再者,內部類對象會依賴于外部類對象,除非已經存在一個外部類對象,否則類中不會出現內部類對象。簡單的說,內部類對象與外部類對象之間的關系非常的緊密。有時候即像一對父子(成員內部類可以隨意使用外部類的成員),有時候又像是陌生人(外部類不能夠直接使用內部類中的成員)。作為一個出現的程序開發人員,必須要深入了解外部類對象與內部類對象的關系。因為在實際工作中,在外部類中定義成員內部類還是很常見的。只有了解他們彼此之間的關系,在編寫應用程序中,才可以把控好他們。

使用this關鍵字獲取內部類與外部類對象的引用。

在外部類和成員內部類中,都可以定義變量。成員內部類可以隨意訪問外部類中的變量,而外部類不能夠直接訪問內部類中的變量,只有通過使用內部類對象來引用內部類的成員變量。不過需要注意的是,在外部類中定義的變量與內部類中定義的變量名字可以相同。也就是說,在外部類中可以定義一個變量i,在內部類中也可以定義一個變量i。此時新的問題就出來了。由于在內部類中可以隨意訪問外部類中成員方法與成員變量。但是此時成員內部類與外部類的變量名相同,那么如果要在內部類使用這個變量i,編譯器怎么知道現在需要調用外部類的變量i,還是內部類的變量i呢?

在實際工作中,應該盡量避免這種情況。即在定義變量名字的時候,Java內部類中的變量名字盡量不要與外部類中的變量名字相同。但是如果真的發生這種情況的話,Java編譯器還是有手段可以解決這個變量名字的沖突問題。如果在類中的成員內部類中遇到成員變量名字與外部類中的成員變量名字相同,則可以通過使用this關鍵字來加以區別。如現在有一個類名字叫做student。而在這個類中又創建了一個成員內部類,名字叫做age?,F在在這兩個類中各自定義了一個成員變量i,用來做循環之用。此時如果在成員內部類中調用這個變量,該如何進行區分呢?通常情況下,如果使用this.i 的方式來調用變量,則表示這個變量是成員內部類中定義的變量。而通過使用student.this.i的形式調用變量時表示此時引用的是外部類的成員變量。也就是說,如果內部類中引用外部類中同名的成員,需要通過外部類迷名字.this.外部類成員名字的方式加以引用。而且,在引用成員內部類自己的定義的成員時也需要使用this關鍵字,以加以區別。顯然這非常的麻煩。為此筆者仍然要強調一遍,除非有非常特殊的必要,否則的話要盡量避兩外部類與成員內部類中成員變量或者成員方法采用相同的名字。否則的話,會給后續的引用帶來很大的麻煩。

從以上的總結中可以看出,成員內部類與外部類之間的關系確實很復雜。作為一個Java程序開發人員,必須要了解內部類與外部類成員相互之間引用的準則、內部類對象與外部類對象的關系。在編寫代碼的時候,盡量避免內部類與外部類中成員變量與成員方法的命名沖突。如果真的發生重名的話,要學會利用this關鍵字來消除這個沖突。筆者上面談的一些注意實現也是一些比較抽象的內容,需要開發人員在實際工作中去領悟。

 

【編輯推薦】

  1. iBATIS用法之SqlMapTemplate內部類詳解
  2. Java編程中的內部類
  3. Java的局部內部類以及final類型的參數和變量
  4. 深入理解JAVA的嵌套類和內部類
  5. 內部類和匿名類優化Java代碼
責任編輯:佚名 來源: IT專家網
相關推薦

2020-01-15 11:14:21

Java算法排序

2020-12-14 10:23:23

Java內部類外部類

2011-03-15 10:41:05

內部類

2009-06-11 13:08:29

Java內部類Java編程思想

2009-07-17 16:43:02

JRuby性能優化

2020-09-21 07:00:42

Java內部類接口

2011-03-29 14:11:15

內部類

2023-10-19 13:24:00

Java工具

2015-07-15 14:50:17

云計算SaaS云計算轉型

2011-07-21 15:44:33

Java內部類

2023-03-06 07:53:36

JavaN種內部類

2015-12-08 09:05:41

Java內部類

2023-10-11 14:25:25

2010-10-15 12:56:17

提高無線上網速度

2019-12-23 14:32:38

Java內部類代碼

2016-01-21 10:19:55

云計算初創公司云業務

2012-04-17 11:21:50

Java

2010-02-05 15:32:33

Java內部類

2009-02-12 15:14:00

固態硬盤企業級用戶采購

2020-01-12 19:10:30

Java程序員數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91欧美精品| 美美女高清毛片视频免费观看 | 日韩在线视频一区二区三区 | 亚洲女人天堂成人av在线 | 草久久久 | 玩丰满女领导对白露脸hd | 欧美国产大片 | 男女视频免费 | av网站免费| 在线啊v| av中文字幕网| 日韩免费在线 | 一区二区三区国产 | 精品久久久久久久久久久久 | 欧美精品久久久久久久久老牛影院 | 国产精品一区二区在线观看 | 激情av| 国产精品久久久久久久久久 | 极品电影院 | 午夜国产 | 久久久久久久一区二区三区 | 久久久久国产一区二区三区四区 | 日韩精品一区二区三区 | 日韩久久精品电影 | 亚洲天堂二区 | 久久亚洲综合 | 精品1区2区3区 | 国产一卡二卡三卡 | 伊人91在线 | 中文字幕av中文字幕 | 欧美极品视频在线观看 | 亚洲网站免费看 | 久久成人精品视频 | 国产精品欧美一区二区三区不卡 | 金莲网 | 国产精品久久久久久吹潮日韩动画 | 国产一区二区中文字幕 | 孰女乱色一区二区三区 | 久久久国产一区二区三区 | 欧美成年网站 | 午夜视频网 |