Java中的类基础详解
目錄
可以有多個(gè)類,但是只能由一個(gè)public類
類 = 字段 + 方法
類的構(gòu)造
沒(méi)寫構(gòu)造函數(shù)時(shí)
寫構(gòu)造函數(shù)時(shí)
構(gòu)造函數(shù)中this的用法
1.this指當(dāng)前這個(gè)對(duì)象本身
2.this解決局部變量和域同名的問(wèn)題
3.通過(guò)this調(diào)用其他構(gòu)造方法
類的修飾符和控制符
第一類:訪問(wèn)修飾符(private、default、protected、public)
第二類:其他修飾符和非訪問(wèn)修飾符(abstract、static、final)
static字段
?final
?abstract
可以有多個(gè)類,但是只能由一個(gè)public類
在每個(gè).Java程序中,可以擁有多個(gè)類,但是public類有且只能擁有一個(gè),且這個(gè)public類的名字必須與文件名相同。如圖所示:
此時(shí),程序沒(méi)有出現(xiàn)編譯報(bào)錯(cuò),但是當(dāng)我們改變一下類的名字,如圖:
此時(shí),程序編譯報(bào)錯(cuò),錯(cuò)誤 原因?yàn)?#xff1a;Test類是public的,應(yīng)該被聲明在一個(gè)叫Test.java的文件中,即文件名與主類名不相同導(dǎo)致的。
接下來(lái),我們來(lái)看一下一個(gè).java文件可以存在多個(gè)類的情況:
class Person1{public String name = "張三";public int age = 20;public void print(){System.out.println("姓名:"+name+" 年齡:"+age);} } public class Main {public static void main(String[] args) {Person1 person1 = new Person1();person1.print();} }?通過(guò)此代碼,我們可以清楚的發(fā)現(xiàn),在一個(gè).java文件 中,出現(xiàn)了多個(gè)類(Person1和Main),再次強(qiáng)調(diào)一遍,一個(gè).java文件中有且只能出現(xiàn)一個(gè)public類。
因?yàn)槊總€(gè).java文件被執(zhí)行的時(shí)候都會(huì)先執(zhí)行public類,而且只執(zhí)行public類中的代碼,如果存在其他的類但是在public類中沒(méi)有使用,就不會(huì)執(zhí)行其他的類,但是這個(gè)類的寫法必須正確,否則會(huì)編譯報(bào)錯(cuò);如果寫了其他的類并在public類中使用了該類,那么也會(huì)執(zhí)行其他類的相應(yīng)代碼。
而且除public類之外的其他類也可以寫在public類之后,即使在主類中調(diào)用到該類。如圖:
由圖可以確定,定義的類可以放在public類之前和之后。
?類 = 字段 + 方法
如圖:
由圖可見(jiàn),此代碼中的name和age都屬于Person1中的字段,print()和eat()都屬于Person1的方法
字段?是類的屬性,用變量來(lái)表示
字段(filed),通常叫做”類成員“,或”類成員變量“,有時(shí)也叫”域“,理解為”數(shù)據(jù)成員“,用來(lái)承載數(shù)據(jù)。
方法?是類的操作和功能,是用函數(shù)來(lái)表示的。
類的構(gòu)造
類的構(gòu)造可以用來(lái)給一個(gè)類的數(shù)值賦一個(gè)初值,用來(lái)初始化一個(gè)該類的對(duì)象。構(gòu)造函數(shù)與類名同名,且不需要寫返回值。
沒(méi)寫構(gòu)造函數(shù)時(shí)
如果當(dāng)我們沒(méi)有寫構(gòu)造函數(shù)時(shí),那么程序會(huì)自動(dòng)生成一個(gè)默認(rèn)的構(gòu)造函數(shù),但是這個(gè)構(gòu)造函數(shù)里面什么都沒(méi)有,類似于空值,函數(shù)中沒(méi)有任何的參數(shù),也沒(méi)有任何的語(yǔ)句,如圖:
Person1(){}?如果沒(méi)有寫構(gòu)造函數(shù),我們初始化一個(gè)新的對(duì)象的時(shí)候,不需要寫參數(shù)。如圖:
此時(shí)初始化對(duì)象時(shí),就不需要寫參數(shù)。
寫構(gòu)造函數(shù)時(shí)
如果我們自己寫了構(gòu)造函數(shù),那么程序就不會(huì)自動(dòng)給我們生成默認(rèn)的構(gòu)造函數(shù)了,并且如果我們自己寫的構(gòu)造函數(shù)中有參數(shù),我們?cè)趎ew一個(gè)對(duì)象時(shí),要寫入?yún)?shù),否則會(huì)編譯報(bào)錯(cuò),如果自己寫的構(gòu)造函數(shù)中不含有參數(shù),相應(yīng)的,我們?cè)趎ew一個(gè)對(duì)象時(shí)也不用寫參數(shù)。如圖:
如果我們自己構(gòu)造了函數(shù),且函數(shù)中含有兩個(gè)參數(shù),但是我們?cè)趯?shí)例化對(duì)象時(shí)沒(méi)有給出參數(shù),此時(shí)就會(huì)出現(xiàn)如圖所示的編譯報(bào)錯(cuò),如果我們加上兩個(gè)對(duì)應(yīng)類型的參數(shù),程序就不會(huì)再編譯報(bào)錯(cuò),如圖:
?構(gòu)造函數(shù)中this的用法
1.this指當(dāng)前這個(gè)對(duì)象本身
例如,age和this.age是一樣的,都能運(yùn)行出相應(yīng)的結(jié)果。
由運(yùn)行結(jié)果所示,證實(shí)了上述說(shuō)法。
2.this解決局部變量和域同名的問(wèn)題
?此時(shí),我明明都已經(jīng)new了一個(gè)新的對(duì)象,并且也傳入了類型對(duì)應(yīng)的參數(shù),為什么打印的時(shí)候會(huì)是這樣呢?這是因?yàn)闃?gòu)造Person1這個(gè)函數(shù)時(shí)的形參變量名和前面定義Person1這個(gè)類時(shí)的字段名相同了,那么,該如何解決呢?這時(shí),this關(guān)鍵詞也發(fā)揮作用了,如圖:
3.通過(guò)this調(diào)用其他構(gòu)造方法
在構(gòu)造函數(shù)時(shí),this可以調(diào)用另一種構(gòu)造方法,,并且這條調(diào)用語(yǔ)句必須放在第一行。
類的修飾符和控制符
相關(guān)作用:可以修飾類,也可以修飾類中的成員(字段,方法)。
第一類:訪問(wèn)修飾符(private、default、protected、public)
| 修飾類 | 當(dāng)前類 | 同包 | 子類 | 其他類 |
| Private | √ | |||
| Default | √ | √ | ||
| Protected | √ | √ | √ | |
| Public | √ | √ | √ | √ |
這四類訪問(wèn)修飾符之間的關(guān)系如上圖所示
如果不加修飾符,則默認(rèn)為default修飾。
第二類:其他修飾符和非訪問(wèn)修飾符(abstract、static、final)
| 其他修飾符/非訪問(wèn)控制符 | 作用 |
| Abstract | 修飾類,成員 |
| Static | 修飾內(nèi)部類,成員 |
| Final | 修飾類,成員。局部變量 |
static字段
1.靜態(tài)字段最本質(zhì)的特點(diǎn)是,他們是類的字段,不屬于任何一個(gè)對(duì)象實(shí)例。
2.它不保存在某個(gè)對(duì)象實(shí)例的內(nèi)存區(qū)間中,而是保存再類的內(nèi)存區(qū)域的公共存儲(chǔ)單元。
3.類中的static變量可以通過(guò)了類名直接訪問(wèn),也可以通過(guò)對(duì)象實(shí)例來(lái)訪問(wèn),兩種方法的結(jié)果是相同的。因?yàn)檫@個(gè)static變量是存在最原本的類中的,它本身和用它來(lái)實(shí)例化的對(duì)象都可以訪問(wèn)。
例如System類的in和out對(duì)象,就是屬于類的域,直接用類名來(lái)訪問(wèn),即System.in和System.out 。
?final
- final類:如果一個(gè)類被final修飾符所修飾和限定,說(shuō)明這個(gè)類不能被繼承,即不會(huì)擁有子類
- final方法:final修飾符所修飾的方法,是不能被子類所覆蓋的方法。
- final字段和final局部變量:它們的值一旦給定,就不能夠更改。并且它們是只讀量,它們能且只能被賦值一次。
- 如果一個(gè)字段被static final所同時(shí)修飾,它可以表示一個(gè)常量。如果不給定初始值,則按默認(rèn)值進(jìn)行初始化(引用類型為null,數(shù)值類型為0,Boolean類型為false)。
?abstract
- abstract只能修飾類和方法,不能修飾變量。
- 凡是用abstract修飾符修飾的類被稱為抽象類。
- 抽象類不能實(shí)例化,不能創(chuàng)建對(duì)象,設(shè)計(jì)抽象類就是用來(lái)被子類繼承的。
- abstract不能和final、private、static聯(lián)合使用,只能單獨(dú)使用abstract或者聯(lián)合public abstract使用。
- 抽象類方法在子類中必須被實(shí)現(xiàn),否則子類仍然是abstract的。
?如果給此下文代碼中的抽象類Person1實(shí)例化一個(gè)對(duì)象的時(shí)候,會(huì)發(fā)現(xiàn)編譯報(bào)錯(cuò),說(shuō)明抽象類不能實(shí)例化對(duì)象。?
抽象類就是用來(lái)被繼承的,子類可以是抽象類,也可以是非抽象類。
?
?同學(xué)們,Java中類這一節(jié)的內(nèi)容有點(diǎn)難理解,一定要多下功夫,才能摸透這其中的點(diǎn)點(diǎn)滴滴。
總結(jié)
以上是生活随笔為你收集整理的Java中的类基础详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OCP认证考试心得
- 下一篇: Java List<Long>转Lis