Java面向对象核心:封装、访问权限、final、静态域与静态方法详解
摘要本文结合《Java核心技术》ParamTest参数传递示例讲解封装思想、类访问权限、私有方法、final域、静态域、静态方法、工厂方法帮你搞懂面向对象基础重点与易错坑点。标签#Java #面向对象 #封装 #static #final一、封装思想数据隐藏封装 私有数据 公开访问器/修改器方法核心将实例域私有化private外部不能直接访问字段只能通过类提供的get/set方法操作内部数据保护内部状态隔离实现与调用。classEmployee{// 私有实例域外部类无法直接访问privateDatehireDay;// 访问器get方法向外返回私有字段publicDategetHireDay(){returnhireDay;}// 修改器set方法可以在这里做参数校验publicvoidsetHireDay(DatehireDay){this.hireDayhireDay;}}⚠️注意坑如果直接返回引用类型对象return hireDay;外部拿到对象引用可以修改对象内部属性会破坏封装正确做法返回对象副本return new Date(hireDay.getTime());二、基于类的访问权限private修饰的成员只有本类内部可以访问不管是不是同一个对象。同一个类的不同对象可以互相访问对方的private私有成员。1. 私有方法 private使用private修饰方法只允许本类内部调用。设计思路把内部工具辅助方法私有化对外不暴露。如果一个方法是实现细节不需要外部调用就设置为private一旦业务变更可以直接删除修改不会影响外部调用代码。2. final 实例域final修饰实例域表示引用本身不可变但不代表引用指向的内容不可变。基本类型final域值完全不可修改privatefinalintage18;// age 20; //编译报错基本类型final赋值后不能修改不可变类对象final域对象本身不能改变状态比如Stringfinal String name 张三;name引用永远指向这个字符串字符串本身也无法修改。数组/可变对象的final重点易错finalint[]arr{5,7,4,2,0};// arr new int[3]; //❌编译报错引用地址不能改arr[0]100;//✅合法数组里面元素可以修改关键理解final锁住的是变量保存的地址值不是堆里面对象/数组的内容。final数组只是不能让arr指向另一个新数组数组内部元素依旧可以修改。三、静态域 static类变量普通实例域每new一个对象就会分配一份独立的实例域内存空间对象独有。static静态域属于类不属于任何实例全类所有对象共享同一块内存类加载完成就分配空间不需要new对象。示例代码classEmployee{//静态域nextId属于Employee类所有对象共享这一个变量privatestaticintnextId1;//实例域id每个Employee对象都有自己独立idprivateintid;}实例域new完对象之后堆中才开辟对象空间才有实例域。静态域类加载阶段就创建不依赖对象直接通过类名.静态变量访问。四、静态方法 static类方法静态方法属于类本身不属于对象实例。特点没有隐式this参数this代表当前对象静态方法没有对象不能使用this。可以直接访问本类的静态域、静态方法。❌静态方法不能直接访问实例域、实例方法实例域依赖对象。调用方式类名.静态方法()不需要new对象。经典例子Math.pow(x,a)Math类不需要实例化直接调用静态方法。//调用静态方法不需要new Math对象doubleresMath.pow(2,3);什么时候写静态方法工具方法不需要访问对象状态如Math工具类只需要访问静态域的方法this回顾实例方法执行流程必须先new创建对象堆开辟对象内存调用实例方法隐式传入thisthis指向这个对象通过this访问对象实例域。静态方法不走这套流程没有对象没有this。五、工厂方法静态工厂方法静态工厂方法使用static静态方法返回类的实例对象替代构造器new。优势方法可以有业务语义名字不像构造器名字固定只能是类名不需要每次调用都一定创建新对象可以缓存、复用对象可以返回子类对象。简单示例classPerson{privateStringname;//私有构造器外部不能直接new Person()privatePerson(Stringname){this.namename;}//工厂静态方法对外获取实例publicstaticPersongetInstance(Stringname){returnnewPerson(name);}}//外部调用不用new调用工厂方法PersonpPerson.getInstance(小明);六、拓展结合ParamTest案例理解参数传递Java核心技术源码完整源码来自《Java核心技术》ParamTest.java用来理解Java只有值传递辅助面向对象理解。/** * This program demonstrates parameter passing in Java. * version 1.00 2000-01-27 * author Cay Horstmann */publicclassParamTest{publicstaticvoidmain(String[]args){/* * Test 1: 方法不能修改基本数据类型参数 */System.out.println(Testing tripleValue:);doublepercent10;System.out.println(Before: percentpercent);tripleValue(percent);System.out.println(After: percentpercent);/* * Test 2: 方法可以修改对象参数的内部状态 */System.out.println(\nTesting tripleSalary:);EmployeeharrynewEmployee(Harry,50000);System.out.println(Before: salaryharry.getSalary());tripleSalary(harry);System.out.println(After: salaryharry.getSalary());/* * Test 3: 不能让对象参数引用指向新对象swap交换失败 */System.out.println(\nTesting swap:);EmployeeanewEmployee(Alice,70000);EmployeebnewEmployee(Bob,60000);System.out.println(Before: aa.getName());System.out.println(Before: bb.getName());swap(a,b);System.out.println(After: aa.getName());System.out.println(After: bb.getName());}//基本类型传参副本修改不影响外部变量publicstaticvoidtripleValue(doublex){x3*x;System.out.println(End of method: xx);}//传入对象引用副本可以修改对象内部成员publicstaticvoidtripleSalary(Employeex){x.raiseSalary(200);System.out.println(End of method: salaryx.getSalary());}//Java值传递swap无法交换两个外部对象publicstaticvoidswap(Employeex,Employeey){Employeetempx;xy;ytemp;System.out.println(End of method: xx.getName());System.out.println(End of method: yy.getName());}}classEmployee{privateStringname;privatedoublesalary;publicEmployee(Stringn,doubles){namen;salarys;}publicStringgetName(){returnname;}publicdoublegetSalary(){returnsalary;}publicvoidraiseSalary(doublebyPercent){doubleraisesalary*byPercent/100;salaryraise;}}三个测试结论基本类型参数方法拿到的是值副本修改副本外部变量完全不受影响。对象参数传递的是对象引用的副本副本和外部变量指向同一个堆对象方法内可以修改对象里面的成员状态。对象引用副本重新赋值只会改变副本不能改变外部变量的指向Java无法写swap交换两个对象。七、知识点总结表格概念修饰符核心特点实例域无/staticnew对象之后才有内存每个对象独立一份实例方法可以访问静态域static属于类类加载就分配内存所有对象共享无需要实例实例方法无/static隐式携带this依赖对象可以访问实例、静态成员静态方法static没有this不能访问实例域/实例方法类名直接调用final基本变量final赋值后值不能修改final引用变量final引用地址不可修改对象内部内容可修改封装private get/set私有化字段对外暴露方法保护内部数据静态工厂static方法替代构造器返回实例命名灵活、可缓存对象八、常见面试问题final int[] arr数组元素为什么可以修改final锁住的是数组引用地址不是堆内存数组内容不能让arr指向新数组但数组元素可改。static方法能不能使用this不能。静态方法属于类不依附对象this代表当前实例对象。Java到底是值传递还是引用传递Java全部是值传递。对象传递是把引用地址拷贝一份传给方法不是传递对象本身。private修饰的方法有什么意义封装内部实现细节只允许本类调用后续维护修改不影响外部代码。全文到此结束希望对你理解Java面向对象基础有所帮助。

相关新闻

终极Windows网盘图标清理指南:Drive Icon Manager一键解决杂乱问题

终极Windows网盘图标清理指南:Drive Icon Manager一键解决杂乱问题

终极Windows网盘图标清理指南:Drive Icon Manager一键解决杂乱问题 【免费下载链接】Drive-Icon-Manager 可以轻松删除‘此电脑’及‘资源管理器侧边栏’中讨厌的网盘图标 项目地址: https://gitcode.com/gh_mirrors/dr/Drive-Icon-Manager 你是否曾经打开Wi…

2026/8/6 19:50:31 阅读更多 →
数据结构与算法--链表的应用

数据结构与算法--链表的应用

一、找到中间节点快指针走两步,慢指针走一步,快指针是空(奇数)或者快指针的p_next为空(偶数),停止,此时的慢指针就是中间节点二、找到倒数第k个节点两个指针,q先走k,然后…

2026/8/6 19:50:31 阅读更多 →
【Android】Android TargetSdk 35 -> 36迁移要点

【Android】Android TargetSdk 35 -> 36迁移要点

Android TargetSdk 35 -> 36迁移要点1. 先升级构建工具2. 返回事件必须迁移3. Edge-to-edge 必须适配4. 平板横屏适配5. 检查 16 KB Page Size其他需要处理的项目1. 先升级构建工具 项目 当前 建议 ━━━━━━━━━━━━━━━━━━━━━━━━ targetSdk 35 改为 36…

2026/8/6 19:49:30 阅读更多 →

最新新闻

【AI产品经理】第三章 电商实战

【AI产品经理】第三章 电商实战

第三章 电商实战一、名称解释 1. 电子商务 (E-commerce) 通过互联网等电子手段进行的商品或服务的交易活动。按交易主体分为 B2C(企业到消费者)、B2B(企业到企业)、C2C(消费者到消费者)、O2O(线…

2026/8/6 20:32:46 阅读更多 →
MySQL索引失效原理与优化实践

MySQL索引失效原理与优化实践

1. 索引失效的本质:当优化器决定放弃索引 MySQL索引失效的根本原因在于查询优化器的成本计算机制。优化器会根据统计信息估算全表扫描和索引扫描的成本,当它认为全表扫描更高效时,就会放弃使用索引。这种"失效"实际上是优化器的主动…

2026/8/6 20:32:46 阅读更多 →
解决Linkage Mapper Barrier M插件错误01478的实用指南

解决Linkage Mapper Barrier M插件错误01478的实用指南

1. 问题背景与现象描述最近在使用Linkage Mapper工具套件中的Barrier Mapper插件进行生态障碍点分析时,遇到了一个令人困惑的错误提示:"error01478:20必须大于20"。这个报错信息看似自相矛盾,却实实在在地阻碍了分析流程…

2026/8/6 20:32:46 阅读更多 →
es6-shim与es5-shim搭配使用:构建完整的JavaScript兼容性方案

es6-shim与es5-shim搭配使用:构建完整的JavaScript兼容性方案

es6-shim与es5-shim搭配使用:构建完整的JavaScript兼容性方案 【免费下载链接】es6-shim ECMAScript 6 compatibility shims for legacy JS engines 项目地址: https://gitcode.com/gh_mirrors/es6/es6-shim 在现代Web开发中,确保JavaScript代码在…

2026/8/6 20:32:46 阅读更多 →
MySQL全量实战手册:从基础配置到高级优化

MySQL全量实战手册:从基础配置到高级优化

1. MySQL全量实战手册:为什么每个开发者都需要这份指南十年前我刚接触MySQL时,踩过的坑能写满三本笔记本。从最基本的连接超时到复杂的死锁问题,从简单的CRUD到百万级数据优化,这些经验最终凝结成了这份实战手册。这不是又一份官方…

2026/8/6 20:32:46 阅读更多 →
Flutter Debug 红屏、Release 灰屏:你的 release-only bug,只是异常被藏起来了

Flutter Debug 红屏、Release 灰屏:你的 release-only bug,只是异常被藏起来了

Flutter Debug 红屏、Release 灰屏:你的 release-only bug,只是异常被藏起来了 作者:FungLeo | 适用:Flutter | 涉及:ErrorWidget.builder、FlutterError.onError、PlatformDispatcher.onError、…

2026/8/6 20:31:46 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →