【Java】封装在 Java 中是怎样实现的?
包
关于包有两个关键字 package : 声明当前类属于哪个包 和 import : 允许当前类使用其他类或接口时不使用全限定名 , 也就是导包 .
IDEA 的普通项目文件包括 src : 包含源码和资源文件 和 out : 包含编译产物字节码文件 . 在 IDEA 开发环境建包会在 src 源码目录中生成 , 可以用多级目录 如 com.tiktok.java 映射到目录就是 src/com/tiktok/java 路径 和 单级目录 如仅用一个 tiktok , 项目越大越应用多级目录来建包管理项目 . IDEA 会自动生成 package 语句 .
如果导的多个包有同名类 , 在调用该类时要使用类的全限定名 , 否则会编译错误 .
没有显式声明 package 语句的 Java 类属于默认包 , 默认包没有包名 , 类直接位于根目录 , 只能被同样位于默认包的类访问 , 不能被其他非默认包类导包使用 .
* 资源文件的相对路径
相对的是什么 ?
-
当前工作目录 : 程序启动的目录 , IDEA 默认是项目根目录 .
new File("xxx")
-
类路径根目录 : 类加载器加载资源后的根目录 , 即 /target/classes/ 或 out/production/模块名/ .
getClassLoader().getResource("xxx")
-
使用 getResource 寻找 :
-
不以
/
开头 : 相对于当前类所在包 .getClass().getResource("xxx")
-
以
/
开头 : 相对于类路径根目录 .getClass().getResource("/xxx")
-
如果我们在 输入输出流初始化 时 , 直接传入文件名或路径 , 执行会直接访问操作系统的文件系统路径 , 路径是相对于当前工作目录的 .
当前工作目录在 Java 程序运行时是 System.getProperty("user.dir")
. 如果在 IDEA 里运行默认是项目根目录 , 如果打包成 JAR 运行则默认是运行命令的目录 .
类加载器加载资源文件
类加载器加载资源文件时 , 依赖 classpath 路径 ( 如 /out ) , 这个路径的资源来自 src/main/resources 或 src 下的资源 , 编译时会将这些资源复制到输出目录实现运行时访问 .
访问控制
访问控制是 Java 面向对象中封装特性的重要实现 .
访问修饰符
修饰符 | 同类(Class) | 同包(Package) | 子类(不同包) | 其他类(不同包) |
---|---|---|---|---|
private | ✅ 可访问 | ❌ 不可访问 | ❌ 不可访问 | ❌ 不可访问 |
默认(无修饰) | ✅ 可访问 | ✅ 可访问 | ❌ 不可访问 | ❌ 不可访问 |
protected | ✅ 可访问 | ✅ 可访问 | ✅ 可访问(但需通过子类实例) | ❌ 不可访问 |
public | ✅ 可访问 | ✅ 可访问 | ✅ 可访问 | ✅ 可访问 |
跨包子类只能通过自己实例或其子类实例访问父类 protected 修饰的成员 , 跨包子类中的父类实例不能访问这些成员 .
非内部类只能被 public 修饰 , 接口同理 . 内部类和内部接口可以使用其他修饰符修饰 .
* 区分默认方法
访问修饰符中没有 default , Java 8 加入的默认方法 default 关键字是声明修饰符 , 用于接口 , 实现有默认方法的接口的实现类可以选择重写该默认方法 , 也可以选择使用默认方法的方法体默认实现 , 不强制重写 .
* 默认方法 & 钩子方法
接口的默认方法提供默认实现 , 接口不再是方法签名的集合 , 实现类可以不用实现这个方法 , 这样设计便于扩展接口功能 .
钩子方法是父类设计的留白步骤 , 子类可以根据需求插入重写的自定义代码 , 影响执行流程 .
方面 | 默认方法(Default Method) | 钩子方法(Hook Method) |
---|---|---|
定义 | Java 8 引入的接口中带有默认实现的方法,使用 default 关键字声明 | 父类(通常是抽象类)提供的可被子类覆盖的方法,允许子类在执行流程中插入额外行为 |
出现位置 | 出现在接口中 | 出现在类(通常是抽象类)中 |
目的 | 给接口增加新的方法,同时保持向后兼容;避免接口改动导致实现类全部修改 | 提供一个“扩展点”,让子类可以选择性地修改或增强父类行为 |
调用方式 | 通过接口引用调用,或者通过实现类调用 | 通过父类方法调用,子类重写实现 |
实现机制 | 方法体在接口中直接实现 | 抽象类中预定义流程,钩子方法可空实现或默认实现 |
典型应用 | 为接口添加新的功能时不破坏已有实现 | 设计模板方法模式(Template Method Pattern)中的可扩展点 |
是否必须实现 | 不是,接口实现类可以直接使用默认实现 | 不是,子类可以选择重写或不重写 |
Getter/Setter
核心逻辑就是将类字段设置为私有 private , 对外提供 get 和 set 的查询和修改访问接口 , 控制字段读写权限 . 便于添加校验逻辑和额外处理 ( 如 Person 类的年龄 age 不应小于 0 ) , 也可以在 set 方法添加日志打印 , 追踪对象属性的修改情况 , 帮助开发者检查项目运行状态和调试问题 .
JavaBean
细则编号 | 说明 |
---|---|
1 | 类必须实现 无参构造器(默认构造器或显式无参构造器) |
2 | 属性(字段)应为 私有(private),保证封装 |
3 | 对属性的访问通过 getter 和 setter 方法,遵循命名规范 |
4 | getter 方法命名格式:public Type getPropertyName() ,针对布尔类型,也可用 isPropertyName() |
5 | setter 方法命名格式:public void setPropertyName(Type value) |
6 | getter 方法返回属性值,setter 方法用于设置属性值 |
7 | 实现 Serializable 接口,支持对象序列化(可选但推荐) |
8 | 不建议定义 public 的实例变量,避免直接访问 |
9 | 应遵循 Java 命名规范,类名通常是大驼峰(PascalCase),属性名小驼峰(camelCase) |
相关文章:
【Java】封装在 Java 中是怎样实现的?
包 关于包有两个关键字 package : 声明当前类属于哪个包 和 import : 允许当前类使用其他类或接口时不使用全限定名 , 也就是导包 . IDEA 的普通项目文件包括 src : 包含源码和资源文件 和 out : 包含编译产物字节码文件 . 在 IDEA 开发环境建包会在 src 源码目录中生成 , 可…...
牛客网 NC14736 双拆分数字串 题解
牛客网 NC14736 双拆分数字串 题解 题目分析 解题思路 通过分析,我们可以发现: 当n≤3时,无法构造出双拆分数字串,因为数字位数太少对于n>3的情况,我们可以构造两种特殊形式: 当n为奇数时,…...
超长文本注意力机制如何突破传统 O(n²) 瓶颈
介绍了当前在超长文本(可达百万级及以上 Token)生成与预测中,注意力机制如何突破传统 O(n) 瓶颈,并阐释多种高效注意力算法如何支持 超长上下文处理能力。 概览 当前主流 Transformer 在处理长序列时,由于每个 Token…...
异丙肌苷市场:现状、挑战与未来展望
摘要 本文聚焦异丙肌苷市场,深入分析了其市场规模与增长趋势、应用价值与市场驱动因素、面临的挑战以及竞争格局。异丙肌苷作为一种具有重要应用价值的改性核苷衍生物,在药物研发和治疗领域展现出潜力,但市场发展也面临诸多挑战。文章最后为…...
JAVA面向对象——对象和类的基本语法
JAVA面向对象——对象和类的基本语法 一、面向对象编程基础 1. 程序中的数据存储方式 基本类型:变量(如 int max 15;)。数据结构:数组(一维/二维)、对象(特殊数据结构,用于存储复…...
【windows】音视频处理工具-FFmpeg(合并/分离)
一、FFmpeg介绍 FFmpeg是一个开源的跨平台音视频处理框架。 法国计算机程序员 Fabrice Bellard 于 2000 年创建。 “FF”(代表 “Fast Forward”,快进之意)与 “mpeg”(流行的视频压缩标准 MPEG,即运动图像专家组&am…...
Java并发编程:从基础到高级实战
在现代软件开发中,并发编程已成为不可或缺的核心技能。随着多核处理器的普及和分布式系统的发展,能否编写高效、线程安全的并发程序直接决定了应用程序的性能和可靠性。Java作为一门成熟的企业级编程语言,提供了丰富的并发编程工具和API&…...
在 Excel 中使用东方仙盟软件————仙盟创梦IDE
安装插件 用仙盟创梦编写插件代码 源码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ExcelDna.Integration;namespace 东方仙盟.仙盟创梦IDE_招标系统 {public static class 仙盟创梦_招标专…...
win7无线网络名称显示为编码,连接对应网络不方便【解决办法】
使用多个网络时可能需要切换到打印机的网络来打印东西,但是win7的编码问题导致不知道哪个网络是对应网络,可以使用批处理命令来自动连接道指定网络 将这个代码用文本文件打开后粘贴,然后另存为ansi格式的bat文件 代码中使用两种方式进行连接…...
.NET 10 - 尝试一下Minimal Api的Validation新特性
1.简单介绍 2025年11月微软将会发布.NET10,这是LTS(Long Term Support)版本。当前.NET10已经处于Preview4版本,微软对Runtime, Library, SDK, C#, Asp.NET Core, MAUI等都做了很多enhancement。近些年微软对Minimal Api一直在持续地更新。在.NET8中, Mi…...
C# Task 与 SynchronizationContext
示例代码 using System; using System.Collections.Concurrent; using System.Threading; using System.Threading.Tasks;namespace Test {internal class Program{static void Main(string[] args){_mainThreadSynchronizationContext new ThreadSynchronizationContext(&qu…...
iOS Runtime与RunLoop的对比和使用
Runtime 机制 核心概念 Objective-C 的动态特性:Objective-C 是一门动态语言,很多工作都是在运行时而非编译时决定的消息传递机制:方法调用实际上是发送消息 objc_msgSend(receiver, selector, ...)方法决议机制:动态方法解析、…...
JavaSenderMail发送邮件(QQ及OFFICE365)
前言 这是今天处理的公司安排的一个任务:客户系统发送offices365邮件报错535 之前没怎么解除邮件业务,于是先搭个简单的QQ邮件Demo熟悉一下吧,没有啥公网内网的麻烦(之前听说有内网限制,我还处理了一些环境上的问题&…...
八股文--JVM(2)
⭐️⭐️6.类加载 类加载器 JVM只会运行二进制文件,类加载器的作用就是将字节码加载到JVM中,从而让程序启动 1.启动类加载器 ----JAVA_HOME/jre/libC编写加载的是JAVA_HOME/jre/lib 2.拓展类加载器 ----JAVA_HOME/jre/lib/ext 3.应用类加载器 ----C…...
【HTML-3】HTML 中的水平线与换行:基础元素详解
在网页设计中,合理的布局和内容分隔对于提升用户体验至关重要。HTML 提供了两个简单但强大的元素来实现这些功能:水平线 (<hr>) 和换行 (<br>)。本文将深入探讨这两个元素的用法、最佳实践以及现代替代方案。 1. 水平线 <hr> 元素 1…...
绿色云计算:数字化转型与可持续发展的完美融合
目录 引言 绿色云计算的概念与定义 云计算的环境影响与绿色云计算的重要性 绿色云计算的技术实践与策略 绿色云计算的案例研究与最佳实践 绿色云计算的挑战与限制 绿色云计算的未来趋势与预测 结论与展望 引言 随着云计算技术的迅猛发展和广泛应用,其环境影…...
AMO——下层RL与上层模仿相结合的自适应运动优化:让人形行走操作(loco-manipulation)兼顾可行性和动力学约束
前言 自从去年24年Q4,我司侧重具身智能的场景落地与定制开发之后 去年Q4,每个月都会进来新的具身需求今年Q1,则每周都会进来新的具身需求Q2的本月起,一周不止一个需求 特别是本周,几乎每天都有国企、名企通过我司找到…...
大模型——多模态检索的RAG系统架构设计
文章目录 1. 系统架构设计核心组件 2. 跨模态向量空间对齐方案方法一:预训练对齐模型(如CLIP)方法二:跨模态投影网络方法三:联合微调 3. 混合检索策略4. 关键问题解决Q: 如何解决模态间向量尺度不一致?Q: 如…...
BUUCTF——Kookie
BUUCTF——Kookie 进入靶场 一个登录页面 左上角提示让以admin身份登录 找到了cookie 应该与cookie相关 测试了一下admin admin没登上 We found the account cookie / monster 回头看了一下 这个是不是账号密码 测试一下 成功登入 但是没有flag 应该还是跟cookie相关 …...
代码随想录算法训练营
力扣684.冗余连接【medium】 力扣.冗余连接Ⅱ【hard】 一、力扣684.冗余连接【medium】 题目链接:力扣684.冗余连接 left x300 视频链接:代码随想录 题解链接:灵茶山艾府 1、思路 可以从前向后遍历每一条边(因为优先让前面的边连上…...
服务器磁盘不同格式挂载区别
在Linux系统中,磁盘不同格式挂载的核心区别主要体现在文件系统类型和挂载方式两个方面,以下为具体差异分析: 一、文件系统类型区别 磁盘格式即文件系统类型的选择直接影响挂载后的性能和功能: 常见文件系统比较 e…...
AI智能分析网关V4人员摔倒检测打造医院/工厂等多场景智能安全防护体系
一、方案背景 随着全球老龄化加剧,我国老年人口占比持续攀升,老年人摔倒伤亡事件频发,居家、养老机构等场景的摔倒防控成为社会焦点。同时,工厂、医院、学校等人员密集场所也易发生意外摔倒安全事故。传统人工监控存在视觉疲劳…...
window 显示驱动开发-准备 DMA 缓冲区
显示微型端口驱动程序必须及时准备 DMA 缓冲区。 当 GPU 处理 DMA 缓冲区时,通常调用显示微型端口驱动程序来准备下一个 DMA 缓冲区,以便提交到 GPU。 若要防止 GPU 耗尽,显示微型端口驱动程序在准备和提交后续 DMA 缓冲区时所花费的时间必须…...
程序设计实践--排序(1)
1、插入排序(一个数组) #include<bits/stdc.h> using namespace std; const int N1e35; int a[N]; int n; int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}for(int i1;i<n;i){int va[i];int ji-1;while(j>1&am…...
window 显示驱动开发-GDI 硬件加速
Windows 7 引入的 GDI 硬件加速功能在图形处理单元 (GPU) 上提供加速的核心图形设备接口 (GDI) 操作。 若要指示 GPU 和驱动程序支持此功能,显示微型端口驱动程序必须将DXGKDDI_INTERFACE_VERSION设置为 > DXGKDDI_INTERFACE_VERSION_WIN7。 显示微型端口驱动程…...
驱动开发硬核特训 · Day 31:理解 I2C 子系统的驱动模型与实例剖析
📚 训练目标: 从驱动模型出发,掌握 I2C 子系统的核心结构;分析控制器与从设备的注册流程;结合 AT24 EEPROM 驱动源码与设备树实例,理解 i2c_client 与 i2c_driver 的交互;配套高质量练习题巩固理…...
网络安全之网络攻击spring临时文件利用
0x00 传统攻击流程 我们之前传统的攻击流程由以下几个步骤来完成 攻击者找到可以控制目标JDBC连接fakeServer的地方目标向fakeServer发起连接请求fakeServer向目标下发恶意数据包目标解析恶意数据包并完成指定攻击行为(文件读取、反序列化),…...
统一端点管理(UEM):定义、优势与重要性
统一终端管理(UEM)是一种通过单一平台集中管理、监控和保护企业所有终端设备(如笔记本电脑、移动设备、服务器、物联网设备等)的综合性策略。其核心在于跨操作系统(Windows、macOS、iOS、Android等)实现…...
什么是Rootfs
Rootfs (Root Filesystem) 详解 buildroot工具构建了一个名为"rootfs.tar"的根文件系统压缩包。 什么是rootfs Rootfs(Root Filesystem,根文件系统)是操作系统启动后挂载的第一个文件系统,它包含系统正常运行所需的基…...
黑马Java基础笔记-13常用查找算法
查找算法 基本查找(也叫顺序查找,线性查找) 二分查找(需要有序数据) public static int binarySearch(int[] arr, int number){//1.定义两个变量记录要查找的范围int min 0;int max arr.length - 1;//2.利用循环不断的去找要查找的数据wh…...
#渗透测试#批量漏洞挖掘#LiveBos UploadFile(CVE-2021-77663-2336) 任意文件上传漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
Git 和 GitHub 学习指南本地 Git 配置、基础命令、GitHub 上传流程、企业开发中 Git 的使用流程、以及如何将代码部署到生产服务器
Windows 上 Git 安装与配置 下载安装:访问 Git 官方网站下载适用于 Windows 的安装程序。运行安装包时会出现许可协议、安装目录、组件选择等界面(如下图)。在“Select Components”页面建议勾选 Git Bash Here 等选项,以便在资源…...
SUI批量转账几种方法介绍
一、Sui区块链简介 Sui是由前Meta(Facebook)工程师创建的下一代Layer 1区块链,采用基于Move编程语言的新型智能合约平台。Sui的设计专注于高吞吐量、低延迟和可扩展性,使其特别适合需要处理大量交易的场景。 Sui的核心特点&…...
Vue2到Vue3迁移问题解析
1. 响应式系统的变化 问题:Vue3 使用 Proxy 替代 Object.defineProperty,导致部分 Vue2 的响应式写法失效。解析: 数组直接索引修改:// Vue2:需使用 Vue.set 或 splice this.$set(this.items, 0, new value); this.it…...
【解决】rpm 包安装成功,但目录不存在问题
开发平台:RedHat 8 一、问题描述 [rootproxy ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec # rpmbuild 制作 .rpm 包 [rootproxy ~]# yum -y install /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-1.x86_64.rpm # 安装 .rpm包 …...
深度学习框架显存泄漏诊断手册(基于PyTorch的Memory Snapshot对比分析方法)
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、显存泄漏:深度学习开发者的"隐形杀手" 在深度学习模型的训练与推…...
PyTorch中单卡训练、DataParallel(DP)和DistributedDataParallel(DDP)
PyTorch中提供了单卡训练、DataParallel(DP)和DistributedDataParallel(DDP),下面是相关原理与实现代码。 代码下载链接:git代码链接 一、单卡训练 原理 单卡训练是最基础的模型训练方式,使用…...
Redis从入门到实战 - 高级篇(中)
一、多级缓存 1. 传统缓存的问题 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,存在下面的问题: 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈Redis缓存失效时,会…...
项目计划缺乏可行性,如何制定实际可行的计划?
制定实际可行的项目计划需从明确项目目标、准确评估资源、风险管理、设定合理里程碑以及优化沟通渠道入手。其中,明确项目目标尤为关键,只有在目标清晰、具体且量化时,团队才能有效规划各项活动并衡量进展。例如,目标若模糊或过于…...
React中使用ahooks处理业务场景
// 从 ahooks 引入 useDynamicList 钩子函数,用于管理动态列表数据(增删改) import { useDynamicList } from ahooks;// 从 ant-design/icons 引入两个图标组件:减号圆圈图标和加号圆圈图标 import { MinusCircleOutlined, PlusCi…...
CNBC专访CertiK联创顾荣辉:从形式化验证到AI赋能,持续拓展Web3.0信任边界
近日,CertiK联合创始人、哥伦比亚大学教授顾荣辉接受全球知名财经媒体CNBC阿拉伯频道专访,围绕形式化验证的行业应用、AI在区块链安全中的角色,以及新兴技术风险等议题,分享了其对Web3.0安全未来的深刻洞察。 顾荣辉表示…...
基于Spring Boot与jQuery的用户管理系统开发实践✨
引言📚 用户管理系统是企业级应用的核心模块,需实现数据分页、状态管理及高效前后端交互。本文以Spring Boot为后端框架、jQuery为前端工具,构建一个结构清晰的用户管理系统,详解三层架构设计、接口规范及全栈开发流程࿰…...
StreamSaver实现大文件下载解决方案
StreamSaver实现大文件下载解决方案 web端 安装 StreamSaver.js npm install streamsaver # 或 yarn add streamsaver在 Vue 组件中导入 import streamSaver from "streamsaver"; // 确保导入名称正确完整代码修正 <!--* projectName: * desc: * author: dua…...
vue3+echarts 做温度计
参考Echarts 做的温度计_echart温度计-CSDN博客 但是现在这个写法不支持了,更新一下,然后修改了温度值和刻度及单位颜色为黑,初始化echarts写法, itemStyle: {normal: {color: #4577BA,barBorderRadius: 50,}},<div id"main14"…...
鸿蒙开发——7.ArkUI进阶:@BuilderParam装饰器的核心用法与实战解析
鸿蒙开发——7.ArkUI进阶:BuilderParam装饰器的核心用法与实战解析 ArkUI进阶:BuilderParam装饰器的核心用法与实战解析引言一、核心概念速览1.1 什么是BuilderParam?1.2 与Builder的关系 二、核心使用场景2.1 参数初始化组件2.2 尾随闭包初始…...
【数据结构】队列的完整实现
队列的完整实现 队列的完整实现github地址前言1. 队列的概念及其结构1.1 概念1.2 组织结构 2. 队列的实现接口一览结构定义与架构初始化和销毁入队和出队取队头队尾数据获取size和判空 完整代码与功能测试结语 队列的完整实现 github地址 有梦想的电信狗 前言 队列&…...
销售易史彦泽:从效率工具到增长引擎,AI加速CRM不断进化
导读:AI的加入,让CRM实现从“人适配系统”到“系统适配人”,从“管控工具”向“智能助手”跃迁,重构客户关系管理的底层逻辑。 作者 | 小葳 图片来源 | 摄图 AI应用与SaaS的关系,是当前科技与商业领域热议的话题。 当…...
开疆智能Profinet转ModbusTCP网关连接BORUNTE伯朗特系统配置案例
本案例是通过开疆智能Profinet转ModbusTCP网关将西门子PLC与BORUNTE机器人连接的配置案例。具体配置方法如下。 配置过程 Profinet设置 设置网关在Profinet一侧的参数包括(设备名称,IP地址等) 先导入GSD文件 选择GSD所在文件夹位置&#…...
从0到1搭建shopee测评自养号系统:独立IP+硬件伪装+养号周期管理
在跨境电商竞争白热化的背景下,Shopee卖家通过自养号测评实现流量与销量突破已成为行业共识。自养号测评通过模拟真实买家行为,为店铺注入精准流量,同时规避外包测评的高风险与不可控性。本文将从技术架构、运营策略、风险控制三个维度&#…...
arrow-0.1.0.jar 使用教程 - Java jar包运行方法 命令行启动步骤 常见问题解决
准备工作 首先确保你电脑上装了Java环境(JDK 8或以上版本) 把这个jar文件下载到你的电脑上,arrow-0.1.0.jar下载链接:https://pan.quark.cn/s/66d7c061c95a 运行方法 打开命令行(Windows按WinR输入cmd,M…...