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