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