Java 構(gòu)造方法的使用詳解
1. 看一個需求
看一個需求:前面我們在創(chuàng)建人類的對象時,是先把一個對象創(chuàng)建好后,再給他的年齡和姓名屬性賦值,如果現(xiàn)在要求,在創(chuàng)建人類的對象時,就直接指定這個對象的年齡和姓名,該怎么做? 這時就可以使用構(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
),是類的一種特殊的方法,它的主要作用是完成對新對象的初始化。它有幾個特點:
- 方法名和類名相同
- 沒有返回值
- 在創(chuàng)建對象時,系統(tǒng)會自動的調(diào)用該類的構(gòu)造器完成對象的初始化。
4. 快速入門
現(xiàn)在就用構(gòu)造方法來完成剛才提出的問題:在創(chuàng)建人類的對象時,就直接指定這個對象的年齡和姓名
Constructor01.java
public class Constructor01 { //編寫一個main方法 public static void main(String[] args) { //當(dāng)我們new 一個對象時,直接通過構(gòu)造器指定名字和年齡 Person p1 = new Person("smith", 80); System.out.println("p1的信息如下"); System.out.println("p1對象name=" + p1.name);//smith System.out.println("p1對象age=" + p1.age);//80 } } //在創(chuàng)建人類的對象時,就直接指定這個對象的年齡和姓名 // 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)用,完成對象的屬性初始化"); name = pName; age = pAge; } }
5. 注意事項和使用細(xì)節(jié)
public class ConstructorDetail { //編寫一個main方法 public static void main(String[] args) { Person p1 = new Person("xdr630", 24);//第1個構(gòu)造器 Person p2 = new Person("tom");//第2個構(gòu)造器 } } class Person { String name; int age;//默認(rèn)0 //第1個構(gòu)造器 public Person(String pName, int pAge) { name = pName; age = pAge; } //第2個構(gòu)造器, 只指定人名,不需要指定年齡 public Person(String pName) { name = pName; } }
class Dog { //如果程序員沒有定義構(gòu)造器,系統(tǒng)會自動給類生成一個默認(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(){} 寫 (這點很重要) // public Dog(String dName) { //... } Dog() { //顯式的定義一下 無參構(gòu)造器 } }
6. 練習(xí)
ConstructorExercise.java
在前面定義的 Person 類中添加兩個構(gòu)造器:
- 第一個無參構(gòu)造器:利用構(gòu)造器設(shè)置所有人的 age 屬性初始值都為 18
- 第二個帶 pName 和 pAge 兩個參數(shù)的構(gòu)造器:使得每次創(chuàng)建 Person 對象的同時初始化對象的 age 屬性值和 name 屬性值。分別使用不同的構(gòu)造器:
public class ConstructorExercise { //編寫一個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òu)造器: * 第一個無參構(gòu)造器:利用構(gòu)造器設(shè)置所有人的age屬性初始值都為18 * 第二個帶pName和pAge兩個參數(shù)的構(gòu)造器: * 使得每次創(chuàng)建Person對象的同時初始化對象的age屬性值和name屬性值。 * 分別使用不同的構(gòu)造器,創(chuàng)建對象. */ class Person { String name;//默認(rèn)值 null int age;//默認(rèn) 0 //第一個無參構(gòu)造器:利用構(gòu)造器設(shè)置所有人的age屬性初始值都為18 public Person() { age = 18; } //第二個帶pName和pAge兩個參數(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)容請搜索腳本之家以前的文章或繼續(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)鍵字的用法實例詳解(超詳細(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)文章
詳解Java Project項目打包成jar,并生成exe文件
本篇文章主要介紹了Java Project項目打包成jar,并生成exe文件,非常具有實用價值,有興趣的可以了解一下。2017-01-01Java Optional<Foo>轉(zhuǎn)換成List<Bar>的實例方法
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于Java Optional<Foo>轉(zhuǎn)換成List<Bar>的實例方法,有需要的朋友們可以跟著學(xué)習(xí)下。2021-06-06Java利用TCP實現(xiàn)服務(wù)端向客戶端消息群發(fā)的示例代碼
這篇文章主要為大家詳細(xì)介紹了Java如何利用TCP協(xié)議實現(xiàn)服務(wù)端向客戶端消息群發(fā)功能,文中的示例代碼講解詳細(xì),需要的可以參考下,希望對你有所幫助2022-08-08springboot 設(shè)置局域網(wǎng)訪問的實現(xiàn)步驟
Spring Boot是一個開源Java-based框架,用于創(chuàng)建獨立的、生產(chǎn)級別的Spring應(yīng)用,它旨在簡化Spring應(yīng)用的初始搭建及開發(fā)過程,通過提供各種自動配置的starter包,Spring Boot使得項目配置變得簡單快速,感興趣的朋友一起看看吧2024-02-02IntelliJ IDEA2020.1版本更新pom文件自動導(dǎo)包的方法
這篇文章主要介紹了IntelliJ IDEA2020.1版本更新pom文件自動導(dǎo)包的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06MyBatis直接執(zhí)行SQL的工具SqlMapper
今天小編就為大家分享一篇關(guān)于MyBatis直接執(zhí)行SQL的工具SqlMapper,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12Java中保留兩位小數(shù)的四種方法實現(xiàn)實例
今天小編就為大家分享一篇關(guān)于Java中保留兩位小數(shù)的四種方法實現(xiàn)實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02從log4j切換到logback后項目無法啟動的問題及解決方法
這篇文章主要介紹了從log4j切換到logback后項目無法啟動的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01