当前位置: 首页 > news >正文

Java中的访问修饰符:分类、作用及应用场景

在Java编程中,访问修饰符(Access Modifiers)是控制类、方法、变量和构造函数访问权限的关键工具。通过合理使用访问修饰符,可以有效地封装代码,保护数据,并确保代码的安全性和可维护性。本文将详细介绍Java中的四种访问修饰符:publicprotecteddefault(包级私有)和private,并探讨它们的作用及应用场景。

1. 访问修饰符的分类

Java提供了四种访问修饰符,用于控制类、方法、变量和构造函数的可见性:

  1. public:公共的,表示对所有类可见。
  2. protected:受保护的,表示对同一包内的类和所有子类可见。
  3. default(包级私有):默认的,表示对同一包内的类可见。
  4. private:私有的,表示仅对同一类内部可见。

1.1 访问修饰符的可见性范围

访问修饰符同一类同一包子类其他包
public✔️✔️✔️✔️
protected✔️✔️✔️
default✔️✔️
private✔️

2. 访问修饰符的作用

2.1 public

public是最宽松的访问修饰符,表示对所有类可见。使用public修饰的类、方法、变量或构造函数可以在任何地方被访问。

应用场景:

  • :通常用于定义公共API,供其他包中的类使用。
  • 方法:用于定义类的公共接口,供外部调用。
  • 变量:用于定义类的公共属性,供外部访问和修改。

示例代码:

public class PublicExample {public int publicVariable = 10;public void publicMethod() {System.out.println("This is a public method");}
}public class Main {public static void main(String[] args) {PublicExample obj = new PublicExample();System.out.println(obj.publicVariable); // 输出: 10obj.publicMethod(); // 输出: This is a public method}
}

2.2 protected

protected修饰符表示对同一包内的类和所有子类可见。protected成员不能被不同包中的非子类访问。

应用场景:

  • 方法:用于定义子类可以重写的方法,同时限制外部包的访问。
  • 变量:用于定义子类可以访问的变量,同时限制外部包的访问。

示例代码:

package com.example.package1;public class ProtectedExample {protected int protectedVariable = 20;protected void protectedMethod() {System.out.println("This is a protected method");}
}package com.example.package1;public class SubClass extends ProtectedExample {public void accessProtectedMembers() {System.out.println(protectedVariable); // 输出: 20protectedMethod(); // 输出: This is a protected method}
}package com.example.package2;import com.example.package1.ProtectedExample;public class OtherPackageClass {public static void main(String[] args) {ProtectedExample obj = new ProtectedExample();// 编译错误: protectedVariable 和 protectedMethod 在不同包中不可见// System.out.println(obj.protectedVariable);// obj.protectedMethod();}
}

2.3 default(包级私有)

default修饰符是默认的访问级别,表示对同一包内的类可见。如果一个类、方法或变量没有显式地指定访问修饰符,那么它默认是default

应用场景:

  • :用于定义包内使用的工具类或辅助类。
  • 方法:用于定义包内使用的辅助方法。
  • 变量:用于定义包内使用的辅助变量。

示例代码:

package com.example.package1;class DefaultExample {int defaultVariable = 30;void defaultMethod() {System.out.println("This is a default method");}
}package com.example.package1;public class SamePackageClass {public static void main(String[] args) {DefaultExample obj = new DefaultExample();System.out.println(obj.defaultVariable); // 输出: 30obj.defaultMethod(); // 输出: This is a default method}
}package com.example.package2;import com.example.package1.DefaultExample;public class OtherPackageClass {public static void main(String[] args) {DefaultExample obj = new DefaultExample();// 编译错误: defaultVariable 和 defaultMethod 在不同包中不可见// System.out.println(obj.defaultVariable);// obj.defaultMethod();}
}

2.4 private

private是最严格的访问修饰符,表示仅对同一类内部可见。使用private修饰的成员不能被外部类访问。

应用场景:

  • 方法:用于定义类的内部实现细节,防止外部调用。
  • 变量:用于定义类的私有属性,防止外部直接访问和修改。

示例代码:

public class PrivateExample {private int privateVariable = 40;private void privateMethod() {System.out.println("This is a private method");}public void accessPrivateMembers() {System.out.println(privateVariable); // 输出: 40privateMethod(); // 输出: This is a private method}
}public class Main {public static void main(String[] args) {PrivateExample obj = new PrivateExample();obj.accessPrivateMembers();// 编译错误: privateVariable 和 privateMethod 在类外部不可见// System.out.println(obj.privateVariable);// obj.privateMethod();}
}

3. 访问修饰符的应用场景

3.1 封装性

访问修饰符是实现封装性的关键工具。通过将类的内部实现细节(如变量和方法)设置为private,可以防止外部直接访问和修改,从而保护数据的安全性。

3.2 继承与多态

在继承和多态的场景中,protected修饰符非常有用。它允许子类访问和重写父类的方法,同时限制外部包的访问,从而实现更灵活的代码设计。

3.3 API设计

在设计公共API时,public修饰符用于定义类的公共接口,供外部调用。而privatedefault修饰符则用于隐藏内部实现细节,确保API的稳定性和安全性。

4. 总结

访问修饰符是Java中控制类、方法、变量和构造函数访问权限的重要工具。通过合理使用publicprotecteddefaultprivate修饰符,可以实现代码的封装性、继承性和多态性,从而提高代码的安全性和可维护性。

在实际开发中,建议根据具体需求选择合适的访问修饰符,确保代码的可见性和安全性。如果你有任何问题或建议,欢迎在评论区留言讨论。

相关文章:

Java中的访问修饰符:分类、作用及应用场景

在Java编程中,访问修饰符(Access Modifiers)是控制类、方法、变量和构造函数访问权限的关键工具。通过合理使用访问修饰符,可以有效地封装代码,保护数据,并确保代码的安全性和可维护性。本文将详细介绍Java…...

【day16】Java开发常用API

模块15回顾 在深入探讨模块16之前,让我们回顾一下【day15】中的重点内容: String类: 构造方法:String(), String(String s), String(char[] chars), String(byte[] bytes), String(char[] chars, int offset, int count), String…...

LLaMA-Factory(二)界面解析

这里写目录标题 1. 基础选项语言模型选择模型路径微调方法检查点路径量化等级量化方法提示模板RoPE加速方式 2.模型训练界面训练方式数据集超参数设置其他参数部分参数设置LoRA参数设置RLHF参数设置GaLore参数设置BAdam参数设置训练 3.评估预测界面4.Chat界面5.导出Export界面 …...

(14)CT137A- 动态数码管设计

(1)了解板卡原理图中数码管的特性:共阳极数码管,公共端连接了电源,FPGA IO口低电平有效,另外,可以看到位选端FPGA位选低电平时选通。 (2)刷新时间的设定:众所…...

RT-DETR学习笔记(2)

七、IOU-aware query selection 下图是原始DETR。content query 是初始化为0的label embedding, position query 是通过nn.Embedding初始化的一个嵌入矩阵,这两部分没有任何的先验信息,导致DETR的收敛慢。 RT-DETR则提出要给这两部分(conten…...

JS、JSX 和 TSX 的对比指南

JS、JSX 和 TSX 的对比指南 1. JavaScript (.js) 简介 JavaScript 是一种轻量级的、解释型的编程语言,是 Web 开发中最基础的语言之一。 优点 学习曲线较低,容易入门使用范围广泛,生态系统成熟灵活性高,支持多种编程范式不需…...

【STM32】RTT-Studio中HAL库开发教程十:EC800M-4G模块使用

文章目录 一、简介二、模块测试三、OneNet物联网配置四、完整代码五、测试验证 一、简介 EC800M4G是一款4G模块,本次实验主要是进行互联网的测试,模块测试,以及如何配置ONENET设备的相关参数,以及使用STM32F4来测试模块的数据上报…...

增加nginx配置文件(conf.d), 管理多个项目

1.切换到nginx目录下, 新建conf.d文件夹 mkdir conf.d 2.赋予conf.d权限 chmod 777 conf.d 3.进入conf.d, 编辑conf文件 vim zc_travel.conf server { listen 13101; server_name localhost;location / {root /home/baoxin/app/web/insight-radar-rcfx-pre/html_dev;index …...

服务器中了挖矿病毒-应急响应

事件:客户反映服务器响应很慢,出行卡顿,服务器操作系统为windows server 2008。 现场解决步骤: 1、打开任务管理器,看到一个javs.exe的程序,占用CPU使用率比较高,怀疑可能是木马。 2、右键打开…...

pid学习感悟

飞行控制PID算法——无人机飞控_飞控算法-CSDN博客 首先pid是对现测量值和目标值的差值,即偏差值的操作 p是线性操作,偏差越大,则对于控制单元操作的值越大 d是微分操作,我们知道微分其实就是数值变化的斜率,所以当偏…...

Centos7.9安装openldap+phpldapadmin+grafana配置LDAP登录最详细步骤 亲测100%能行

一、部署LDAP 1、安装LDAP yum install -y openldap-servers openldap-clients openldap openldap-devel compat-openldap openldap-servers-sql systemctl start slapd systemctl enable slapd2、创建第一个管理账号密码(设置为ldapadmin) slappass…...

唯品会C++面试题及参考答案

内存池怎么可以保证不会产生碎片? 内存池通过预先分配一块较大的内存区域,然后对这块内存进行管理,来减少碎片产生。 首先,内存池采用固定大小的内存块分配策略。比如,将内存池划分成大小相同的小块,当有内存分配请求时,就从这些固定大小的块中选取合适的进行分配。这种…...

Flask中@app.route()的methods参数详解

诸神缄默不语-个人CSDN博文目录 在 Flask 中,app.route 是用于定义路由的核心装饰器,开发者可以通过它为应用指定 URL 映射及相应的处理函数。在处理 HTTP 请求时,不同的业务场景需要支持不同的 HTTP 方法,而 app.route 的 metho…...

使用Grafana中按钮插件实现收发HTTP请求

最近项目中需要监控分布式集群的各项指标信息,需要用到PrometheusGrafana的技术栈实现对分布式集群的各个节点状态进行可视化显示,但是要求前端需要提供一个易用的接口让用户可以触发一些操作,例如负载高时进行负载均衡或弹性伸缩。网上找到的…...

workman服务端开发模式-应用开发-vue-element-admin挂载websocket

一、项目根目录main.js添加全局引入 import /utils/websocket 二、在根目录app.vue 中初始化WebSocket连接 <template><div id"app"><router-view /></div> </template><script>import store from ./store export default {n…...

堆排序【东北大学oj数据结构9-4】C++

堆排序是一种基于堆的数据结构的排序&#xff0c;是一种快速排序算法&#xff0c;可以在输入数组中实现排序处理&#xff08;内存高效&#xff09;。 堆排序可以实现如下&#xff1a; maxHeapify(A, i) l left(i) r right(i) // select the node which has the m…...

Linux RTC 驱动框架

目录 一、实时时钟&#xff08;RTC&#xff09;介绍1.1 概述1.2 功能1.3 应用场景1.4 工作原理1.5 对外接口1.6 常见 RTC 芯片1.7 在 Linux 系统中的应用1.8 注意事项 二、Linux 内核 RTC 驱动框架2.1 相关源码文件介绍2.2 核心数据结构2.2.1 struct rtc_device2.2.2 rtc_class…...

智能订餐:基于JSP的管理系统设计与优化

相关技术介绍 2.1 B/S结构 目前使用较多的开发结构模式大致可以包括C/S模式和B/S模式[5]。其中&#xff0c;C/S模式全称为客户端/服务器模式&#xff08;Client/Server模式&#xff09;&#xff0c;B/S模式全称为浏览器/服务器模式&#xff08;Browser/Server模式&#xff09;。…...

Java基本查询(四)

JPA 查询All示例 JPA教程 - JPA查询All示例 我们可以在JPQL中使用带有子查询的ALL运算符。 List l em.createQuery("SELECT e FROM Professor e WHERE e.salary < " "ALL (SELECT d.salary FROM e.directs d)").getResultList();例子 下面的代码来自…...

【双指针算法】--复写零

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改&a…...

leetcode hot100 两两交换链表之中的节点

24. 两两交换链表中的节点 已解答 中等 相关标签 相关企业 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09; # Definition fo…...

Yolo11改进策略:主干网络改进|FastVit与Yolo11完美融合,重参数重构Yolo11网络(全网首发)

文章目录 摘要FastViT:一种使用结构重新参数化的快速混合视觉变换器1、简介2、相关工作3、体系结构3.1、概述3.2、FastViT3.2.1、重新参数化跳过连接3.2.2、线性训练时间过参数化3.2.3、大核卷积4、实验4.1、图像分类4.2、鲁棒性评价4.3、3D Hand网格估计4.4、语义分割和目标检…...

vscode打开下一个文件的时候上一个文件会关闭

解决方法&#xff1a; 你可以通过设置 workbench.editor.enablePreview 来控制在 VS Code 中打开文件时是否会关闭上一个文件。将其设置为 false 可以防止这种行为。 {"workbench.editor.enablePreview": false } 在设置编辑器中显示 "workbench.editor.enab…...

windows使用zip包安装MySQL

windows通过zip包安装MySQL windows通过zip包安装MySQL下载MySQL的zip安装包创建安装目录和数据目录解压zip安装包创建配置目录 etc 和 配置文件 my.ini安装MySQL进入解压后的bin目录执行命令初始化执行命令安装 验证安装查看服务已安装 启动MySQL查看服务运行情况修改密码创建…...

【LeetCode每日一题】——415.字符串相加

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 415.字符串相加 四【题目描述】 给定两个字符…...

基于角色的访问控制(RBAC)在异构系统中的应用

在数字化蓬勃发展的当下&#xff0c;企业运营高度依赖各类异构系统。基于角色的访问控制&#xff08;RBAC&#xff09;成为管理这些系统中用户权限的核心策略。RBAC 依据组织内的岗位、职责定义角色&#xff0c;按角色分配权限&#xff0c;用户凭借所属角色获取相应访问权&…...

FPGA实现MIPI转FPD-Link车载同轴视频传输方案,基于IMX327+FPD953架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、详细设计方案设计原理框图IMX327 及其配置FPD-Link视频串化-解串方案MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 5、…...

远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?

前言 前段时间有个朋友过来咨询关于Windows使用第三方远程软件&#xff08;向日葵、Todesk等&#xff09;远程连接控制macOS系统&#xff0c;但出现了一些奇奇怪怪的问题。 比如在连接的时候&#xff0c;一直卡在100%连接&#xff0c;对方的电脑却已经显示已经被控制的状态。…...

springboot中使用gdal将表中的空间数据转shapefile文件

springboot中使用gdal将表中的空间数据转shapefile文件 代码&#xff1a; // 样本导出-将样本表导出为shapefile&#xff0c;复制样本shp文件到临时目录下 sampleDir是文件夹pathpublic void setYbShapeFile(Yb yb, File sampleDir) {// 创建 前时项 和 后时项 文件夹File y…...

捋一捋相关性运算,以及DTD和NLP中的应用

捋一捋相关性运算&#xff0c;以及DTD和NLP中的应用 相关性和相干性,有木有傻傻分不清相关性数字信号的相关运算同维度信号的相关理解 相关--互相关--相干 回声消除过程如何套用这些知识相关性/相干性检测在DT中的应用参考 相关性和相干性,有木有傻傻分不清 这是容易混淆的两个…...

Calcite Web 项目常见问题解决方案

Calcite Web 项目常见问题解决方案 calcite-web Authoritative front-end development resources for Calcite design initiative. Includes extendable base components and styles, as well as a modular and efficient framework for ArcGIS properties. [这里是图片001] 项…...

3090. 每个字符最多出现两次的最长子字符串

题目内容&#xff1a; 给你一个字符串 s &#xff0c;请找出满足每个字符最多出现两次的最长子字符串&#xff0c;并返回该 子字符串 的 最大 长度。 示例 1&#xff1a; 输入&#xff1a; s "bcbbbcba" 输出&#xff1a; 4 解释&#xff1a; 以下子字符串长…...

基于微信小程序的短视频系统(SpringBoot)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

Git的简介

文章目录 一.Git是什么二.核心概念三.工作流程四.Git的优势 下载Git 推荐官网下载 官网地址 一.Git是什么 Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化并协调多人对同一项目的开发工作。它就像是一个时光机器&#xff0c;能够记录文件在不同时间点的状态&…...

【XR】ATW

异步时间扭曲&#xff08;Asynchronous Timewarp&#xff0c;简称ATW&#xff09;是一种在虚拟现实&#xff08;VR&#xff09;技术中使用的算法&#xff0c;它通过生成中间帧来减少因帧率不足导致的抖动和延迟&#xff0c;从而提高用户体验。ATW技术在两个线程中完成时间扭曲的…...

记Fastjson2的一个报ConcurrentModificationException的bug

错误背景&#xff1a;fastjson2的parseObject方法&#xff0c;在spring webflux项目中被调用&#xff0c;有时会报java.util.ConcurrentModificationException错误。报错处的代码如下图&#xff1a; 改了半天与并发安全相关的代码&#xff0c;还是会报此错误。后来改变思路搜…...

JAVAweb学习日记(二)JavaScript

一、概念 二、JavaScript引入方式 三、JavaScript书写语法 输出语句&#xff1a; 变量&#xff1a; 数据类型、运算符、流程控制语句&#xff1a; 数据类型&#xff1a; 运算符&#xff1a; 字符串如果是 数字字符构成&#xff0c;先把读到的数字转为数字类型&#xff0c;后续…...

FPGA学习(基于小梅哥Xilinx FPGA)学习笔记

文章目录 一、整个工程的流程二、基于Vivado的FPGA开发流程实践&#xff08;二选一多路器&#xff09;什么是二选一多路器用verilog语言&#xff0c;Vivado软件进行该电路实现1、设计输入&#xff1a;Design Sources中的代码2、分析和综合&#xff1a;分析设计输入中是否有错误…...

Linux的VIM基本操作

编辑模式转换 编辑指令 linux用vim编辑代码&#xff0c;再用gcc进行编译 编辑命令如下 gcc编译如下...

2024年12月英语六级CET6写作与翻译笔记

目录 1 写作 1.1 大学为学生提供了探索各种可能性 1.2 自律在个人成长中的重要性 1.3 切实可行的目标 2 翻译 2.1 洋山港(Yangshan Port) 2.2 中国航天事业 2.3 北斗卫星导航系统 1 写作 1.1 大学为学生提供了探索各种可能性 1.2 自律在个人成长中的重要性 1.3 切实可…...

学习记录:electron主进程与渲染进程直接的通信示例【开箱即用】

electron主进程与渲染进程直接的通信示例 1. 背景&#xff1a; electronvue实现桌面应用开发 2.异步模式 2.1使用.send 和.on的方式 preload.js中代码示例&#xff1a; const { contextBridge, ipcRenderer} require(electron);// 暴露通信接口 contextBridge.exposeInMa…...

领域自适应

领域自适应&#xff08;Domain Adaptation&#xff09;是一种技术&#xff0c;用于将机器学习模型从一个数据分布&#xff08;源域&#xff09;迁移到另一个数据分布&#xff08;目标域&#xff09;。这在源数据和目标数据具有不同特征分布但任务相同的情况下特别有用。领域自适…...

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)

KubeadmContainerd部署k8s(v1.28.2)集群&#xff08;非高可用版&#xff09; 文章目录 KubeadmContainerd部署k8s(v1.28.2)集群&#xff08;非高可用版&#xff09;一.环境准备1.服务器准备2.环境配置3.设置主机名4.修改国内镜像源地址5.配置时间同步6.配置内核转发及网桥过滤 …...

重温设计模式--职责链模式

文章目录 职责链模式的详细介绍C 代码示例C示例代码2 职责链模式的详细介绍 定义与概念 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它旨在将请求的发送者和多个接收者解耦&#xff0c;让多个对象都有机会处理请求&a…...

单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号

一&#xff0c;简介 一般来说&#xff0c;公司有很多系统使用&#xff0c;为了实现统一的用户名管理和登录所有系统&#xff08;如 GitLab、Harbor 等&#xff09;&#xff0c;并在员工离职时只需删除一个主账号即可实现权限清除&#xff0c;可以采用 单点登录 (SSO) 和 集中式…...

【Rust自学】5.1. 定义并实例化struct

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 5.1.1. 什么是struct struct的中文意思为结构体&#xff0c;它是一种自定义的数据类型&#xff0c;它允许程序为相关联的值命名和打包&am…...

vue-cli 5接入模块联邦 module federation

vue-cli 5接入模块联邦 module federation 模块联邦概念实现思路配置遇到的问题: 模块联邦概念 模块联邦由webpack 5最先推出的,让应用加载远程的代码模块来实现不同的Web应用共享代码片段.模块联邦分为两个角色,一个是生产者,一个是消费者.生产者暴露代码供消费者消费 (用一个…...

[前端]mac安装nvm(node.js)多版本管理

NVM功能简介 NVM&#xff08;Node Version Manager&#xff09;是一个用于管理多个Node.js版本的命令行工具&#xff0c;它允许开发者在同一台机器上安装、切换和卸载不同版本的Node.js&#xff0c;从而解决版本不兼容的问题。以下是NVM的一些主要功能和用途&#xff1a; 安装和…...

thinkphp8+layui分页

前端 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>demo</title><link href"//unpkg.com/layui2.9.20/dist/css/layui.css" rel"stylesheet"> </head> <…...

【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的?

【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的&#xff1f; 重要性&#xff1a;★★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用…...