国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 帶你用Java全面剖析類和對象

帶你用Java全面剖析類和對象

2021-12-29 00:47富春山居_ZYY Java教程

下面小編就為大家?guī)硪黄胬斫釰ava類和對象。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

 

一、面向過程?面向對象?

C 語言是一門過程語言,在求解問題的時候關注的是過程,因此 C 語言是面向過程的。

JAVA 語言與之不同,JAVA 語言是面向對象的語言,在求解問題的時候,將問題拆分成好幾個對象,對象與對象之間相互交互從而解決問題。對象是 JAVA 語言的核心。

用通俗的例子來解釋這兩者的區(qū)別就應該是這樣的。

想要吃一碗蛋炒飯,如果是面向過程的話就應該是這樣的。

帶你用Java全面剖析類和對象

如果是面向對象的話就應該是這樣的。

帶你用Java全面剖析類和對象

過程:

我付錢廚子做蛋炒飯服務員將蛋炒飯端上來我吃蛋炒飯

整個過程是四個對象之間交互完成的,對于我而言,廚子具體炒蛋炒飯的步驟我并不需要知道,這就是面向對象。

在用 JAVA 進行設計開發(fā)時,我們需要做的就是找到對象,建立對象,使用對象,維護對象之間的關系。

 

二、類和類的實例化

類實際上就是一類對象的統(tǒng)稱,相當于一個模板;對象其實就是對類實例化出來的結果,相當于由模板產(chǎn)生的樣本。

一個模板可以產(chǎn)生多個樣本,一個類可以實例化出多個對象。

帶你用Java全面剖析類和對象

在 JAVA 當中,類是一個引用類型,需要用到關鍵字 class 來申明一個類,實際上就相當于創(chuàng)建一個新的數(shù)據(jù)類型

基本語法形式:

//創(chuàng)建一個類
class <類的名字> {
    field;//成員變量
    method;//成員方法
}
//實例化一個對象
<類的名字> <對象名> = new <類的名字>();

 

2.1普通成員變量和普通成員方法

代碼示例:

class Person {
    public int age;
    public String name;//成員變量放在對象當中,即堆上
    public void show() {
        //int a = 10;
        //a變量定義在方法中,它不是成員變量,是局部變量,在棧上開辟內(nèi)存
        System.out.println("姓名: " + name + " 年齡: " + age);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.age = 18;
        person1.name = "富春";
        person1.show();
        Person person2 = new Person();
        person2.age = 21;
        person2.name = "山居";
        person2.show();
    }
}

 代碼結果:

帶你用Java全面剖析類和對象

代碼解釋:

  • 這里通過 class 這個關鍵字創(chuàng)建了 Person 這個類(類名通常用大駝峰即每個單詞的首字母都為大寫)。
  • 像 age 和 name 這種定義在方法外部類內(nèi)部的變量稱之為 成員變量 或屬性 或 字段 。另外,這兩個變量皆為普通成員變量。
  • 像 show 這種描述對象行為的叫做方法或行為,這里通過 show 方法將姓名和年齡進行了打印。另外,該方法為普通成員方法。
  • 在 JAVA中通過類的實例(對象)點號(.)來訪問類的成員變量和成員方法,格式為:對象名.成員變量; 對象名.成員方法(實參列表);(PS:在訪問類的成員方法時,如果類的方法有形參,就必須為方法傳遞與參數(shù)類型相同的實參值)
  • 在 main 函數(shù)中,實例化了兩個對象,為對象在堆上開辟了內(nèi)存,內(nèi)存的地址存放在 person1 和 person2 中,因此這兩個變量實際上是引用變量。其中的 new 關鍵字就是用于創(chuàng)建一個對象的實例。
  •  

內(nèi)存分布:

帶你用Java全面剖析類和對象

注意:

  • 當對象中的成員變量并沒有賦初值時,引用類型默認為 null ,基本類型默認為 0 值,boolean 類型默認為 false ,char 類型默認為 "u0000"(其實就是啥也沒有)。
  • 當引用類型的變量為 null 時,即表示不引用任何對象,此時對 null 進行訪問,就會出現(xiàn)空指針異常。
  • 如果不希望成員變量使用默認值時,可以在創(chuàng)建類的時候為成員變量賦初始值,但其意義不太大,類終究是個模板,創(chuàng)造的樣本各種各樣。

代碼示例:

class Person {
    public int age;
    public String name;
    public boolean ans;
    public char ch;
    public void show() {
        System.out.println("姓名: " + name + " 年齡: " + age);
        System.out.println("ans:" + ans + " ch:" + ch);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();
        person.show();
    }
}

代碼結果:

帶你用Java全面剖析類和對象

 

2.2 靜態(tài)成員變量和靜態(tài)成員方法

代碼示例:

class Person {
    public int age;
    public static int count;
    public static final int COUNT = 99;
    //COUNT 是靜態(tài)常量
    public static void staticTest() {
        System.out.println("這是靜態(tài)成員方法");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.age = 18;
        Person.count = 20;
        System.out.println(person1.age + " " + Person.count);
        Person.staticTest();
    }
}

代碼結果:

帶你用Java全面剖析類和對象

代碼解釋:

  • 用 static 關鍵字修飾的成員變量叫做靜態(tài)成員變量,修飾的成員方法叫做靜態(tài)成員方法
  • 普通成員變量或普通成員方法的訪問需要實例化一個對象,通過引用進行訪問。但是,靜態(tài)成員變量或靜態(tài)成員方法無需創(chuàng)建實例對象,直接通過類名進行訪問,格式為:類名.成員變量; 類名.成員方法(實參列表);
  • 靜態(tài)成員變量或方法被同一個類的不同實例所共用,且不屬于對象,它們被存放在方法區(qū),只存在一份。

內(nèi)存分布:

帶你用Java全面剖析類和對象

注意:

  • 靜態(tài)方法是不能直接使用非靜態(tài)成員變量或非靜態(tài)方法。因為后兩者都和實例相關,如果需要使用的話,需要實例化對象,而靜態(tài)方法和實例無關和類相關,因此不能直接調(diào)用。這也就是為什么在 main 函數(shù)中調(diào)用其他方法,被調(diào)用的方法最好是靜態(tài)方法的原因。
  • 那么 main 函數(shù)為何非得是靜態(tài)的呢?不是靜態(tài)的又會如何?
  • 假設 main 函數(shù)不是靜態(tài)的函數(shù),那么想要調(diào)用 main 函數(shù),必須要進入 main 函數(shù)中,實例化對象,通過引用去調(diào)用 main 函數(shù),但問題就在于 main 函數(shù)壓根就沒有被調(diào)用,又如何進入到 main 函數(shù)當中呢?這就形成了一個邏輯死循環(huán),唯一的解法就在于將 main 函數(shù)設置為靜態(tài)的,通過 Java 虛擬機去調(diào)用它。

 

三、封裝

在面向對象編程中,封裝是將對象運行所需的資源封裝在程序對象中――基本上,是方法和數(shù)據(jù)。對象是“公布其接口”。其他附加到這些接口上的對象不需要關心對象實現(xiàn)的方法即可使用這個對象。這個概念就是“不要告訴我你是怎么做的,只要做就可以了。”

 

3.1 private

屬性和方法都有自身的訪問權限,private/ public 這兩個關鍵字表示 “訪問權限控制”

public: public 表明該數(shù)據(jù)成員、成員函數(shù)是對所有用戶開放的,所有用戶都可以直接進行調(diào)用
private: private 表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用。

在本章第一段代碼示例中,成員變量 age 和 name 分別被 public 所修飾,就可能出現(xiàn)以下的問題:

類的使用者必須要了解 Person 類內(nèi)部的實現(xiàn), 才能夠使用這個類. 學習成本較高。如果 Person 這個類的實現(xiàn)者修改了成員變量的名字,類的使用者就需要將自己的代碼隨之更改,如果項目的規(guī)模較大,就會導致維護的成本過高,

每個成員變量或方法的訪問權限是需要依據(jù)具體的情況仔細斟酌,而不應當隨意的設置為 public。

在這樣的思考下,private 關鍵字顯得尤為重要,被其修飾的屬性,類的使用者是不能夠直接使用的(根本沒有訪問到),需要借助接下介紹的 getter 和 setter 方法,這樣就可以不用對類里面的實現(xiàn)細節(jié)進行知曉。

 

3.2 getter 和 setter

當用 private 來修飾字段的時候,如果需要獲取或者修改這個 private 屬性,就需要使用 getter 和 setter 方法

代碼示例:

class Person {
    private int age;
    private String name;
    public int getAge() {
        return age;
    }
    public void setAge(int myAge) {
        age = myAge;
    }
    public void setName(String myMame) {
        name = myMame;
    }
    public String getName() {
        return name;
    }
    public void show() {
        System.out.println("姓名: " + name + " 年齡: " + age);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.setAge(18);
        person1.setName("富春");
        int age = person1.getAge();
        String name = person1.getName();
        System.out.println(name + " " + age);
        person1.show();
    }
}

代碼結果:

帶你用Java全面剖析類和對象

代碼解釋:

getName 和 getAge 即為 getter 方法, 表示獲取這個成員的值

setName 和 setAge 即為 setter 方法, 表示設置這個成員的值

 

四、構造方法

實例化對象時分兩步:

1。為對象分配內(nèi)存空間

2.調(diào)用對象的構造方法(構造方法不止一種)

構造方法是一種特殊方法, 使用關鍵字new實例化新對象時會被自動調(diào)用,不僅可以構造對象,也可以幫助我們對成員變量進行初始化。

 

4.1 基本語法

規(guī)則:

方法名和類名是相同的,并且沒有返回值

在類中沒有提供任何的構造函數(shù)的情況下,編譯器會默認生成一個不帶有參數(shù)的構造函數(shù)

如果類中定義了構造方法,就不會默認生成無參的構造方法

構造方法支持重載,規(guī)則和普通方法的重載一致

代碼示例:

class Person {
    private int age;
    private String name;
    public Person() {
        System.out.println("不帶參數(shù)的構造方法");
    }
    public Person(String name) {
        this.name = name;
        System.out.println("帶一個參數(shù)的構造方法");
    }
    public Person(String name,int age) {
        this.name = name;
        this.age = age;
        System.out.println("帶兩個參數(shù)的構造方法");
    }
    public void show() {
        System.out.println("姓名: " + this.name + " 年齡: " + this.age);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.show();
        Person person2 = new Person("富春");
        person2.show();
        Person person3 = new Person("山居",18);
        person3.show();
    }
}

代碼結果:

帶你用Java全面剖析類和對象

 

4.2 this 關鍵字

在此之前的代碼中出現(xiàn)了很多的 this 關鍵字,那么該關鍵字代表什么呢?

該關鍵字在對象被構造的過程中被使用,對象還未構造完,因此它并不代表當前對象,this 關鍵字代表著當前對象的引用,

可以借助 this 關鍵字來訪問對象的成員變量和成員方法,也可以通過它來調(diào)用其他的構造方法

方法:

  • this . 成員變量
  • this . 成員方法
  • this ( )

注意:

用 this 關鍵字調(diào)用其他的構造方法時一定要放在第一行靜態(tài)方法里不允許出現(xiàn) this 關鍵字,因為該關鍵字代表著當前對象的引用,而靜態(tài)的方法是不依賴于對象的

代碼示例:

class Person {
    private int age;
    private String name;
    public Person() {
        this("富春",18);//調(diào)用其他的構造方法
        System.out.println("不帶參數(shù)的構造方法");
    }
    public Person(String name,int age) {
        this.name = name;
        this.age = age;
        System.out.println("帶兩個參數(shù)的構造方法");
    }
    public void show() {
        System.out.println("姓名: " + this.name + " 年齡: " + this.age);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.show();
    }
}

代碼結果:

帶你用Java全面剖析類和對象

加 this 關鍵字是一個良好的代碼習慣。

 

五、代碼塊

Java 中用大括號 { } 將多行代碼括起來,并形成一個獨立的代碼區(qū)間的代碼形式稱為代碼塊,它是 Java 中常見的代碼形式。

根據(jù)代碼塊定義的位置以及關鍵字,又可分為以下四種:普通代碼塊、構造代碼塊、靜態(tài)代碼塊、同步代碼塊。

接下來主要向大家介紹前三種,最后一種講解多線程部分時在涉及一下。

 

5.1 普通代碼塊

它是最常見的代碼塊,是類中方法的方法體或在方法名后面。

代碼示例:

public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        {
            int b = 20;
            System.out.println(b);
        }
        System.out.println(a);
    }
}

代碼解釋:

在這里,main 方法后面跟著的 { } 所包裹的內(nèi)容是一個普通代碼塊,將定義變量 b 并且打印它的代碼包裹起來的 { } 中的內(nèi)容也是一個普通代碼塊

 

5.2 構造代碼塊

定義在類中的不加修飾符的代碼塊叫構造代碼塊也叫實例代碼塊。構造代碼塊一般用于初始化實例成員變量

代碼示例:

class Person {
    private int age;
    private String name;
    {
        this.name = "山居";
        this.age = 18;
    }
    public void show() {
        System.out.println("姓名: " + this.name + " 年齡: " + this.age);
    }
}

 

5.3 靜態(tài)代碼塊

使用 static定義的代碼塊,一般用于初始化靜態(tài)成員屬性和需要提前準備的一些數(shù)據(jù)

代碼示例:

class Person {
    private int age;
    private String name;
    public static int count;
    static {
        count = 20;
    }
    public void show() {
        System.out.println("姓名: " + this.name + " 年齡: " + this.age);
    }
}

 

5.4 注意事項

構造代碼塊優(yōu)先于構造函數(shù)執(zhí)行靜態(tài)代碼塊優(yōu)先于構造代碼塊執(zhí)行,且對于同一個類來說只執(zhí)行一次當代碼塊和成員變量同為靜態(tài)的或同為實例的時候,其值和定義的順序是有關系的

 

六、快捷方法

 

6.1 toString方法

在本章第一段代碼示例中,類里面通過 show 方法將對象的屬性進行打印,但當屬性很多時,就顯得不那么方便。因此,可以用快捷鍵。

步驟一:alt + insert 或者 鼠標右鍵點一下選擇 Generate (要在類的代碼區(qū)域執(zhí)行)

步驟二:選擇 toString()

步驟三:選擇需要打印的屬性

步驟四:選擇 OK

帶你用Java全面剖析類和對象

代碼示例:

class Person {
    public int age;
    public String name;
    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name="" + name + """ +
                "}";
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.age = 18;
        person1.name = "富春";
        System.out.println(person1);
    }
}

代碼結果:

帶你用Java全面剖析類和對象

代碼解釋:

@Override 是注解,用于解釋該方法是重寫的方法未重寫 toString 方法時,打印 person1,將會是一個地址
當重寫 toString 方法時,打印 person1,將會直接調(diào)用 toString 方法

 

6.2 setter / getter 方法

setter / getter 方法也可以使用快捷鍵自動生成

步驟一:alt + insert 或者 鼠標右鍵點一下選擇 Generate (要在類的代碼區(qū)域執(zhí)行)

步驟二:選擇 Getter and Setter

步驟三:選擇需要該方法的屬性

步驟四:選擇 OK

帶你用Java全面剖析類和對象

代碼示例:

class Person {
    private int age;
    private String name;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
        //age = age;錯誤
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void show() {
        System.out.println("姓名: " + name + " 年齡: " + age);
    }
}

代碼解釋:

自動生成的 setter 方法形參名字和類中的成員屬性的名字一樣的時候,如果不使用 this , 相當于自賦值。this 表示當前對象的引用

 

6.3 構造方法(快捷)

當想要快速生成參數(shù)個數(shù)不同的構造方法時,也有快捷鍵。

步驟一:alt + insert 或者 鼠標右鍵點一下選擇 Generate (要在類的代碼區(qū)域執(zhí)行)

步驟二:選擇 Constructor

步驟三:選擇需要該方法的屬性

步驟四:選擇 OK(無參的話,跳過步驟三,直接選擇 Select None)

帶你用Java全面剖析類和對象

代碼示例:

class Person {
    private int age;
    private String name;
    public Person() {
    }
    public Person(String name) {
        this.name = name;
    }
    public Person(int age, String name) {
        this.age = age;
        this.name = name;
    }
}

 

總結

本篇文章就到里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內(nèi)容!

原文鏈接:https://blog.csdn.net/weixin_46103589/article/details/120250269

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
主站蜘蛛池模板: 免费簧片 | 亚洲专区在线播放 | 亚洲男人天堂 | 美女毛片 | 天天射天天干 | 国内精品一区二区三区视频 | 日韩不卡一区二区三区 | 91大全| 国产精品一区二区不卡 | 国产精品精品久久久 | 午夜视频 | 日本一区二区高清不卡 | 欧美日韩精品久久久免费观看 | 国产亚洲欧美一区 | 国产欧美综合一区二区三区 | 欧美在线观看免费观看视频 | 久久久精品国产亚洲 | 成人免费观看高清视频 | 久久久久久国产 | 91精品一久久香蕉国产线看观看新通道出现 | 精品一区二区三区中文字幕老牛 | 夜夜嗨av色一区二区不卡 | 国产99久久| 黄色一级毛片 | 精品自拍视频 | 精品三级 | 成人午夜性a一级毛片免费看 | 午夜av一区二区 | 中文字幕在线观看不卡视频 | 欧美精品亚洲精品日韩精品 | 极品美女销魂一区二区三区 | 国产黄色影视 | 中文字幕在线视频观看 | 亚洲视频中文字幕 | 欧美1级片 | 精品国产成人 | 国产在线色 | 日韩成人av电影 | 一区二区三区在线视频播放 | 成人欧美一区二区三区在线观看 | 日本v在线观看 |