Java 構(gòu)造方法的使用詳解
1. 看一個(gè)需求
看一個(gè)需求:前面我們?cè)趧?chuàng)建人類的對(duì)象時(shí),是先把一個(gè)對(duì)象創(chuàng)建好后,再給他的年齡和姓名屬性賦值,如果現(xiàn)在要求,在創(chuàng)建人類的對(duì)象時(shí),就直接指定這個(gè)對(duì)象的年齡和姓名,該怎么做? 這時(shí)就可以使用構(gòu)造器。
2. 基本語法
[修飾符] 方法名(形參列表){
方法體;
}
說明:
- 構(gòu)造器的修飾符可以默認(rèn), 也可以是
public protected private - 構(gòu)造器沒有返回值
- 方法名 和類名字必須一樣
- 參數(shù)列表 和 成員方法一樣的規(guī)則
- 構(gòu)造器的調(diào)用, 由系統(tǒng)完成
3. 基本介紹
構(gòu)造方法又叫構(gòu)造器(constructor),是類的一種特殊的方法,它的主要作用是完成對(duì)新對(duì)象的初始化。它有幾個(gè)特點(diǎn):
- 方法名和類名相同
- 沒有返回值
- 在創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)的調(diào)用該類的構(gòu)造器完成對(duì)象的初始化。
4. 快速入門
現(xiàn)在就用構(gòu)造方法來完成剛才提出的問題:在創(chuàng)建人類的對(duì)象時(shí),就直接指定這個(gè)對(duì)象的年齡和姓名
Constructor01.java
public class Constructor01 {
//編寫一個(gè)main方法
public static void main(String[] args) {
//當(dāng)我們new 一個(gè)對(duì)象時(shí),直接通過構(gòu)造器指定名字和年齡
Person p1 = new Person("smith", 80);
System.out.println("p1的信息如下");
System.out.println("p1對(duì)象name=" + p1.name);//smith
System.out.println("p1對(duì)象age=" + p1.age);//80
}
}
//在創(chuàng)建人類的對(duì)象時(shí),就直接指定這個(gè)對(duì)象的年齡和姓名
//
class Person {
String name;
int age;
//構(gòu)造器
//老韓解讀
//1. 構(gòu)造器沒有返回值, 也不能寫void
//2. 構(gòu)造器的名稱和類Person一樣
//3. (String pName, int pAge) 是構(gòu)造器形參列表,規(guī)則和成員方法一樣
public Person(String pName, int pAge) {
System.out.println("構(gòu)造器被調(diào)用,完成對(duì)象的屬性初始化");
name = pName;
age = pAge;
}
}

5. 注意事項(xiàng)和使用細(xì)節(jié)

public class ConstructorDetail {
//編寫一個(gè)main方法
public static void main(String[] args) {
Person p1 = new Person("xdr630", 24);//第1個(gè)構(gòu)造器
Person p2 = new Person("tom");//第2個(gè)構(gòu)造器
}
}
class Person {
String name;
int age;//默認(rèn)0
//第1個(gè)構(gòu)造器
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}
//第2個(gè)構(gòu)造器, 只指定人名,不需要指定年齡
public Person(String pName) {
name = pName;
}
}

class Dog {
//如果程序員沒有定義構(gòu)造器,系統(tǒng)會(huì)自動(dòng)給類生成一個(gè)默認(rèn)無參構(gòu)造器(也叫默認(rèn)構(gòu)造器)
//使用javap指令 反編譯看看
/*
默認(rèn)構(gòu)造器
Dog() {
}
*/
//一旦定義了自己的構(gòu)造器,默認(rèn)的構(gòu)造器就覆蓋了,就不能再使用默認(rèn)的無參構(gòu)造器,
//除非顯式的定義一下,即: Dog(){} 寫 (這點(diǎn)很重要)
//
public Dog(String dName) {
//...
}
Dog() { //顯式的定義一下 無參構(gòu)造器
}
}
6. 練習(xí)
ConstructorExercise.java
在前面定義的 Person 類中添加兩個(gè)構(gòu)造器:
- 第一個(gè)無參構(gòu)造器:利用構(gòu)造器設(shè)置所有人的 age 屬性初始值都為 18
- 第二個(gè)帶 pName 和 pAge 兩個(gè)參數(shù)的構(gòu)造器:使得每次創(chuàng)建 Person 對(duì)象的同時(shí)初始化對(duì)象的 age 屬性值和 name 屬性值。分別使用不同的構(gòu)造器:
public class ConstructorExercise {
//編寫一個(gè)main方法
public static void main(String[] args) {
Person p1 = new Person();//無參構(gòu)造器
//下面輸出 name = null, age = 18
System.out.println("p1的信息 name=" + p1.name + " age=" + p1.age);
Person p2 = new Person("scott", 50);
//下面輸出 name = scott, age = 50
System.out.println("p2的信息 name=" + p2.name + " age=" + p2.age);
}
}
/**
* 在前面定義的Person類中添加兩個(gè)構(gòu)造器:
* 第一個(gè)無參構(gòu)造器:利用構(gòu)造器設(shè)置所有人的age屬性初始值都為18
* 第二個(gè)帶pName和pAge兩個(gè)參數(shù)的構(gòu)造器:
* 使得每次創(chuàng)建Person對(duì)象的同時(shí)初始化對(duì)象的age屬性值和name屬性值。
* 分別使用不同的構(gòu)造器,創(chuàng)建對(duì)象.
*/
class Person {
String name;//默認(rèn)值 null
int age;//默認(rèn) 0
//第一個(gè)無參構(gòu)造器:利用構(gòu)造器設(shè)置所有人的age屬性初始值都為18
public Person() {
age = 18;
}
//第二個(gè)帶pName和pAge兩個(gè)參數(shù)的構(gòu)造器
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}
}

到此這篇關(guān)于Java 構(gòu)造方法的使用詳解的文章就介紹到這了,更多相關(guān)Java 構(gòu)造方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java中有關(guān)構(gòu)造方法中的輸出
- Java基礎(chǔ)學(xué)習(xí)之構(gòu)造方法詳解
- java線程組構(gòu)造方法源碼解析
- 詳解Java的構(gòu)造方法及類的初始化
- 深入探究Java線程的創(chuàng)建與構(gòu)造方法
- java中構(gòu)造方法及this關(guān)鍵字的用法實(shí)例詳解(超詳細(xì))
- Java字節(jié)緩存流的構(gòu)造方法之文件IO流
- Java構(gòu)造方法和方法重載詳解
- Java構(gòu)造方法 super 及自定義異常throw合集詳解用法
- java構(gòu)造器 默認(rèn)構(gòu)造方法及參數(shù)化構(gòu)造方法
- Java構(gòu)造方法有什么作用?
相關(guān)文章
Spring Boot整合mybatis使用注解實(shí)現(xiàn)動(dòng)態(tài)Sql、參數(shù)傳遞等常用操作(實(shí)現(xiàn)方法)
這篇文章主要介紹了Spring Boot整合mybatis使用注解實(shí)現(xiàn)動(dòng)態(tài)Sql、參數(shù)傳遞等常用操作(實(shí)現(xiàn)方法),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Java實(shí)現(xiàn)導(dǎo)出Excel功能
通過java中Controller層,來接受請(qǐng)求,數(shù)據(jù)庫查詢到的數(shù)據(jù)進(jìn)行封裝,然后使用ExcelUtils進(jìn)行輸出,接下來通過本文給大家分享Java實(shí)現(xiàn)導(dǎo)出Excel功能的實(shí)例代碼,感興趣的朋友跟隨小編一起看看吧2021-11-11
由ArrayList來深入理解Java中的fail-fast機(jī)制
fail-fast俗稱快速失敗,是在多線程進(jìn)行迭代操作時(shí)產(chǎn)生沖突的一種異常拋出機(jī)制,下面我們就由ArrayList來深入理解Java中的fail-fast機(jī)制.2016-05-05
淺談Java實(shí)現(xiàn)面向?qū)ο缶幊蘪ava oop
這篇文章主要介紹了淺談Java實(shí)現(xiàn)面向?qū)ο缶幊蘪ava oop,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java?pdf文件書簽承前縮放驗(yàn)證的設(shè)置方法
很多朋友不知道是什么是書簽承前縮放,簡單說就是可以任意改變當(dāng)前pdf文檔縮放比例,點(diǎn)擊書簽后不影響其縮放比率,本文給大家介紹下Java?pdf文件書簽承前縮放驗(yàn)證的設(shè)置方法,感興趣的朋友一起看看吧2022-02-02
SpringBoot整合Redisson實(shí)現(xiàn)高性能實(shí)時(shí)排行榜
在當(dāng)今的互聯(lián)網(wǎng)應(yīng)用中,排行榜功能幾乎無處不在,那么如何用Spring Boot和Redisson快速搭建一個(gè)高性能的實(shí)時(shí)排行榜呢,下面我們就來詳細(xì)聊聊這個(gè)技術(shù)方案吧2025-04-04

