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

詳解Java中的有參構造方法與無參構造方法

 更新時間:2023年06月07日 11:22:36   作者:源的世界  
這篇文章主要詳細介紹了Java中有參構造方法與無參構造方法,文中有詳細的代碼示例,讓大家清晰明了的了解到有參構造方法與無參構造方法、以及應用,需要的朋友可以參考下

前言

遇到了就簡單寫一下吧,如果能夠對你有幫助,點個贊吧。首先清晰明了的了解到有參構造方法與無參構造方法、以及應用,然后實戰(zhàn)項目一般會使用的Lombok,不會手動再生成get、set。

定義:
在編寫一個類時沒有添加無參構造方法,那么編譯器會自動添加無參構造方法;(如果自己手動添加構造函數(shù),無論有參數(shù)或是沒參數(shù),默認構造函數(shù)都將無效)
編寫時添加有參構造方法而未添加無參構造方法,那么編譯器只認有參構造方法而不會默認添加無參構造方法。
如果需要使用無參構造方法,一定要在類里面添加。

有參構造方法

在之前我們要為一個對象賦值,先要創(chuàng)建好對象之后然后“對象名.屬性名”或者調用屬性的setter為屬性賦值。但是在很多時候覺得這樣做很麻煩,最好的做法是在創(chuàng)建對象的時候完成屬性的初始化操作,此時需要使用到有參數(shù)構造方法方能完成該功能(有人把構造方法叫做構造器)。

例子:(idea快捷鍵Alt+insert生成構造方法和get、set等)

1、定義一個Student類

package com.hn.yuan.common;
/**
 * 有參構造方法
 */
public class Student {
    private String name;
    private String age;
    public Student(String name, String age) {
        this.name = name;
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public String getAge() {
        return age;
    }
    public void start(){
        System.out.println("我叫"+name+"今年"+age+"歲了");
    }
}

2、定義一個Test類,來進行查看運行效果

package com.hn.yuan.common;
public class Test {
    public static void main(String[] args) {
        //使用有參數(shù)的構造方法實例化對象
        Student st=new Student("張三","18");
        st.start();
    }
}

運行效果

此時發(fā)現(xiàn)了我們不需要像之前一樣,要為對象的屬性賦值就必須先創(chuàng)建對象再使用“對象名.屬性名”或者使用setter 方法去實現(xiàn)了,而是直接使用有參數(shù)的構造方法去實現(xiàn)。

3、定義原理呈現(xiàn)

在編寫一個類時沒有添加無參構造方法,那么編譯器會自動添加無參構造方法;(如果自己手動添加構造函數(shù),無論有參數(shù)或是沒參數(shù),默認構造函數(shù)都將無效)

編寫時添加有參構造方法而未添加無參構造方法,那么編譯器只認有參構造方法而不會默認添加無參構造方法。
如果需要使用無參構造方法,一定要在類里面添加。

無參構造方法

作用:無參構造方法一般是用來初始化:如為變量賦初值、初始化對象等。

在之前我們使用過方法,在調用的方法的是時候需要在方法名稱之后加.上小括號,括號里面可以傳遞實參,那么我們在創(chuàng)建一個對象的時候使用的是“new類名()”的方式去實現(xiàn),其實上這也是一種方法,但是這個方法我們沒有明確的去定義,那為什么可以調用呢?觀察代碼。

例子:

1、首先,我們定義一個Student類

package com.hn.yuan.common;
/**
 * 無參構造方法
 */
public class Student {
    private String name;
    private String age;
    //含有 無參構造方法
    public Student() {
        System.out.println("調用了無參構造方法");
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public String getAge() {
        return age;
    }
    public void start(){
        System.out.println("我叫"+name+"今年"+age+"歲了");
    }
}

2、定義一個Test類,來進行查看運行效果

package com.hn.yuan.common;
public class Test {
    public static void main(String[] args) {
        //使用有參數(shù)的構造方法實例化對象
        Student st=new Student();
        System.out.println(st);
    }
}

運行效果

定義四個類說明情況(如果還不清晰請看)

類Person1 自己不手動添加任何無參或有參數(shù)構造方法 (實例化對象時:編譯通過)
類Person2 自己添加無參的構造方法 (實例化對象時:編譯通過)
類Person3 有參數(shù)的構造方法 (實例化對象時:不通過)
類Person4 自己添加無參的構造方法,和有參數(shù)的構造方法 (實例化對象時:編譯通過)

//定義類Person1   自己不手動添加任何無參或有參數(shù)構造方法
class Person1{
    private int age;
    private String name;
    private String sex;
}
//定義類Person2   自己添加無參的構造方法
class Person2{
    private int age;
    private String name;
    private String sex;
    public Person2(){
        System.out.println("無參構造方法被調用");
    }
}
//定義類Person3   有參數(shù)的構造方法
class Person3{
    private int age;
    private String name;
    private String sex;
    public Person3(String name, String sex, int age ){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}
//定義類Person4   自己添加無參的構造方法,和有參數(shù)的構造方法
class Person4{
    private int age;
    private String name;
    private String sex;
    //不帶參數(shù)的構造函數(shù),可以被重載
    public Person4(){
        System.out.println("無參構造方法被調用");
    }
    //帶參數(shù)對的構造函數(shù)
    public Person4(String name, String sex, int age ){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}
public class ObjectInit_2 {
    public static void main(String[] args) {
        Person1 person1 = new Person1();//編譯通過;①實例化Person對象    ②自動調用構造方法Person( )
        Person2 person2 = new Person2();//編譯通過;打印: 無參構造方法被調用
        // 這樣寫,編譯器會報錯,原因是系統(tǒng)默認的無參構造方法被有參構造方法覆蓋,編譯器不能再提供無參構造方法
        Person3 person3 = new Person3();
        //Person4 person4 = new Person4();//編譯通過;打印: 無參構造方法被調用
        Person4 person4 = new Person4("qzz", "man", 18);//編譯通過;
    }
}

使用構造器時

1、構造器必須與類同名(如果一個源文件中有多個類,那么構造器必須與公共類同名)
2、每個類可以有一個以上的構造器
3、構造器可以有0個、1個或1個以上的參數(shù)
4、構造器沒有返回值
5、構造器總是伴隨著new操作一起調用

父類有有參構造方法有兩種情況,一只有有參構造,那么子類的構造方法中的第一句必須調用父類的有參構造方法,也就是“super(…);”,…為你傳入的參數(shù)如:

class Father {
    public Father(String lastname) {
    }
}
class Son extends Father {
    public Son() {
        super("aaaa");// 這句必須有
// 可以寫其他代碼
    }
}

二有有參也有無參構造方法,這時子類不顯示調用super,這會默認自動調用父類無參的構造方法,

class Father {
    public Father() {
    }
    public Father(String lastname) {
    }
}
class Son extends Father {
    public Son() {
        super();// 這句可以有也可以沒有,沒有寫的話會自動調用
        // 可以寫其他代碼
    }
}

Lombok的基本使用

首先我們要了解的信息:

IntelliJ IDEA 2020.3及以上版本已經內置Lombok plugin了,所以不需要安裝插件,只需要在項目添加Lombok依賴就能用了。(如果按照其它人給的辦法通過非官方渠道安裝Lombok plugin,反而可能出現(xiàn)版本兼容問題,所以IDEA 2020.3及以上版本的不要瞎搞去安裝Lombok plugin了)
同時:lombok在2020.2就開始斷更了,所以idea2021及之后的marketplace就不開始支持lombok了信息來源1(IDEA 2020.3的更新說明):https://www.jetbrains.com/idea/whatsnew/2020-3/#page__content-other

開始應用:

注意:下載的版本要與idea版本對應,要不然可能會報錯
1、官方下載之前對應idea版本的lombok

第一種:直接lombok官方:lombok各個版本下載地址

第二種:打開IDEA的File——setting——Plugins,搜索lombok,應用即可。
(一般內網狀態(tài)下,會給你個Lombok壓縮包,引入-應用-即可)

2、使用Lombok

第一種引入方式:直接在maven中添加依賴

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <!--這里由于采用springboot管理version,所以沒有version標簽-->
        </dependency>

第二種引入方式:在需要的類上面加注解@Data,會爆紅
爆紅之后,鼠標移到爆紅位置,選擇添加add ‘lombok’ to classpath即可,maven會自動幫我們添加依賴。

例子:

package com.hn.yuan.common;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
 *  lombok的使用
 */
@Data
@AllArgsConstructor
public class Student {
    private String name;
    private String age;
}

常用注解作用:
@Data
等價于@Setter、@Getter、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode

@NoArgsConstructor
@NoArgsConstructor在類上使用,這個注解可以生成無參構造方法,如下所示:

/**
 * 編譯前代碼
 */
@RequiredArgsConstructor
public class Student() {
    private String name;
    private String age;
}
/**
 * 編譯后代碼
 */
public class Student() {
    private String name;
    private String age;
    public Student() {
    }
}

@AllArgsConstructor
@AllArgsConstructor在類上使用,這個注解可以生成全參構造函數(shù),且默認不生成無參構造函數(shù)。
不過需要注意的是,這里所說的全參并不包括已經被初始化的被final關鍵字修飾的字段,因為字段一旦被final關鍵字修飾被賦值后就不能再被修改,如下所示:

/**
 * 編譯前代碼
 */
@RequiredArgsConstructor
public class Student() {
    private final String gender;
    private final Integer ages = 18;
    private String name;
    private String age;
}
/**
 * 編譯后代碼
 */
public class Student() {
    private final String gender;
    private final Integer ages = 18;
    private String name;
    private String age;
    public Student(String gender, String name, String age) {
        this.gender = gender;
        this.name = name;
        this.age = age;
    }
}

@AllArgsConstructor :注在類上,提供類的全參構造
@NoArgsConstructor :注在類上,提供類的無參構造
@Setter :注在屬性上,提供 set 方法
@Getter :注在屬性上,提供 get 方法
@EqualsAndHashCode :注在類上,提供對應的 equals 和 hashCode 方法
@Log4j/@Slf4j :注在類上,提供對應的 Logger 對象,變量名為 log

以上就是詳解Java中的有參構造方法與無參構造方法的詳細內容,更多關于Java有參與無參構造方法的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot處理跨域請求(CORS)的五種方式

    SpringBoot處理跨域請求(CORS)的五種方式

    跨域資源共享(CORS)是現(xiàn)代Web開發(fā)中常見的問題,Spring?Boot提供了多種方式來處理CORS請求,下面我將詳細介紹各種實現(xiàn)方式及其適用場景,需要的朋友可以參考下
    2025-04-04
  • java實現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    java實現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    這篇文章主要介紹了java實現(xiàn)貪吃蛇游戲代碼(附完整源碼),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 如何使用SpringBootCondition更自由地定義條件化配置

    如何使用SpringBootCondition更自由地定義條件化配置

    這篇文章主要介紹了如何使用SpringBootCondition更自由地定義條件化配置,幫助大家更好的理解和學習使用springboot框架,感興趣的朋友可以了解下
    2021-04-04
  • 解決IDEA的maven項目中沒有新建Servlet文件的選項問題

    解決IDEA的maven項目中沒有新建Servlet文件的選項問題

    這篇文章主要介紹了IDEA的maven項目中沒有新建Servlet文件的選項問題及解決方法,本文給大家分享問題原因就解決方法,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Spring Bean生命周期之Bean的注冊詳解

    Spring Bean生命周期之Bean的注冊詳解

    這篇文章主要為大家詳細介紹了Spring Bean生命周期之Bean的注冊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java依賴包漏洞檢測命令詳解

    Java依賴包漏洞檢測命令詳解

    這篇文章主要介紹了Java依賴包漏洞檢測命令,你可以在修復漏洞后快速進行依賴項的安全檢查,并生成新的報告,而不需要等待 CVE 數(shù)據庫的下載和更新,這樣可以顯著提高掃描的效率,需要的朋友可以參考下
    2024-11-11
  • Java方法參數(shù)傳遞如何實現(xiàn)

    Java方法參數(shù)傳遞如何實現(xiàn)

    這篇文章主要介紹了Java方法參數(shù)傳遞如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • spring boot 測試單元修改數(shù)據庫不成功的解決

    spring boot 測試單元修改數(shù)據庫不成功的解決

    這篇文章主要介紹了spring boot 測試單元修改數(shù)據庫不成功的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用jpa的實體對象轉json符串時懶加載的問題及解決

    使用jpa的實體對象轉json符串時懶加載的問題及解決

    這篇文章主要介紹了使用jpa的實體對象轉json符串時懶加載的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java實現(xiàn)數(shù)字轉成英文的方法

    Java實現(xiàn)數(shù)字轉成英文的方法

    這篇文章主要介紹了Java實現(xiàn)數(shù)字轉成英文的方法,涉及java數(shù)組與字符串的相關操作技巧,需要的朋友可以參考下
    2015-05-05

最新評論

安义县| 本溪市| 尼木县| 阳高县| 七台河市| 乌拉特前旗| 林口县| 泰来县| 溆浦县| 沁源县| 盐池县| 叶城县| 宁陕县| 蒙自县| 抚州市| 晋宁县| 德庆县| 衢州市| 宝山区| 南京市| 潞城市| 云林县| 丰原市| 都昌县| 贡嘎县| 武清区| 罗田县| 吉木萨尔县| 开远市| 广宗县| 温泉县| 巴彦淖尔市| 弥勒县| 朔州市| 博罗县| 新兴县| 兴仁县| 阜阳市| 贵州省| 九江县| 伊通|