Java 对象和类的一些笔记总结
1. 源文件聲明規則
當在一個源文件中定義多個類,并且還有import語句和package語句時,要特別注意這些規則。
- 一個源文件中只能有一個public類
- 一個源文件可以有多個非public類
- 源文件的名稱應該和public類的類名保持一致。例如:源文件中public類的類名是Employee,那么源文件應該命名為Employee.java。
- 如果一個類定義在某個包中,那么package語句應該在源文件的首行。
- 如果源文件包含import語句,那么應該放在package語句和類定義之間。如果沒有package語句,那么import語句應該在源文件中最前面。
- import語句和package語句對源文件中定義的所有類都有效。在同一源文件中,不能給不同的類不同的包聲明。
類有若干種訪問級別,并且類也分不同的類型:抽象類和final類等
除了上面提到的幾種類型,Java還有一些特殊的類,如:內部類、匿名類。
java因強制要求類名(唯一的public類)和文件名統一,因此在引用其它類時無需顯式聲明。在編譯時,編譯器會根據類名去尋找同名文件。
2. Java包
包主要用來對類和接口進行分類。當開發Java程序時,可能編寫成百上千的類,因此很有必要對類和接口進行分類。
package 的作用就是 c++ 的 namespace 的作用,防止名字相同的類產生沖突。Java 編譯器在編譯時,直接根據 package 指定的信息直接將生成的 class 文件生成到對應目錄下。如 package aaa.bbb.ccc 編譯器就將該 .java 文件下的各個類生成到 ./aaa/bbb/ccc/ 這個目錄。
import 是為了簡化使用 package 之后的實例化的代碼。假設 ./aaa/bbb/ccc/ 下的 A 類,假如沒有 import,實例化A類為:new aaa.bbb.ccc.A(),使用 import aaa.bbb.ccc.A 后,就可以直接使用 new A() 了,也就是編譯器匹配并擴展了 aaa.bbb.ccc. 這串字符串。
3. 為什么JAVA文件中只能含有一個Public類?
java 程序是從一個 public 類的 main 函數開始執行的,(其實是main線程),就像 C 程序 是從 main() 函數開始執行一樣。 只能有一個
public 類是為了給類裝載器提供方便。 一個 public 類只能定義在以它的類名為文件名的文件中。
每個編譯單元(文件)都只有一個 public 類。因為每個編譯單元都只能有一個公共接口,用 public 類來表現。該接口可以按照要求包含眾多的支持包訪問權限的類。如果有一個以上的 public 類,編譯器就會報錯。 并且 public類的名稱必須與文件名相同(嚴格區分大小寫)。 當然一個編譯單元內也可以沒有 public 類。
4. 成員變量和類變量的區別
由static修飾的變量稱為靜態變量,其實質上就是一個全局變量。如果某個內容是被所有對象所共享,那么該內容就應該用靜態修飾;沒有被靜態修飾的內容,其實是屬于對象的特殊描述。
不同的對象的實例變量將被分配不同的內存空間, 如果類中的成員變量有類變量,那么所有對象的這個類變量都分配給相同的一處內存,改變其中一個對象的這個類變量會影響其他對象的這個類變量,也就是說對象共享類變量。
成員變量和類變量的區別:
1、兩個變量的生命周期不同
成員變量隨著對象的創建而存在,隨著對象的回收而釋放。
靜態變量隨著類的加載而存在,隨著類的消失而消失。
2、調用方式不同
成員變量只能被對象調用。
靜態變量可以被對象調用,還可以被類名調用。
3、別名不同
成員變量也稱為實例變量。
靜態變量也稱為類變量。
4、數據存儲位置不同
成員變量存儲在堆內存的對象中,所以也叫對象的特有數據。
靜態變量數據存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據。
static 關鍵字,是一個修飾符,用于修飾成員(成員變量和成員函數)。
特點:
1、想要實現對象中的共性數據的對象共享。可以將這個數據進行靜態修飾。
2、被靜態修飾的成員,可以直接被類名所調用。也就是說,靜態的成員多了一種調用方式。類名.靜態方式。
3、靜態隨著類的加載而加載。而且優先于對象存在。
弊端:
1、有些數據是對象特有的數據,是不可以被靜態修飾的。因為那樣的話,特有數據會變成對象的共享數據。這樣對事物的描述就出了問題。所以,在定義靜態時,必須要明確,這個數據是否是被對象所共享的。
2、靜態方法只能訪問靜態成員,不可以訪問非靜態成員。
因為靜態方法加載時,優先于對象存在,所以沒有辦法訪問對象中的成員。
3、靜態方法中不能使用this,super關鍵字。
因為this代表對象,而靜態在時,有可能沒有對象,所以this無法使用。
什么時候定義靜態成員呢?或者說:定義成員時,到底需不需要被靜態修飾呢?
成員分兩種:
1、成員變量。(數據共享時靜態化)
該成員變量的數據是否是所有對象都一樣:
如果是,那么該變量需要被靜態修飾,因為是共享的數據。
如果不是,那么就說這是對象的特有數據,要存儲到對象中。
2、成員函數。(方法中沒有調用特有數據時就定義成靜態)
如果判斷成員函數是否需要被靜態修飾呢?
只要參考,該函數內是否訪問了對象中的特有數據:
如果有訪問特有數據,那方法不能被靜態修飾。
如果沒有訪問過特有數據,那么這個方法需要被靜態修飾。
成員變量和靜態變量的區別:
1、成員變量所屬于對象。所以也稱為實例變量。
靜態變量所屬于類。所以也稱為類變量。
2、成員變量存在于堆內存中。
靜態變量存在于方法區中。
3、**成員變量隨著對象創建而存在。隨著對象被回收而消失。
靜態變量隨著類的加載而存在。隨著類的消失而消失**。
4、成員變量只能被對象所調用 。
靜態變量可以被對象調用,也可以被類名調用。
所以,成員變量可以稱為對象的特有數據,靜態變量稱為對象的共享數據。
5. 類的構造方法
1、構造方法的名字和類名相同,并且沒有返回值。
2、構造方法主要用于為類的對象定義初始化狀態。
3、我們不能直接調用構造方法,必須通過new關鍵字來自動調用,從而創建類的實例。
4、Java的類都要求有構造方法,如果沒有定義構造方法,Java編譯器會為我們提供一個缺省的構造方法,也就是不帶參數的構造方法。
new關鍵字的作用
1、為對象分配內存空間。
2、引起對象構造方法的調用。
3、為對象返回一個引用。
摘自:http://www.runoob.com/java/java-object-classes.html
總結
以上是生活随笔為你收集整理的Java 对象和类的一些笔记总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积神经网络迁移学习
- 下一篇: 放倒师妃暄txt(放倒师妃暄)