欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 類(lèi)與對(duì)象重難點(diǎn)詳解

 更新時(shí)間:2021年11月05日 14:17:25   作者:Lockey-s  
類(lèi)(class)和對(duì)象(object)是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語(yǔ)言的合稱(chēng)。對(duì)象是對(duì)客觀事物的抽象,類(lèi)是對(duì)對(duì)象的抽象。類(lèi)是一種抽象的數(shù)據(jù)類(lèi)型

什么是類(lèi)、對(duì)象?

因?yàn)橛?jì)算機(jī)并不能像我們?nèi)诉@樣去理解世界上的東西,所以為了更好的編輯,就抽象出了類(lèi)和對(duì)象。類(lèi)就是把功能放在一起,然后由一個(gè)人去調(diào)用這個(gè)功能,然后再編輯對(duì)應(yīng)的功能。調(diào)用者就是對(duì)象的實(shí)現(xiàn)者

類(lèi)和類(lèi)的實(shí)例化

類(lèi)是一類(lèi)對(duì)象的統(tǒng)稱(chēng),對(duì)象就是這一類(lèi)具體化的實(shí)例
創(chuàng)建類(lèi)的關(guān)鍵字:class

舉例:我們坐年糕的模子就是一個(gè)類(lèi),而通過(guò)這個(gè)模子可以做出月餅。在這個(gè)例子當(dāng)中,類(lèi)就是模具,年糕就是實(shí)例化的對(duì)象。一個(gè)類(lèi)可以實(shí)例化很多對(duì)象。舉例:

class Person {
    public String name;
    public int age;
}
public static void main1(String[] args) {
    Person person1 = new Person();
    Person person2 = new Person();
    Person person3 = null;
}

Person 就是一個(gè)類(lèi),里面的 name 和 int 就是類(lèi)的成員(字段)。這里的 person1 就是引用,指向的是后面 new 的對(duì)象,因?yàn)槭且?,所以也可以指?null 。person3 就是指向空(null)引用。person1 person2 person3 就是實(shí)例化的對(duì)象。

字段的初始化

字段就是類(lèi)里面的成員。在創(chuàng)建這些成員的時(shí)候就可以初始化。例如:

class Person {
    public String name = "Lockey";
    public int age = 10;
}

這里就是創(chuàng)建的時(shí)候?qū)ζ溥M(jìn)行初始化。其實(shí)并不建議直接初始化,建議在類(lèi)的調(diào)用者使用的時(shí)候再初始化。如下:

class Person {
    public String name;
    public int age;
}
public static void main(String[] args) {
    Person person1 = new Person();
    person1.name = "Lockey";
    person1.age = 10;
    System.out.println(person1.name);
    System.out.println(person1.age);
}

這里就是在類(lèi)的調(diào)用者里面對(duì)類(lèi)的字段進(jìn)行賦值,在 main 方法當(dāng)中通過(guò)引用調(diào)用。

在這里插入圖片描述

類(lèi)當(dāng)中實(shí)現(xiàn)方法

就像上面的例子,如果類(lèi)的調(diào)用者需要名字和年齡的時(shí)候,輸出兩行比較麻煩,類(lèi)的實(shí)現(xiàn)者就可以在類(lèi)內(nèi)寫(xiě)一個(gè)方法,直接返回名字和年齡。示例:

class Person {
    public String name;
    public int age;
    public void print() {
        System.out.println("姓名:"+name+" 年齡:"+age);
    }
}
public static void main(String[] args) {
    Person person1 = new Person();
    person1.name = "Lockey";
    person1.age = 10;
    person1.print();
}

在這里插入圖片描述

static 靜態(tài)關(guān)鍵字

static 可以修飾方法,屬性。要注意的是:static 修飾的變量通過(guò)類(lèi)名訪問(wèn)。直接舉例說(shuō)明:

class Person {
    public int a;
    public static int count;
}
public static void main(String[] args) {
    Person person1 = new Person();
    person1.a++;
    person1.count++;
    System.out.println(person1.a);
    System.out.println(Person.count);
    Person person2 = new Person();
    person2.a++;
    person2.count++;
    System.out.println(person2.a);
    System.out.println(person2.count);
}

在這里插入圖片描述

如圖,count 第二次輸出為 2 。這是因?yàn)?conut 是被 static 修飾的變量,被 static 修飾之后就變成了常量,就在靜態(tài)區(qū)了。所以每個(gè)引用當(dāng)中調(diào)用的 count 沒(méi)變。所以第二次改變 count 的值的時(shí)候,就變成 2 了。當(dāng) static 修飾方法的時(shí)候,無(wú)需再創(chuàng)建對(duì)象,直接拿類(lèi)名調(diào)用就行了。舉例:

class Person {
    public static int count;
    public static void change() {
        count = 100;
    }
}
public static void main(String[] args) {
    Person.change();
    System.out.println(Person.count);
}

在這里插入圖片描述

通過(guò)類(lèi)名的調(diào)用直接訪問(wèn) static 修飾的變量。

封裝

因?yàn)榇a實(shí)現(xiàn)的軟件很復(fù)雜,所以就出現(xiàn)了類(lèi),但是為了閱讀性更高,就出現(xiàn)了封裝。就是把一個(gè)類(lèi)的內(nèi)容實(shí)現(xiàn)為只剩一個(gè)或幾個(gè)接口,方便類(lèi)的調(diào)用者訪問(wèn),這樣就降低了代碼的復(fù)雜程度。

private 實(shí)現(xiàn)封裝

private 就是修飾成員變量或方法的關(guān)鍵字,被 private 修飾之后,就不能被類(lèi)外的調(diào)用者訪問(wèn)了。所以就可以配合 public 來(lái)實(shí)現(xiàn)對(duì)外的接口。例如:

class Person {
    private String name = "Lockey";
    private int age = 10;
    public void print() {
        System.out.println("名字是:"+name+" 年齡:"+age);
    }
}
public static void main(String[] args) {
    Person person = new Person();
    person.print();
}

在這里插入圖片描述

這里就是利用 private 封裝屬性,使其只能在類(lèi)內(nèi)被訪問(wèn)到。而提供的 public 接口,就讓類(lèi)的調(diào)用者在類(lèi)外就可以訪問(wèn)到了。所以在類(lèi)外直接調(diào)用 print 方法就好了。

setter 和 getter 方法

當(dāng)我們把字段(name age)設(shè)置為 private 屬性時(shí),就無(wú)法在類(lèi)外進(jìn)行初始化了,所以就又出現(xiàn)了新的方法:

setter :在類(lèi)外直接調(diào)用此方法,然后設(shè)置一個(gè)值。

有了 setter 就又有了 getter 方法。getter 就是獲取字段數(shù)的值。通過(guò)類(lèi)外調(diào)用,將字段設(shè)置為此值。代碼示例:

class Person {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name1) {
        name = name1;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age1) {
        age = age1;
    }
    public void print() {
        System.out.println("名字是:"+name+" 年齡:"+age);
    }
}
public static void main(String[] args) {
    Person person = new Person();
    person.setName("Lockey");
    person.getName();
    person.setAge(10);
    person.getAge();
    person.print();
}

在這里插入圖片描述

這里就是調(diào)用 getter 和 setter 方法,在類(lèi)外進(jìn)行訪問(wèn),因?yàn)?private 對(duì) name 和 age 做了封裝。

構(gòu)造方法

方法名和類(lèi)名是相同的,且構(gòu)造方法沒(méi)有返回值。調(diào)用完構(gòu)造方法之后,對(duì)象才會(huì)產(chǎn)生。

一個(gè)對(duì)象的產(chǎn)生:
1 為對(duì)象分配內(nèi)存。
2 調(diào)用合適的構(gòu)造方法。

class Person {
    public Person() {
        System.out.println("Person 不帶參數(shù)的構(gòu)造方法");
    }
}
public static void main(String[] args) {
    Person person = new Person();
}

在這里插入圖片描述

這里就是實(shí)例化類(lèi)的對(duì)象的時(shí)候調(diào)用的構(gòu)造方法,因?yàn)槲覀冏约簩?xiě)了構(gòu)造方法,所以這里就調(diào)用我i們寫(xiě)過(guò)的。就輸出了如圖所示的內(nèi)容。需要注意的是:如果沒(méi)有實(shí)現(xiàn)如何的構(gòu)造方法,編譯器會(huì)幫我們默認(rèn)生成有個(gè)不帶參數(shù)的構(gòu)造方法。也就是說(shuō),一個(gè)類(lèi),至少會(huì)有一個(gè)構(gòu)造方法。

除了上面這種構(gòu)造方法,我們還能寫(xiě)帶有參數(shù)的構(gòu)造方法。例如:

class Person {
    private String name;
    public Person(String name1) {
        name = name1;
        System.out.println("Person(String) 帶一個(gè)參數(shù)的構(gòu)造方法");
    }
}
public static void main(String[] args) {
    Person person = new Person("Lockey");
}

在這里插入圖片描述

如圖:在類(lèi)初始化的時(shí)候,傳入?yún)?shù) “Lockey” 在類(lèi)實(shí)例化的時(shí)候就是調(diào)用有參數(shù)的構(gòu)造方法。既然能傳參數(shù),那是否可以傳多個(gè)參數(shù)呢?答案是可以的。例如:

class Person {
    private String name;
    private int age;
    public Person(String name1, int age1) {
        name = name1;
        age = age1;
        System.out.println("Person(String, int) 帶兩個(gè)參數(shù)的構(gòu)造方法");
    }
}
public static void main(String[] args) {
    Person person = new Person("Lockey",10);
}

在這里插入圖片描述

如圖,調(diào)用的就是傳了兩個(gè)參數(shù)的構(gòu)造方法。通過(guò)觀察上面的例子,我們可以發(fā)現(xiàn):構(gòu)造方法也是支持重載的。

this 關(guān)鍵字

在類(lèi)當(dāng)中,this 表示當(dāng)前對(duì)象的引用(不是當(dāng)前對(duì)象),可以通過(guò) this 來(lái)訪問(wèn)類(lèi)當(dāng)中的字段和方法。用 this 的話,會(huì)降低出現(xiàn) bug 的概率,并且增加代碼的可讀性。例如使用 getter 和 setter 的時(shí)候,就可以用 this ,能多用 this 就多用 this 。

class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

匿名對(duì)象

匿名對(duì)象就是沒(méi)有名字的對(duì)象。

沒(méi)有引用的對(duì)象稱(chēng)為匿名對(duì)象.
匿名對(duì)象只能在創(chuàng)建對(duì)象時(shí)使用.
如果一個(gè)對(duì)象只是用一次, 后面不需要用了, 可以考慮使用匿名對(duì)象.

代碼示例:

class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void print() {
        System.out.println("名字是:"+name+" 年齡:"+age);
    }
}
public static void main(String[] args) {
    new Person("Lockey",10).print();
}

在這里插入圖片描述

匿名對(duì)象的缺點(diǎn)就是只能調(diào)用一次。

到此這篇關(guān)于Java 類(lèi)與對(duì)象重難點(diǎn)詳解的文章就介紹到這了,更多相關(guān)Java 類(lèi)與對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決IDEA占用C盤(pán)空間過(guò)大的問(wèn)題

    解決IDEA占用C盤(pán)空間過(guò)大的問(wèn)題

    這篇文章主要介紹了解決IDEA占用C盤(pán)空間過(guò)大的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 一文讀懂IDEA里面的Artifact到底是什么

    一文讀懂IDEA里面的Artifact到底是什么

    這篇文章主要介紹了IDEA里面的Artifact到底是什么,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-01-01
  • Spring Cloud Config配置文件使用對(duì)稱(chēng)加密的方法

    Spring Cloud Config配置文件使用對(duì)稱(chēng)加密的方法

    Spring Cloud Config提供了兩種加密解密方式,一種是對(duì)稱(chēng)加密,一種是非對(duì)稱(chēng)加密。這篇文章將先展示如何使用對(duì)稱(chēng)加密。感興趣的朋友跟隨腳步之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Java京東面試題之為什么HashMap線程不安全

    Java京東面試題之為什么HashMap線程不安全

    那天,小二去京東面試,面試官老王一上來(lái)就甩給了他一道面試題:為什么 HashMap 是線程不安全的?這個(gè)問(wèn)題哪能難的住小二,這篇文章詳細(xì)解答該題目
    2021-11-11
  • SpringMVC訪問(wèn)靜態(tài)資源的方法

    SpringMVC訪問(wèn)靜態(tài)資源的方法

    本篇文章主要介紹了SpringMVC訪問(wèn)靜態(tài)資源的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • eclipse連接不到genymotion問(wèn)題的解決方案

    eclipse連接不到genymotion問(wèn)題的解決方案

    今天小編就為大家分享一篇關(guān)于eclipse連接不到genymotion問(wèn)題的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • 詳解JAVA的控制語(yǔ)句

    詳解JAVA的控制語(yǔ)句

    這篇文章主要介紹了Java中的控制語(yǔ)句,循環(huán)等語(yǔ)句是Java編程中流程控制的基礎(chǔ),需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • springcloud 熔斷器Hystrix的具體使用

    springcloud 熔斷器Hystrix的具體使用

    本篇文章主要介紹了springcloud 熔斷器Hystrix的具體使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • java實(shí)現(xiàn)人員信息管理系統(tǒng)

    java實(shí)現(xiàn)人員信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)人員信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用Spring來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的工作流引擎

    使用Spring來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的工作流引擎

    這篇文章主要給大家介紹了關(guān)于使用Spring來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的工作流引擎的相關(guān)資料,需要的朋友可以參考下
    2006-12-12

最新評(píng)論