管理类文件
? ? ? ? 在類中還可以再定義類,稱之為內嵌類或嵌套類。非靜態的內嵌類可以分為三種:成員內嵌類、區域內嵌類和匿名內嵌類。內嵌類的主要目的,就是對外部隱藏類的存在性。
使用內嵌類的好處:?
????????1.?內嵌類可以直接存取其所在類中的私用成員。
????????2.?當某個Slave類完全只服務于一個Master類時,可以將之設置為內嵌類,這樣使用Master類的人就不用知道Slave的存在。
????????3.?對調用靜態方法的對象隱藏返回對象的實現細節或產生方式。
?
????在文件管理方面,成員內嵌類在編譯完成之后,所產生的文件名稱為“外部類名?稱$內嵌類名稱.class”。
????內部類還可以被聲明為static,不過由于是static,它不能存取外部類的方法,而必須通過外部類所生成的對象來進行調用。被聲明為static的內部類,事實上也可以看做是另一種名稱控件的管理方式。
???????public??class??Outer
????????{
????????????public?static?class?inner
????????????{
????????????????...
????????????}
????????????...
????????}????
????????可以使用以下方式來使用Inner類:
????????????????Outer.Inner???inner?=?new?Outer.Inner();
?
匿名內嵌類:?
????????內嵌匿名類可以不聲明類的名稱,而使用new直接產生以一個對象,它可以使繼承某個類或是實現某個接口。其聲明方式如下:
????????????new??[類或接口()]
????????????{
????????????????//實現
????????????}
?
????????例如:
????????????public??class??AnonumousClassdemo
????????????{
????????????????public?static?void?main(String[]?args)
????????????????{
????????????????????Object?obj?=?new?Object()
????????????????????{
????????????????????????public?String?toString()
????????????????????????{
????????????????????????????...????????//重新定義toString()
????????????????????????}
????????????????????}
????????????????}
????????????}
?
????如果要在內嵌匿名類中使用外部的區域變量,變量在聲明時必須為final。
????在文件管理方面,內嵌匿名類在編譯完成之后會產生“外部類名稱$編號.class”。
?
package:
????????為了能建立與包相對應的文件系統結構,在編譯時可以加入-d參數,并指定產生的類文件存儲在哪一個目錄之下。
????????package的設置會成為類的一部分名稱。
?
import:
????????使用import關鍵字,告知編譯器所要使用的類是位于哪一個包。
????????????import??目錄.目錄.類名
????????????import??目錄.目錄.*
?
????????將源文件與編譯完成的類文件放在一起容易發生問題,可以建立一個專門放源文件代碼.java文件的目錄,并建立一個專門放.class文件的目錄:
????????????????javac?-d??./classes??./src/*.java
????????這樣,可以直接到classes目錄中執行??java??類名
????????或:
????????????????java??-cp??./classes?類名
?
public?與包:
????????一個類在定義時可以使用public加以修飾,一個.java文件中可以定義數個類,但只能有一個被聲明為public,沒有被聲明為public的類只能被同一個包中的類的實例調用。
????????類成員也可以聲明為public,聲明為public的類成員可以被其他對象調用,如果聲明類時不適用public、protected或private設置權限,則預設為包存取范圍,只有同一個包中的類可以調用這些類成員。
????????類的權限設置會約束類成員上的權限設置,所以如果類上不聲明public,而類成員上設置了public,則類成員同樣地也只能被同一個包的類存取。
????????當在Java中定義一個類,但沒有定義構造函數時,編譯器會自動產生一個默認構造函數。
????????如果自行定義構造函數,編譯器就不會加上默認的構造函數。
轉載于:https://www.cnblogs.com/fanchangfa/archive/2012/07/15/2592242.html
總結
- 上一篇: binutils-2.22编译心得
- 下一篇: ACM博弈总结