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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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. 为什么…