Java面向對象核心:方法值傳遞與封裝機制精講


文章目錄

  • Java面向對象編程核心筆記
    • 一、方法值傳遞機制
      • 1. 基本數據類型傳遞
      • 2. 引用數據類型傳遞
      • 值傳遞總結
    • 二、面向對象核心概念
      • 1. 類與對象關系
      • 2. 類定義規范
      • 3. 對象創建與使用
    • 三、封裝機制詳解
      • 1. 封裝三大要素
      • 2. 封裝示例(GirlFriend類)
      • 3. 測試類
      • 4. 封裝優勢分析
    • 四、核心概念總結
      • 1. 值傳遞 vs 引用傳遞
      • 2. 面向對象三大特征
      • 3. 封裝最佳實踐


Java面向對象編程核心筆記

一、方法值傳遞機制

1. 基本數據類型傳遞

public class ValuePassingDemo {public static void main(String[] args) {int a = 10;System.out.println("修改前: " + a); // 10change(a);System.out.println("修改后: " + a); // 10 (不變)}public static void change(int a) {a = 20; // 只修改了方法內的局部副本}
}

2. 引用數據類型傳遞

public class ReferencePassingDemo {public static void main(String[] args) {int[] arr = {1, 2, 3};System.out.println("修改前: " + Arrays.toString(arr)); // [1, 2, 3]modifyArray(arr);System.out.println("修改后: " + Arrays.toString(arr)); // [10, 2, 3]}public static void modifyArray(int[] array) {array[0] = 10; // 修改了原始數組內容}
}

值傳遞總結

傳遞類型特點內存變化示例
基本數據類型傳遞值副本修改不影響原始值int, double
引用數據類型傳遞引用副本修改對象內容影響原始對象數組、對象
重新賦值引用不影響原始引用指向新對象不影響原對象array = new int[5]

二、面向對象核心概念

1. 類與對象關系

概念定義關系示例
對象的藍圖/模板描述共同特征class Car { ... }
對象類的具體實例基于類創建Car myCar = new Car()
成員變量對象的屬性描述狀態String color;
成員方法對象的行為描述功能void startEngine() { ... }

2. 類定義規范

// 類名首字母大寫,見名知意
public class Student {// 成員變量定義private String name;private int age;// 成員方法public void study(String subject) {System.out.println(name + "正在學習" + subject);}
}

3. 對象創建與使用

public class ObjectDemo {public static void main(String[] args) {// 創建對象Student student = new Student();// 設置屬性值student.setName("張三");student.setAge(20);// 調用方法student.study("Java編程");}
}

三、封裝機制詳解

1. 封裝三大要素

要素目的實現方式
私有化字段防止外部直接訪問private 修飾符
公共Getter提供安全讀取public 數據類型 getXxx()
公共Setter提供安全修改public void setXxx(參數)

2. 封裝示例(GirlFriend類)

public class GirlFriend {private String name;private int age;private String gender;public void setName(String n) {// n是局部變量(形參)// name是成員變量(整個類有效)name = n;}public String getName() {return name;}public void setAge(int a) {// 添加業務邏輯驗證if (a >= 18 && a <= 40)age = a;elseSystem.out.println("年齡不符合要求");}public int getAge() {return age;}public void setGender(String g) {gender = g;}public String getGender() {return gender;}
}

3. 測試類

public class GirlFriendTest {public static void main(String[] args) {GirlFriend girlFriend = new GirlFriend();// 通過set方法設置屬性值girlFriend.setName("小紅");girlFriend.setAge(20);girlFriend.setGender("女");// 通過get方法獲取屬性值System.out.println("姓名: " + girlFriend.getName());System.out.println("年齡: " + girlFriend.getAge());System.out.println("性別: " + girlFriend.getGender());}
}

4. 封裝優勢分析

  1. 數據保護:防止不合理賦值(如負數年齡)
  2. 操作可控:所有修改通過方法進行
  3. 邏輯集中:驗證規則統一維護
  4. 使用簡化:調用者無需了解內部實現
  5. 易于維護:內部修改不影響外部調用

四、核心概念總結

1. 值傳遞 vs 引用傳遞

特性值傳遞引用傳遞
傳遞內容值副本引用地址副本
原始值影響不影響影響對象內容
重新賦值不影響原變量不影響原引用
典型類型基本數據類型數組、對象

2. 面向對象三大特征

特征核心思想關鍵實現
封裝隱藏實現細節private字段 + public方法
繼承代碼復用擴展extends關鍵字
多態同一接口不同實現方法重寫 + 父類引用子類對象

3. 封裝最佳實踐

  1. 字段私有化:所有成員變量使用private
  2. 方法公共化:提供公共訪問接口
  3. 參數驗證:在setter中添加業務規則
  4. 構造方法:初始化必須屬性
  5. 行為封裝:將相關操作封裝成方法

“好的封裝就像黑盒子:使用者只需知道輸入和輸出,無需了解內部實現細節。”

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

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

相關文章

【Actix Web】構建高性能 Rust API:Actix Web 最佳實踐與進階指南

目錄 一、高性能 API 架構設計1.1 系統架構圖1.2 核心組件 二、項目初始化與配置2.1 創建項目2.2 添加依賴 (Cargo.toml)2.3 配置文件 (config/default.toml) 三、核心模塊實現3.1 應用狀態管理 (src/state.rs)3.2 數據模型定義 (src/models.rs) 四、認證與授權系統4.1 JWT 認證…

vue項目中純前端實現導出pdf文件,不需要后端處理。

在 Vue 項目中&#xff0c;純前端實現導出 PDF 文件是完全可行的。通常可以借助一些 JavaScript 庫來將 HTML 內容或 DOM 元素轉換為 PDF 并下載&#xff0c;無需后端參與。 下面介紹幾種常用的方案和實現方法&#xff1a; 推薦方案&#xff1a;使用 html2canvas jsPDF 安裝…

c++虛擬內存

常見的內存困惑 當你編寫C程序時&#xff0c;是否遇到過&#xff1a; vector申請200MB內存&#xff0c;但系統顯示只占用20MB&#xff1f;程序在低配機器上崩潰&#xff0c;報出std::bad_alloc但內存顯示充裕&#xff1f;遍歷數組時特定位置耗時突然增加&#xff1f;相同代碼…

領域驅動設計(DDD)【22】之限定建模技術

文章目錄 一 限定初識二 限定識別三 限定實現 一 限定初識 一個 員工 可以擁有多份 工作經驗&#xff0c;而各個 工作經驗 的 時間段 不能相互重疊。可以得出一個推論&#xff1a;對于一個 員工 而言&#xff0c;每個 時間段 只能有一條 工作經驗。 UML中第二種表述方式&…

《P6492 [COCI 2010/2011 #6] STEP》

題目描述 給定一個長度為 n 的字符序列 a&#xff0c;初始時序列中全部都是字符 L。 有 q 次修改&#xff0c;每次給定一個 x&#xff0c;若 ax? 為 L&#xff0c;則將 ax? 修改成 R&#xff0c;否則將 ax? 修改成 L。 對于一個只含字符 L&#xff0c;R 的字符串 s&#…

macOS,切換 space 失效,向右切換space(move right a space) 失效

背景 準確來講&#xff0c;遇到的問題是向右切換space&#xff08;move right a space) 失效&#xff0c;并向左是成功的。 在鍵盤-快捷鍵-調度中心中&#xff0c;所有的快捷鍵均可用&#xff0c;但是“向右移動一個空間”總是失效。 已經檢查過不是快捷鍵沖突的問題&#x…

網飛貓官網入口 - 免費高清影視平臺,Netflix一站觀看

網飛貓是一個專注于提供豐富影視資源的在線平臺&#xff0c;涵蓋國內外熱門電影、電視劇、動漫、綜藝等多種類型。它不僅整合了Netflix的獨家內容&#xff0c;還提供了大量高清、藍光畫質的影視作品&#xff0c;支持多語言字幕&#xff0c;滿足不同用戶的觀影需求。網飛貓的界面…

Hyper-v-中的FnOs--飛牛Nas虛擬磁盤擴容(不清除數據)

在Hyper-v下的飛牛Nas要怎么在不刪除原有虛擬磁盤數據的情況下擴容呢 OK下面開始教學&#xff08;適用于Basic模式的虛擬磁盤擴容&#xff0c;Linear沒試過&#xff09; 先關閉飛牛Nas系統 找到飛牛Nas虛擬機&#xff0c;在設置下SCSI控制器找到要擴容的虛擬磁盤&#xff0c; 點…

掌握 MySQL 的基石:全面解讀數據類型及其影響

前言 上篇文章小編講述了關于MySQL表的DDL操作&#xff0c;在那里我多次使用了MySQL的數據類型&#xff0c;但是我并沒有去講述MySQL的數據類型&#xff0c;想必各位讀者已經很好奇MySQL的數據類型都有什么了&#xff0c;今天這篇文章我將會詳細的去講述MySQL的數據類型&#x…

buildadmin 如何制作自己的插件

官方文檔指引 提示&#xff1a;若不計劃發布到應用市場&#xff0c;可省略圖片等非必要功能 參考文檔&#xff1a;https://doc.buildadmin.com/senior/module/basicInfo.html 目錄 官方文檔指引開發說明模塊開發流程模塊包結構示例安裝開發工具 總結 開發說明 目標&#xff…

【數據標注師】關鍵點標注

目錄 一、 **關鍵點標注的四大核心原則**二、 **五階能力培養體系**? **階段1&#xff1a;基礎認知筑基&#xff08;1-2周&#xff09;**? **階段2&#xff1a;復雜場景處理技能? **階段3&#xff1a;三維空間標注&#xff08;進階&#xff09;**? **階段4&#xff1a;效率…

創建網站的基本步驟?如何建設自己的網站?

創建網站是一個系統化的過程&#xff0c;涵蓋規劃、設計、開發、測試和發布等多個階段。以下是詳細步驟及關鍵工具推薦&#xff1a; 一、規劃階段&#xff1a;明確目標與內容 定義目標 1、確定網站目的&#xff08;展示信息、銷售、博客、服務等&#xff09;。 2、分析目標…

FreeSWITCH配置文件解析(2) dialplan 撥號計劃中xml 的action解析

在 FreeSWITCH 的撥號計劃&#xff08;Dialplan&#xff09;中&#xff0c;使用 XML 配置。其中&#xff0c;<action> 標簽用于指定要執行的操作。這些操作通常是應用程序&#xff08;applications&#xff09;或設置變量等。下面列出常見的 <action> 類型及其含義…

MCPA2APPT:基于 A2A+MCP+ADK 的多智能體流式并發高質量 PPT 智能生成系統

&#x1f680; MCPA2APPT / MultiAgentPPT 集成 A2A MCP ADK 架構的智能化演示文稿生成系統&#xff0c;支持多智能體協作與流式并發&#xff0c;實時生成高質量 PPT 內容。 &#x1f9e0; 項目簡介 MultiAgentPPT&#xff08;又名 MCPA2APPT&#xff09;采用 A2A&#xff…

Maven 多模塊項目調試與問題排查總結

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

debian國內安裝docker

先升級apt和安裝依賴包 apt update apt upgrade apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates添加存儲庫的GPG密鑰&#xff08;阿里云&#xff09; curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg…

vue網頁中的一個天氣組件使用高德api

今天寫了一個天氣組件效果如下&#xff1a; 實現代碼如下&#xff1a; <template><div><span click"getLocation" style"cursor: pointer"><span style"color:white;">{{ weatherInfo.area }}</span></span&g…

5 手寫卷積函數

5 手寫卷積函數 背景介紹滑動窗口的方式代碼問題 矩陣乘法的方式原理代碼結果 效果對比對比代碼日志結果 一些思考 背景 從現在開始各種手寫篇章&#xff0c;先從最經典的卷積開始 介紹 對于卷積層的具體操作&#xff0c;我這里就不在具體說卷積具體是什么東西了。 對于手寫…

vue3+element-plus,實現兩個表格同步滾動

需求&#xff1a;現在需要兩個表格&#xff0c;為了方便對比左右的數據&#xff0c;需要其中一邊的表格滾動時&#xff0c;另一邊的表格也跟著一起滾動&#xff0c;并且保持滾動位置的一致性。具體如下圖所示。 實現步驟&#xff1a; 確保兩個表格的寬度一致&#xff1a;如果兩…

Mysql架構

思考&#xff1a;Mysql需要重點學習什么&#xff1a; 索引&#xff1a;索引存儲結構、索引優化......事務&#xff1a;鎖機制與隔離級別、日志、集群架構 本文是對Mysql架構進行初步學習 1、Mysql鏈接 Mysql監聽器是長連接 BIO(阻塞同步IO調用)&#xff0c; 不是NIO. 為什么…