JAVA-08(2025.07.24學習記錄)

面向對象

package com.mm;public class Person {/*** 名詞-屬性*/String name;int age;double height;/*** 動詞-方法*/public void sleep(String add) {System.out.println("我在" + add + "睡覺");}public String introduce() {return "我的名字是" + name + "我的年齡是" + age;}
}

調用Person類

package com.mm;/*** 測試類:一般在測試類中編寫業務邏輯代碼*/
public class test {/*** main程序的入口*/public static void main(String[] args) {//創建一個Person類的對象Person p1 = new Person();//參照類的模板,給對象賦值p1.name = "麗麗";p1.age = 19;p1.height = 164.7;p1.sleep("賓館");//接收對象返回值String s = p1.introduce();System.out.println(s);//創建新對象,對象不能重復命名Person p2 = new Person();p2.age = 30;//匿名對象new Person().age = 10;//可以對對象的屬性進行賦值//注意,重復調用匿名對象產生的是不同對象,這是一個新的對象new Person().name = "菲菲";//用于僅一次調用,支持鏈式調用。表示返回下標為1的字符new Person().introduce().charAt(1);System.out.println(new Person().introduce().charAt(1));}
}

構造器

package com.mm;public class Person {/*** 名詞-屬性*/String name;int age;double height;/*** 顯式的將構造器編寫出來*/public Person(){System.out.println("這是無參構造器");}/*** 動詞-方法*/public void sleep(String add) {System.out.println("我在" + add + "睡覺");}public String introduce() {return "我的名字是" + name + "我的年齡是" + age;}
}

調用Person類

package com.mm;/*** 測試類:一般在測試類中編寫業務邏輯代碼*/
public class test {/*** main程序的入口*/public static void main(String[] args) {Person p = new Person();}
}

有參構造器——構造器的重載

package com.mm;public class Person {int age;String name;double height;public Person(){//空參構造器,盡量保證存在}//構造器的重載public Person(int age, String name, double height) {//形參名可以跟屬性一樣,//默認就近原則:下面兩個age都默認是形參age,相當于沒有賦值給屬性this.age = age;//使用this關鍵字,修飾要表示的屬性this.name = name;this.height = height;}
}

調用Person類

package com.mm;public class test {public static void main(String[] args) {Person p = new Person(1, "菲菲", 110.1);System.out.println(p.age);System.out.println(p.name);}public static void main(String[] args) {Person p = new Person(2, "琳琳", 120.1);System.out.println(p.age);System.out.println(p.name);
}
步驟1

在棧中為main方法開辟棧幀。把Person類對應的字節碼信息加載到方法區。等號右側:new操作在堆空間開辟空間創建對象,此時屬性為初始值。

步驟2

調用有參構造器(在構造方法棧中產生有參構造方法的棧幀,含參數a、b、c)。JVM(從棧內存?)把基本數據類型通過值傳遞傳給a、b,從字符串常量池把字符串(地址)傳給參數c。

步驟3

構造方法棧幀中的a、b、c把對應值傳給堆中的對象屬性。構造方法棧幀消失。

步驟4

堆空間中生成一個對應的地址0x88。等號左側:把地址賦給棧空間中main棧幀的對象p

內存分析

方法形參為自定義引用數據類型。對象和對象之間的數據本身是不會相互影響的,但多個變量指向同一個對象時就會相互影響

package com.mm;public class Person {int id;int age;Person(int a, int b) {id = a;age = b;}class Test {public void change(Person p) {//傳遞對象p(不是傳遞對象的數據)p.id = 2;p.age = 18;}public static void main(String[] args) {//主方法Person p = new Person(1, 20);//創建對象p(0x88地址指向堆內存中的對象)Test t = new Test();//創建對象t(0x72地址指向堆內存中的對象)t.change(p);//t調用change方法。為change方法創建對應棧幀,把main方法里的對象p傳到chage方法里(雖然是通過值傳遞方式,但傳過去的也是0x88地址指向堆內存中的對象)System.out.println(p.id);//2System.out.println(p.age);//18}}
}
步驟1

在棧中為main方法開辟棧幀。

把Person類對應的字節碼信息加載到方法區。等號右側:new操作在堆空間開辟空間創建對象,此時屬性為初始值。堆空間中生成一個對應的地址0x88。等號左側:把地址賦給棧空間中main棧幀的對象p

把Test類對應的字節碼信息加載到方法區。等號右側:new操作在堆空間開辟空間創建對象,此時屬性為初始值。堆空間中生成一個對應的地址0x72。等號左側:把地址賦給棧空間中main棧幀的對象t

步驟2

在棧幀中開辟change方法棧幀,并將p對象的地址提供‘值傳遞’方式傳到change方法棧幀。

步驟3

change棧幀中的p依舊是0x88,指向堆空間里的對象

方法形參為自定義引用數據類型。對象和對象之間的數據本身是不會相互影響的,但多個變量指向同一個對象時就會相互影響

步驟4

方法change對p.id和p.age重新賦值,改變堆空間0x88對應的對象p的屬性

打印時main棧幀里的p對象通過0x88找到堆空間的p對象并返回屬性值(被改變)

this關鍵字

package com.mm;public class Person {int age;String name;public Person(int age, String name){//屬性名字和形參重名//this修飾構造器必須放在第一行this(age);//等于this.age = age。相當于調用本類的構造器(下面第一個)System.out.println(this); // 指代的就是當前正在構建的對象//this.age = age; // 如果屬性名字和形參重名,那么要表示的屬性前面必須加上thisthis.name = name;}public Person(int age){//被this隱式修飾的構造器,被上面調用this.age = age;}public Person(String name){//參數類型不同,不會被調用this.name = name;}public void sleep(){System.out.println(/*this.*/age); // 10,此處沒有重名問題,那么可以省略this.int age = 66;System.out.println(age);//66  如果局部變量和屬性重名,也會發生就近原則System.out.println(this.age); // 10}public void eat(){System.out.println(this); // 指代的就是正在調用當前方法的對象System.out.println("我可以吃飯");play();//如果在同一個類中調用本類的方法,可以不用寫this}public void play(){System.out.println("我可以玩");}
}

調用Person類sleep方法

package com.mm;public class Test {public static void main(String[] args) {// 創建Person類的具體的對象:Person p = new Person(10, "麗麗");System.out.println(p);p.sleep();p.eat();}
}

封裝

package com.mm;public class Person {private int age;/*** 定義一個方法,用來設置age,提供合理的暴露*/public void setAge(int age) {if (age >= 18) {//只暴露小于18的,大于等于18的都是18this.age = 18;} else {this.age = age;}}/*** 用來讀取age*/public int getAge() {return this.age;}
}

調用Person

package com.mm;public class test {public static void main(String[] args) {Person p = new Person();p.setAge(19);System.out.println(p.getAge());}
}

封裝實操

package com.mm;public class Person {private String name;private String sex;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {if (sex.equals("男") || sex.equals("女")) {//使用equals更規范this.sex = sex;} else {this.sex = "男";}}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {}public Person(String name, String sex, int age) {this.name = name;//相當于this.sex = sex;setSex(sex);//使用上面的方法setSexthis.age = age;}
}

調用Person類

package com.mm;public class test {public static void main(String[] args) {Person p = new Person();p.setAge(19);p.setName("麗麗");p.setSex("女");System.out.println(p.getAge());System.out.println(p.getName());System.out.println(p.getSex());Person p2 = new Person("菲菲", "sdfa", 19);System.out.println(p2.getAge());System.out.println(p2.getName());System.out.println(p2.getSex());}
}

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

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

相關文章

地下隧道管廊結構健康監測系統 測點的布設及設備選型

隧道監測背景 隧道所處地下環境復雜,在施工過程中會面臨圍堰變形、拱頂沉降、凈空收斂、初襯應力變化、土體塌方等多種危險情況。在隧道營運過程中,也會受到材料退化、地震、人為破壞等因素影響,引發隧道主體結構的劣化和損壞,若不…

node.js卸載與安裝超詳細教程

文章目錄一、卸載Step1:通過控制面板刪除node版本Step2:刪除node的安裝目錄Step3:查找.npmrc文件是否存在,有就刪除。Step4:查看以下文件是否存在,有就刪除Step5:打開系統設置,檢查系…

飛算JavaAI“刪除接口信息” 功能:3 步清理冗余接口,讓管理效率翻倍

在飛算JavaAI的接口設計與管理流程中,“刪除接口信息” 功能為用戶提供了靈活調整接口方案的便利。該功能的存在,讓用戶能夠在接口生命周期的前期(審核階段)及時清理無需創建的接口,保證接口管理的簡潔性與高效性。一、…

行業熱點丨SimLab解決方案如何高效應對3D IC多物理場與ECAD建模挑戰?

半導體行業正快速超越傳統2D封裝技術,積極采用 3D集成電路(3D ICs)和2.5D 先進封裝等方案。這些技術通過異構芯粒、硅中介層和復雜多層布線實現更高性能與集成度。然而,由于電子計算機輔助設計(ECAD)數據規…

2025暑期—05神經網絡-BP網絡

按誤差反向傳播(簡稱誤差反傳)訓練的多層前饋網絡線性回歸或者分類不需要使用神經元,原有最小二程即可。求解J依次變小。使用泰勒展開,只看第一階。偏導是確定的,需要讓J小于0的delta WkWk構造完成后 J(Wk1)已知&#…

qml的信號槽機制

qml的信號槽機制和qtwidget差不多,但是使用方法不一樣,qtwidget一般直接用connect函數把信號和槽一綁定就完事了,qml分為自動綁定和手動綁定。信號自動綁定在一個組件里面定義一個信號,用signal定義,當事件觸發&#x…

Unity國際版下載鏈接分享(非c1國內版)

轉載Unity國際版下載鏈接分享(非c1國內版) - 嗶哩嗶哩 大家平時使用Unity注意一下會發現,現在我們下載的Unity版本號后面都一個c1,但是大家在B站學習時大神UP主們使用的Unity版本號大都是沒有c1的。 例如:我在用的是…

第4章唯一ID生成器——4.1 分布式唯一ID

在復雜的系統中,每個業務實體都需要使用ID做唯一標識,以方便進行數據操作。例如,每個用戶都有唯一的用戶ID,每條內容都有唯一的內容ID,甚至每條內容下的每條評論都有唯一的評論ID。 4.1.1 全局唯一與UUID 在互聯網還未…

圖論水題日記

cf1805D 題意 給定一棵樹,規定dis(u,v)≥kdis(u,v) \geq kdis(u,v)≥k時(u,v)(u,v)(u,v)之間存在一條無向邊,求k(1,2,...n)k(1,2,...n)k(1,2,...n)時圖中的連通塊個數 思路 前置知識:樹上一點到其最遠的點一定是樹直徑的兩個端點之一若一個點…

自定義線程

每個程序至少有一個線程 —— 主線程 主線程是程序的起點,你可以從它開始創建新的線程來執行任務。為此,你需要創建自定義線程,編寫在線程中執行的代碼,并啟動它。 通過繼承創建自定義線程 創建新線程有兩種主要方式:繼…

2025真實面試試題分析-安卓客戶端開發

以下是對安卓客戶端開發工程師面試問題的分類整理、領域占比分析及高頻問題精選(基于??85道問題,總出現次數118次??)。按技術領域整合為??7大核心類別??,按占比排序并精選高頻問題標注優先級(1-5🌟…

算法學習筆記:29.拓撲排序——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

拓撲排序(Topological Sorting)是一種針對有向無環圖(DAG)的線性排序算法,它將圖中的頂點按照一定規則排列,使得對于圖中的任意一條有向邊 u→v,頂點 u 都排在頂點 v 之前。拓撲排序在任務調度、…

利用Web3加密技術保障您的在線數據安全

在這個信息爆炸的數字化時代,保護個人和企業數據安全變得尤為重要。Web3技術以其去中心化和加密特性,為在線數據安全提供了新的解決方案。本文將探討Web3技術如何通過加密技術保障您的在線數據安全,并介紹如何有效利用這些技術。 什么是Web3技…

Vue實現el-checkbox單選并回顯選中

先說需求 我要在頁面進行checkbox單選并回顯 第一步先把基本的頁面寫好噢&#xff1a;vue代碼&#xff1a;別忘了寫change啊<el-form-item label"按鈕顏色:" prop"menuColor"><el-checkbox-group v-model"buttonColor" change"bin…

動態規劃--序列找優問題【1】

一、說明 動態規劃似乎針對問題很多&#xff0c;五花八門&#xff0c;似乎每一個問題都有一套具體算法。其實不是的&#xff0c;動態規劃只有兩類&#xff1a;1&#xff09;針對圖的路徑問題 2&#xff09;針對一個序列的問題。本篇講動態規劃針對序列的算法范例。 二、動態規劃…

獨家|百度副總裁尚國斌即將離職,此前統籌百度地圖;行業搜索及智能體業務總經理謝天轉崗IDG

百度人事再變動。作者|文昌龍編輯|楊舟據「市象」了解&#xff0c;近期&#xff0c;百度副總裁尚國斌即將離職。公開資料顯示&#xff0c;尚國斌2010年畢業于南開大學&#xff0c;2012年加入百度&#xff0c;先后在商業分析部、集團戰略辦、智能駕駛事業群工作。尚國斌同樣也在…

Qt 網絡編程進階:HTTP 客戶端實現

在 Qt 應用程序中&#xff0c;實現高性能、可靠的 HTTP 客戶端是常見需求。Qt 提供了豐富的網絡模塊&#xff0c;包括 QNetworkAccessManager、QNetworkRequest 和 QNetworkReply 等類&#xff0c;用于簡化 HTTP 通信。本文將深入探討 Qt 網絡編程中 HTTP 客戶端的進階實現&…

Python Requests-HTML庫詳解:從入門到實戰

一、庫簡介 Requests-HTML是Python中集網絡請求與HTML解析于一體的全能型庫&#xff0c;由知名開發者Kenneth Reitz團隊維護。它完美結合了Requests的易用性和Parsel的選擇器功能&#xff0c;并內置JavaScript渲染引擎&#xff0c;特別適合現代動態網頁抓取。最新版本&#xf…

基于springboot的小區車位租售管理系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

Kafka 如何優雅實現 Varint 和 ZigZag 編碼

ByteUtils 是 Kafka 中一個非常基礎且核心的工具類。從包名 common.utils 就可以看出&#xff0c;它被廣泛用于 Kafka 的各個模塊中。它的主要職責是提供一套高效、底層的靜態方法&#xff0c;用于在字節緩沖區 (ByteBuffer)、字節數組 (byte[]) 以及輸入/輸出流 (InputStream/…