Java構造函數的深入理解

我們人出生的時候,有些人一出生之后再起名字的,但是有些人一旦出生就已經起好名字的。那么我們在?java?里面怎么在對象一旦創建就賦值呢?

public class Person {String name; //    姓名int age; //    年齡public static void main(String[] args) {Person p = new Person(); //    創建了Person類型的p對象System.out.println("姓名: " + p.name + " 年齡: " + p.age); //    name = null, age = 0;//這個小孩剛出生的時候沒有姓名和年齡}

?

public class Person {String name; //    姓名int age; //    年齡//    構造方法Person(String name,int age){this.name = name; //     給對象賦予name值this.age = age; //    給對象賦予age值
    }public static void main(String[] args) {Person p = new Person("張三",1); //    創建了Person類型的p對象,并且調用構造方法賦予該對象屬性值System.out.println("姓名: " + p.name + " 年齡: " + p.age); //    name = 張三, age = 1;//這個小孩剛出生的時候已經有了姓名和年齡}

?

1. 構造方法的作用:

構造方法作用:

1).創建對象,凡是必須和new一起使用.

2).對對象進行初始化.

public class Person {String name; //    姓名int age; //    年齡//    全參構造方法Person(String name,int age){this.name = name; //     給對象賦予name值this.age = age; //    給對象賦予age值
    }//    無參構造方法
    Person(){}public static void main(String[] args) {Person p = new Person("張三",1); /*根據創建對象的實參個數,jvm回去尋找合適的構造方法,兩個實參所有會調用含有兩個參數的構造方法.Person(String name,int age)*/System.out.println("姓名: " + p.name + " 年齡: " + p.age); //    name = 張三, age = 1;//這個對象創建出來的時候已經有了自己的姓名和年齡}

?

2. 構造函數與普通函數的區別:

?

(1).?一般函數是用于定義對象應該具備的功能。而構造函數定義的是,對象在調用功能之前,在建立時,應該具備的一些內容。也就是對象的初始化內容。

(2).?構造函數是在對象建立時由?jvm?調用,?給對象初始化。一般函數是對象建立后,當對象調用該功能時才會執行。

(3).?普通函數可以使用對象多次調用,構造函數就在創建對象時調用。

(4).?構造函數的函數名要與類名一樣,而普通的函數只要符合標識符的命名規則即可。

(5).?構造函數沒有返回值類型。

?

3. 構造函數要注意的細節:

(1).?當類中沒有定義構造函數時,系統會指定給該類加上一個空參數的構造函數。這個是類中默認的構造函數。當類中如果自定義了構造函數,這時默認的構造函數就沒有了。

備注:可以通過?javap?命令驗證。

(2).?在一個類中可以定義多個構造函數,以進行不同的初始化。多個構造函數存在于類中,是以重載的形式體現的。因為構造函數的名稱都相同。

class Perosn{private int id;private String name;private int age;public Perosn(){cry();}public Perosn(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}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;}public void cry(){System.out.println("哇哇哇....");}}

問題:要求每個小孩出生都會哭,這份代碼有兩個構造函數,如果需要每個小孩出生都要哭的話,那么就需要在不同的構造函數中都調用?cry()?函數,但是這樣子的話造成了代碼重復問題,那么怎么解決呢?構造代碼塊。

4. 構造代碼塊:

構造代碼塊作用:給所有的對象進行統一的初始化。

class Perosn{private int id;private String name;private int age;{cry();// 每個Person對象創建出來都會執行這里的代碼
    }public Perosn(){cry();}public Perosn(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}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;}public void cry(){System.out.println("哇哇哇....");}}

具體作用:

? 1:給對象進行初始化。對象一建立就運行并且優先于構造函數。

? 2:與構造函數區別

? ? 1:構造代碼塊和構造函數的區別,構造代碼塊是給所有對象進行統一初始化, 構造函數給對應的對象初始化。

????2:構造代碼塊的作用:它的作用就是將所有構造方法中公共的信息進行抽取。

例如孩子一出生統一哭

代碼如下:

class Boy {String name;int age;String gender;// 構造代碼塊,給所有對象進行初始化。
    {System.out.println("哭。。。");}Boy() {System.out.println("無參構造");}Boy(String n, int a, String g) {name = n;age = a;gender = g;System.out.println("有參構造");}void run() {System.out.println("跑...");}}class Demo9 {public static void main(String[] args) {System.out.println();Boy b = new Boy();Boy b2 = new Boy("jack", 1, "男");}
}

?

轉載于:https://www.cnblogs.com/huxins/p/9017212.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389689.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1967. 作為子字符串出現在單詞中的字符串數目

1967. 作為子字符串出現在單詞中的字符串數目 給你一個字符串數組 patterns 和一個字符串 word ,統計 patterns 中有多少個字符串是 word 的子字符串。返回字符串數目。 子字符串 是字符串中的一個連續字符序列。 示例 1:輸入:patterns [&…

判斷IE版本與各瀏覽器的語句

---恢復內容開始--- 一.IE下判斷IE版本的語句 <!--[if lte IE 6]><![endif]-->IE6及其以下版本可見<!--[if lte IE 7]><![endif]-->IE7及其以下版本可見<!--[if IE 6]><![endif]-->只有IE6版本可見<![if !IE]><![endif]>除了I…

各類軟件馬斯洛需求層次分析_需求的分析層次

各類軟件馬斯洛需求層次分析When I joined Square, I was embedded on a product that had been in-market for a year but didn’t have dedicated analytics support.當我加入Square時&#xff0c;我被嵌入了已經上市一年但沒有專門的分析支持的產品。 As you might expect,…

384. 打亂數組

384. 打亂數組 給你一個整數數組 nums &#xff0c;設計算法來打亂一個沒有重復元素的數組。 實現 Solution class: Solution(int[] nums) 使用整數數組 nums 初始化對象int[] reset() 重設數組到它的初始狀態并返回int[] shuffle() 返回數組隨機打亂后的結果 示例&#xf…

HTTP/2 學習筆記

創建連接TCP三次握手:包括客戶端想服務端發起一個SYN包,接著服務端返回對應SYN的ACK響應以及新的SYN包,然后客戶端返回對應的ACK.如果客戶端發起HTTPS連接,它還需要進行傳輸層安全協議(TLS)協商;TLS用來取代安全套接層.HTTP1的問題1.隊頭阻塞:允許一次發送一組請求,但是只能按照…

MySQL的變量分類總結

在MySQL中&#xff0c;my.cnf是參數文件&#xff08;Option Files&#xff09;&#xff0c;類似于ORACLE數據庫中的spfile、pfile參數文件&#xff0c;照理說&#xff0c;參數文件my.cnf中的都是系統參數&#xff08;這種稱呼比較符合思維習慣&#xff09;&#xff0c;但是官方…

859. 親密字符串

859. 親密字符串 給你兩個字符串 s 和 goal &#xff0c;只要我們可以通過交換 s 中的兩個字母得到與 goal 相等的結果&#xff0c;就返回 true &#xff1b;否則返回 false 。 交換字母的定義是&#xff1a;取兩個下標 i 和 j &#xff08;下標從 0 開始&#xff09;且滿足 …

python函數不同類型參數順序

python函數的參數定義順序必須為&#xff1a; 必須參數&#xff08;位置參數&#xff09;&#xff0c;默認參數&#xff0c;可變參數&#xff0c;命名關鍵字參數&#xff0c;關鍵字參數 如以下定義&#xff1a; def f1(a, b, c0, *args, d, **kw): print(a , a, b , b, c , c, …

亞洲國家互聯網滲透率_發展中亞洲國家如何回應covid 19

亞洲國家互聯網滲透率The COVID-19 pandemic has severely hit various economies across the world, with global impact estimated between USD 6.1 trillion and USD 9.1 trillion, equivalent to a loss of 7.1% to 10.5% of global gross domestic product (GDP).[1] More…

create-react-app項目使用假數據

做新項目的時候&#xff0c;前端每次要等后端接口準備好再開始&#xff0c;就會延期&#xff0c;等后端接口準備好了&#xff0c;前端這邊的項目又會相互緊張&#xff0c;如果前端跟后端同時進行&#xff0c;前期將框架&#xff0c;基礎做好&#xff0c;定好接口文檔&#xff0…

1854. 人口最多的年份

1854. 人口最多的年份 給你一個二維整數數組 logs &#xff0c;其中每個 logs[i] [birthi, deathi] 表示第 i 個人的出生和死亡年份。 年份 x 的 人口 定義為這一年期間活著的人的數目。第 i 個人被計入年份 x 的人口需要滿足&#xff1a;x 在閉區間 [birthi, deathi - 1] 內…

snake4444勒索病毒成功處理教程方法工具達康解密金蝶/用友數據庫sql后綴snake4444...

*snake4444勒索病毒成功處理教程方法 案例&#xff1a;筆者負責一個政務系統的第三方公司的運維&#xff0c;上班后發現服務器的所有文件都打不開了&#xff0c;而且每個文件后面都有一個snake4444的后綴&#xff0c;通過網絡我了解到這是一種勒索病毒。因為各個文件不能正常打…

有史以來最漂亮的游戲機

The recent reveal of the PlayStation 5’s design has divided the gaming world. There are those who appreciate its bold, daring industrial design and those who would have preferred something a little less outlandish; perhaps a little more traditional.噸 他最…

springboot-添加攔截器

在我們日常開發的過程中&#xff0c;經常會遇到這一類問題&#xff0c;要求需要用戶登錄以后才能夠訪問其他的內容&#xff0c;否則不行&#xff0c;那么解決這一問題最好的辦法就是運用攔截器&#xff0c;攔截器可以和多種處理請求的web框架結合&#xff0c;今天所講的就是與s…

1945. 字符串轉化后的各位數字之和

1945. 字符串轉化后的各位數字之和 給你一個由小寫字母組成的字符串 s &#xff0c;以及一個整數 k 。 首先&#xff0c;用字母在字母表中的位置替換該字母&#xff0c;將 s 轉化 為一個整數&#xff08;也就是&#xff0c;‘a’ 用 1 替換&#xff0c;‘b’ 用 2 替換&#…

墨刀原型制作 位置選擇_原型制作不再是可選的

墨刀原型制作 位置選擇The ‘role’ of a designer has been a topic of discussion several many years now. In the past decade, the role of a Designer got split into several different roles like — Graphic Designer, User Experience Designer, Interaction Designe…

eclipse maven 構建簡單springmvc項目

環境&#xff1a;eclipse Version: Oxygen.3a Release (4.7.3a) 創建maven Project項目&#xff0c;目錄結構 修改工程的相關編譯屬性 修改pop.xml&#xff0c;引入springmvc相關包 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.…

1859. 將句子排序

1859. 將句子排序 一個 句子 指的是一個序列的單詞用單個空格連接起來&#xff0c;且開頭和結尾沒有任何空格。每個單詞都只包含小寫或大寫英文字母。 我們可以給一個句子添加 從 1 開始的單詞位置索引 &#xff0c;并且將句子中所有單詞 打亂順序 。 比方說&#xff0c;句子…

醫動力Android基于CC組件化框架的探索與實踐

為什么要組件化? 醫動力App作為公司的核心產品已經有多年歷史了,隨著版本的不斷迭代,功能越來越多,代碼量越來越大,不可避免的會產生一下問題: 業務越來越復雜&#xff0c;維護成本高;業務耦合度高&#xff0c;代碼越來越臃腫&#xff0c;團隊內部多人協作開發困難;編譯時間長…

使用協同過濾推薦電影

ALSO, ARE RECOMMENDER SYSTEMS INFLUENCING OUR TASTE??此外&#xff0c;推薦系統是否影響我們的口味&#xff1f; An excerpt on creating a movie recommender system similar to the OTT platforms.有關創建類似于OTT平臺的電影推薦系統的摘錄。 INTRODUCTION介紹 For…