最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的構(gòu)造方法和方法重載完整代碼

 更新時(shí)間:2024年10月15日 09:55:24   作者:三水氣象臺(tái)  
在Java編程中,構(gòu)造方法用于初始化對(duì)象,而方法重載允許同一個(gè)類中存在多個(gè)同名方法但參數(shù)不同,文中通過代碼及圖文介紹的非常詳細(xì),需要的朋友可以參考下

一、構(gòu)造方法

1.從方法到構(gòu)造方法

今天我們來講講什么是構(gòu)造方法,不同于千篇一律一上來就給出定義(形如...的是構(gòu)造方法),先進(jìn)行一些回顧,從我們更為熟悉的“方法”下手。

那么,什么是方法?

這應(yīng)該是學(xué)習(xí)Java第一節(jié)課入門時(shí)就已經(jīng)了解了的一個(gè)名詞。方法是一種函數(shù),也是一個(gè)代碼片段,用于執(zhí)行特定的任務(wù)或操作,或者可以說是一段封裝了特定功能或任務(wù)的可重用代碼塊。

方法有哪些種類呢?

除了我們經(jīng)常接觸的實(shí)例方法(也稱成員方法),比較陌生的靜態(tài)方法,還有就是我們今天要講的構(gòu)造方法了。抽象方法目前用到的比較少,暫且不做提及。

其實(shí),構(gòu)造方法與實(shí)例方法大有不同,下面我們就來看看到底什么是構(gòu)造方法。

2.什么是構(gòu)造方法

1)構(gòu)造方法的定義

長成如下這種樣子的我們就叫做構(gòu)造方法:

→ 無返回值(含void)、方法名與類名相同,在創(chuàng)建對(duì)象時(shí)由編譯器自動(dòng)調(diào)用

public class( ){ 

}

在每個(gè)類中都自帶構(gòu)造方法,但該構(gòu)造方法無參數(shù)及方法內(nèi)容。我們也可以自己在類中創(chuàng)建構(gòu)造方法。每個(gè)類都有至少一個(gè)構(gòu)造方法,如果沒有明確定義,Java會(huì)提供一個(gè)默認(rèn)的無參構(gòu)造方法。

證明如下:創(chuàng)建一個(gè)名為空的類和一個(gè)主函數(shù)后,在out里我們尋找相對(duì)應(yīng)的文件名打開。

會(huì)得到如下的結(jié)果

2)構(gòu)造方法的作用

構(gòu)造方法是一種特殊的方法,它的作用是在創(chuàng)建對(duì)象時(shí)初始化對(duì)象的狀態(tài)。

通過構(gòu)造方法,我們可以在創(chuàng)建對(duì)象時(shí)為對(duì)象的屬性賦初值。

使用構(gòu)造方法時(shí)可以將賦值的代碼寫好,在之后主函數(shù)入口創(chuàng)建對(duì)象時(shí)就不需要使用對(duì)象變量名一個(gè)一個(gè)賦值了,可以直接按照在構(gòu)造方法中“打包”的格式在主函數(shù)中直接創(chuàng)建對(duì)象后傳入值(可以在下面的代碼實(shí)例中具體理解)。

——總結(jié)一下就是構(gòu)造方法通常用于初始化和代碼復(fù)用。

3.構(gòu)造方法的代碼實(shí)例

1) 系統(tǒng)默認(rèn)的無參構(gòu)造方法

雖然代碼中沒有明確定義構(gòu)造方法,但默認(rèn)構(gòu)造方法確實(shí)存在并被調(diào)用。

在主函數(shù)中Data實(shí)例化對(duì)象時(shí),會(huì)調(diào)用默認(rèn)構(gòu)造方法來初始化對(duì)象。

public class Data {
    private int age;
    private String name;
    private boolean gender;
    
    public void printInfo(){
        System.out.println("age"+age+"name"+name+"gender"+gender);
    }

    public static void main(String[] args){
        Data data = new Data();
        data.printInfo();
    }
    
}

輸出結(jié)果:0+null+false

2) 在1.0的基礎(chǔ)上為成員屬性進(jìn)行賦值

public class Data {
    private int age=1;
    private String name="abc";
    private boolean gender=true;

    public void printInfo(){
        System.out.println("age:————"+age+"   name:————"+name+"   gender:————"+gender);
    }

    public static void main(String[] args){
        Data data = new Data();
        data.printInfo();
    }
}

輸出結(jié)果:age:————1   name:————abc   gender:————true

3) 定義一個(gè)帶有參數(shù)的構(gòu)造方法

在主方法中,實(shí)例化Data對(duì)象時(shí)調(diào)用了新定義的帶參數(shù)的構(gòu)造方法,傳入具體的參數(shù)值來初始化對(duì)象。

public class Data {

    private int age;
    private String name;
    private boolean gender;

    public Data(int age,String name,boolean gender){
        this.age=age;
        this.name=name;
        this.gender=gender;
        System.out.println("調(diào)用一次構(gòu)造方法");

    }

    public void printInfo(){
        System.out.println("age:————"+age+"   name:————"+name+"   gender:————"+gender);
    }

    public static void main(String[] args){
        Data data = new Data(1,"abc",true);
        data.printInfo();
    }

}

輸出結(jié)果:age:————1   name:————abc   gender:————true

看到這里,我們不妨思考一下,從1.0過渡到3.0中,究竟有哪些差異,或者說是我們定義的構(gòu)造函數(shù)體現(xiàn)了什么樣的作用。

1.0是我提供的一個(gè)最基本的代碼,2.0在此基礎(chǔ)上對(duì)私有變量進(jìn)行了賦值,3.0雖然與2.0是同樣的輸出結(jié)果,但多出了一塊構(gòu)造方法,以及在創(chuàng)建(實(shí)例化)對(duì)象時(shí)也是略有差異。

4.分析代碼與總結(jié)

1)this關(guān)鍵字的一些作用

作用區(qū)分局部變量和實(shí)例變量

當(dāng)方法的參數(shù)或局部變量與實(shí)例變量同名時(shí),使用 this 可以明確指示要操作的是實(shí)例變量。
例如,this.year = year; 可以將構(gòu)造方法的參數(shù)值賦給當(dāng)前對(duì)象的實(shí)例變量。

在構(gòu)造方法中調(diào)用其他構(gòu)造方法在構(gòu)造方法中使用 this(...) 可以調(diào)用同一個(gè)類中的其他構(gòu)造方法。這樣可以避免重復(fù)代碼,并實(shí)現(xiàn)代碼的復(fù)用。
例如,this(year, month, day) 可以在構(gòu)造方法中調(diào)用另一個(gè)構(gòu)造方法來初始化對(duì)象。

this.實(shí)例變量=構(gòu)造方法中的參數(shù)值;

參數(shù)變量可以接收外部傳入的數(shù)值,將值賦給當(dāng)前類的實(shí)例變量,從而初始化對(duì)象的狀態(tài)。

2)構(gòu)造方法和一般方法的區(qū)別

從上述給出的代碼不難看出,一般方法都需要我們?cè)谥骱瘮?shù)中先創(chuàng)建對(duì)象然后利用對(duì)象調(diào)用方法,構(gòu)造方法則不需要我們調(diào)用由Java編譯器自動(dòng)調(diào)用。

二、方法重載

1.什么是方法重載?

定義:方法重載機(jī)制允許一個(gè)類中存在多個(gè)重名方法,但必須要求參數(shù)數(shù)量、(當(dāng)數(shù)量一致)參數(shù)類型、(當(dāng)數(shù)量類型一致)順序不一致。

參數(shù)數(shù)量→

參數(shù)數(shù)量

參數(shù)數(shù)量

參數(shù)類型→

參數(shù)類型

→參數(shù)順序

在上述JButton中我們可以選擇在按鈕上放字符串或者是圖標(biāo)Image就體現(xiàn)了方法重載機(jī)制。

從方法重載不難推出構(gòu)造方法也可以重載,從而一個(gè)類可以定義多個(gè)構(gòu)造方法。

2.方法重載的代碼實(shí)例

public class Car {
    private String brand;
    private String model;
    private int year;

    // 無參構(gòu)造方法
    public Car() {
        this.brand = "Unknown";
        this.model = "Unknown";
        this.year = 0;
    }

    // 帶參數(shù)的構(gòu)造方法
    public Car(String brand, String model, int year) {
        this.brand = brand;
        this.model = model;
        this.year = year;
    }

    public void displayInfo() {
        System.out.println("Car brand: " + brand);
        System.out.println("Car model: " + model);
        System.out.println("Car year: " + year);
    }

    public static void main(String[] args) {
        Car car1 = new Car(); // 調(diào)用無參構(gòu)造方法
        car1.displayInfo();

        Car car2 = new Car("Toyota", "Camry", 2022); // 調(diào)用帶參數(shù)的構(gòu)造方法
        car2.displayInfo();
    }
}

三、整體代碼(構(gòu)造方法+方法重載)

import java.util.concurrent.ThreadLocalRandom;

public class Data {
    private int age;
    private String name;
    private boolean gender;
    private long ID;

    public Data(){
        this(10,"111",true);
    }

    /**
     * true:男
     * false:女
     */
    public Data(int age,String name,boolean gender){
        this.age=age;
        this.name=name;
        this.gender=gender;
        System.out.println("---------------------------");
        randomID();//可以不需要在主函數(shù)處調(diào)用兩次
        printInfo();
        //System.out.println("調(diào)用一次構(gòu)造方法");
        System.out.println("---------------------------");

    }

    public void printInfo(){
        System.out.println("age:"+age+"\nname:"+name+"\ngender:"+gender);
    }

    public void randomID(){
        ID= ThreadLocalRandom.current().nextLong();
        System.out.println("ID:"+ID);
    }

    public static void main(String[] args){
        Data data1 = new Data(1,"abc",true);//分別會(huì)輸出一次“調(diào)用一次xxxx”
        Data data2 = new Data(2,"www",false);
        //Data data = new Data();
    }

}

從代碼運(yùn)行結(jié)果不難看出兩個(gè)data對(duì)象分別調(diào)用了一次構(gòu)造方法,總計(jì)兩次。

略有不同的是,我將所有方法的初始化都放在了構(gòu)造方法中(在構(gòu)造方法中調(diào)用了實(shí)例方法),所以主函數(shù)入口中看起來略顯單薄,這樣優(yōu)點(diǎn)確實(shí)代碼更加簡(jiǎn)便一點(diǎn),但同時(shí)也包含一些隱藏的缺點(diǎn)(如對(duì)象未完全初始化完成的情況下就提前輸出信息等等)。

總結(jié)

到此這篇關(guān)于Java中的構(gòu)造方法和方法重載的文章就介紹到這了,更多相關(guān)Java構(gòu)造方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決SpringBoot啟動(dòng)報(bào)錯(cuò):Failed?to?load?property?source?from?location?'classpath:/application.yml'問題

    解決SpringBoot啟動(dòng)報(bào)錯(cuò):Failed?to?load?property?source?from?l

    這篇文章主要介紹了解決SpringBoot啟動(dòng)報(bào)錯(cuò):Failed?to?load?property?source?from?location?'classpath:/application.yml'問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java中的getBytes()方法使用詳解

    Java中的getBytes()方法使用詳解

    這篇文章主要介紹了Java中g(shù)etBytes()方法使用的相關(guān)資料,getBytes()方法有多個(gè)重載形式,可以根據(jù)需要指定字符集來進(jìn)行轉(zhuǎn)換,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-05-05
  • Java并發(fā)編程之對(duì)象的組合

    Java并發(fā)編程之對(duì)象的組合

    這篇文章主要介紹了Java并發(fā)編程之對(duì)象的組合,文章基于Java的相關(guān)資料展開主題內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • 解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題

    解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題

    這篇文章主要介紹了解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 關(guān)于MyBatis plus條件構(gòu)造器的逐條詳解

    關(guān)于MyBatis plus條件構(gòu)造器的逐條詳解

    什么是條件構(gòu)造器呢?簡(jiǎn)單來說,條件構(gòu)造器就是用來生成我們查數(shù)據(jù)庫的sql。它可以簡(jiǎn)化sql代碼的編寫,靈活、方便且易于維護(hù)
    2021-09-09
  • 詳解SpringMVC的類型轉(zhuǎn)換及驗(yàn)證方法

    詳解SpringMVC的類型轉(zhuǎn)換及驗(yàn)證方法

    在本篇文章里面我們給大家詳細(xì)分析了SpringMVC的類型轉(zhuǎn)換及驗(yàn)證方法的相關(guān)知識(shí),對(duì)此有需要的朋友們學(xué)習(xí)下吧。
    2018-10-10
  • gateway、webflux、reactor-netty請(qǐng)求日志輸出方式

    gateway、webflux、reactor-netty請(qǐng)求日志輸出方式

    這篇文章主要介紹了gateway、webflux、reactor-netty請(qǐng)求日志輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 一文詳解SpringBoot如何切換Redis的DB

    一文詳解SpringBoot如何切換Redis的DB

    這篇文章主要為大家詳細(xì)介紹了Spring Redis動(dòng)態(tài)切換數(shù)據(jù)庫的核心機(jī)制,并指出僅調(diào)用setDatabase()和resetConnection()無法真正切換數(shù)據(jù)庫的根本原因,感興趣的小伙伴可以了解下
    2025-12-12
  • 詳解用maven搭建springboot環(huán)境的方法

    詳解用maven搭建springboot環(huán)境的方法

    本篇文章主要介紹了詳解用maven搭建springboot環(huán)境的方法,這里整理了詳細(xì)的代碼,非常具有實(shí)用價(jià)值,有需要的小伙伴可以參考下
    2017-08-08
  • 探索Java分布式限流技術(shù)

    探索Java分布式限流技術(shù)

    探索Java分布式限流技術(shù),讓你的系統(tǒng)遠(yuǎn)離流量過載的煩惱,本指南將帶你了解如何使用Java實(shí)現(xiàn)高效的限流策略,幫助你輕松應(yīng)對(duì)高并發(fā)場(chǎng)景,讓我們一起開啟這段精彩的技術(shù)之旅,打造更加穩(wěn)定可靠的系統(tǒng),需要的朋友可以參考下
    2024-03-03

最新評(píng)論

通许县| 汕尾市| 新源县| 甘洛县| 花莲市| 五河县| 松阳县| 文安县| 曲麻莱县| 抚宁县| 林芝县| 治多县| 花垣县| 垫江县| 遂昌县| 五原县| 察雅县| 顺昌县| 克拉玛依市| 钟山县| 宝丰县| 塔城市| 瑞金市| 英吉沙县| 乐陵市| 南城县| 定襄县| 夏邑县| 陇西县| 突泉县| 武穴市| 固阳县| 新建县| 綦江县| 洛浦县| 开平市| 林西县| 岱山县| 从化市| 屏山县| 香格里拉县|