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

Java学习笔记002——类的修饰符

在Java语言中,类的访问修饰符决定了其它类能够访问该类的方式。类有如下4种访问修饰符,在创建类时用于类的声明:

1、public:

  • 当一个类被声明为public时,它可以从任何其他类中被访问,无论这些类位于哪个包中。
  • 通常,公共类包含公共的静态方法,这些方法可以被其他任何类调用,以及公共的实例方法,这些方法可以被其他任何类的实例调用。
  • 顶层类只能是公开的或者是默认(包级私有)的。

2、protected:

  • protected访问修饰符允许类被其所在包中的其他类以及所有子类访问,无论子类是在哪个包中。
  • 这意味着,如果一个类是在包com.example中声明的protected,那么com.example包中的任何其他类以及任何继承自这个类的子类(无论它们在哪个包中)都可以访问这个类。

3、默认访问修饰符(无修饰符):

  • 当类没有显式声明任何访问修饰符时,它只能被其所在包中的其他类访问。

这种访问级别有时被称为“包级私有”,因为它限制了类只能在同一个包内部被访问。

4、private:

  • 在Java中,private访问修饰符不能用于顶层类(即非内部类或非嵌套类)。
  • 它只能用于类的成员(如字段、方法、内部类等),表示这些成员只能在它们自己的类中被访问。

下面是一个示例,展示了如何在Java中使用不同的访问修饰符来声明类:

// MyClass.java  
public class MyClass { // public 类  // 可以在任何地方被访问  
}  // AnotherClass.java  
class AnotherClass { // 默认访问修饰符(无修饰符)的类  // 只能在同一个包中被访问  
}  // ProtectedClass.java  
protected class ProtectedClass { // protected 类  // 可以在同一个包中和所有子类中被访问  
}  // InnerClass.java  
public class OuterClass {  protected class ProtectedInnerClass { // 嵌套类可以是 protected  // 可以在同一个包中和所有子类中被访问  }  class DefaultInnerClass { // 默认访问修饰符的嵌套类  // 只能在同一个包中被访问  }  
}

在Java中,private访问修饰符修饰的类不能用于顶层类(即非内部类或非嵌套类)。顶层类总是具有包级私有访问权限:public,protectded,默认(没有任何修饰符,也具有包级私有访问权限)。

作为一个只能作为内部类的私有类,可以被在所在的顶层类中被实例化访问:

(1)在顶层类的方法中实例化访问;

(2)在顶层类中其它内部类中访问。

package com.test;public class OuterClass {/*** 外部类(顶层类)OuterClass* 类中嵌套3个类:分别为私有(private),静态(static),默认访问修饰符(无修饰符)的类*/private class PrivateInnerClass {/*** PrivateInnerClass是一个私有内部类,只能在顶层类OuterClass中被访问:* 1、可以在OuterClass中方法中创建实例访问* 2、也可以在OuterClass中的内部其他类中的方法中访问* PrivateInnerClass类也可以访问顶层类OuterClass中的其它类。*/String name = "PrivateInnerClass.name";public void test() {// 创建内部类DefaultInnerClass的实例DefaultInnerClass a = new DefaultInnerClass();System.out.println("在私有内部类PrivateInnerClass类中调用DefaultInnerClass中属性name:" + a.name);}}static class StaticNestedClass {// 这是一个静态嵌套类,可以在任何地方被访问,因为它具有包级私有访问权限String name = "StaticNestedClass.name";}class DefaultInnerClass {// 这是一个默认访问修饰符的内部类,只能在同一个包中的OuterClass中被访问String name = "DefaultInnerClass.name";public void test() {StaticNestedClass a = new StaticNestedClass();System.out.println("在内部defalut类DefaultInnerClass中调用内部静态类StaticNestedClass的属性name:" +a.name);PrivateInnerClass b = new PrivateInnerClass();System.out.println("在内部defalut类DefaultInnerClass中调用内部私有类PrivateInnerClass的属性name:" +b.name);}}// 定义print方法public void print(String str) {System.out.println(str);PrivateInnerClass a = new PrivateInnerClass();System.out.println("调用内部私有类PrivateInnerClass中的成员name" + a.name);a.test();StaticNestedClass b = new StaticNestedClass();System.out.println("调用内部静态类StaticNestedClass中的成员name" + b.name);DefaultInnerClass c = new DefaultInnerClass();System.out.println("调用内部default类DefaultInnerClass中的成员name" + c.name);c.test();}
}

如上代码验证运行无误,另外需要理解的知识点:

对后缀为.java的文件进行编译,文件中的所有类都将被编译为一个独立的后缀为.class文件(java字节码文件)。

对于一个顶层类中定义了一个或者多个内部类也是如此,但是内部类编译后的.class类文件名是“顶层类名$私有类名.class"。编译如上代码OutClass.java文件,将产生如下几个文件:

1、顶层类文件:OutClass.class

2、私有类文件:OuterClass$DefaultInnerClass.class,OuterClass$PrivateInnerClass.class,OuterClass$StaticNestedClass.class。

这是Java提供的一个强大特性,即可以在单个文件中组织多个相关的类,同时保持它们在编译后的独立性。

相关文章:

Java学习笔记002——类的修饰符

在Java语言中,类的访问修饰符决定了其它类能够访问该类的方式。类有如下4种访问修饰符,在创建类时用于类的声明: 1、public: 当一个类被声明为public时,它可以从任何其他类中被访问,无论这些类位于哪个包中。通常&am…...

华为交换机常见命令总结

文章目录 查看MAC地址清除MAC地址修改MAC地址的老化时间查询STP信息查询接口与vlan的信息 查看MAC地址 查看所有MAC地址表项 display mac-address 查看静态MAC地址表项 display mac-address static //会把动态的过滤掉 查看动态MAC地址表项 display mac-address dynamic //会…...

Android 签名机制

V1是内部文件单个签 但是增加apk文件目录下面随意增加文件并不会有影响,它只关心meta-info文件 mf汇总清单的各个文件sha256 V2 整个APK文件,按文件进行hash 那么便不能随便在这里面增加文件了,增加了签名分块(不然签名信息存哪里)这里涉及一个文件概念 …...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Scroll容器组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Scroll容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Scroll容器组件 可滚动的容器组件,当子组件的布局尺寸超过父组件…...

FreeRTOS操作系统学习——FreeRTOS工程创建

FreeROTS工程创建 详细步骤 如无特殊情况,大部人都要配置为外部高速时钟 另外,本实验使用了FreeRTOS,FreeRTOS的时基使用的是Systick,而 STM32CubeMX中默认的HAL库时基也是Systick,为了避免可能的冲突,最…...

6. 使用 Spring Boot进行开发(Developing with Spring Boot)

6. 使用 Spring Boot进行开发(Developing with Spring Boot) 本节详细介绍了如何使用Spring Boot。它涵盖考虑构建系统、自动配置以及如何运行应用程序等主题。我们还介绍一些 Spring Boot 最新做法。虽然 Spring Boot 没有什么特别之处(它只…...

IP地址工具,判断IP是否在指定范围内(支持ipv6)

常用方法,判断一个ip是否在指定的ip范围内,范围可能包括起始ip范围或者掩码形式,无其它依赖, package com.yk.ip;import java.math.BigInteger; import java.net.InetAddress; import java.net.UnknownHostException; import jav…...

Redis 之六:Redis 的哨兵模式(Sentinel)

Redis 哨兵(Sentinel)模式是一种高可用性解决方案,用于监控和自动故障转移的集群系统。 在 Redis Sentinel 架构中,哨兵是一组运行在特殊模式下的 Redis 进程,它们可以监控一个或多个主从复制结构中的 Redis 主服务器以…...

总线要点笔记

1. AXI/AHB/APB差异 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) …...

RK3566 linux iperf网络测试

一、开发环境 系统:buildroot; 在Linux目标板和Windows PC上运行iperf进行测试; 二、调试 1、查询目标板上的iperf 使用终端助手连接目标板,然后输入命令查询iperf的版本: rootrk3566-buildroot:~# iperf -v iperf version …...

【无标题】计算机主要应用于哪些领域

科学计算(或称为数值计算)、数据处理(信息管理)、辅助工程、生产自动化、人工智能。1、科学计算(或称为数值计算):早期的计算机主要用于科学计算。目前,科学计算仍然是计算机应用的一…...

力扣精选算法100道——颜色分类(双指针和三指针俩种方法解决此题)

目录 🚩了解题意 🚩算法分析 第一种方法:双指针 🚩代码实现一 第二种方法:三指针 🚩代码实现二 🚩了解题意 本题将整数0,1,2代表红白篮,nums中的整数并…...

基于Java SSM springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java SSM springbootVUEredis实现的前后端分类版网上商城项目 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐…...

01——什么是人工智能

学习形式分类 1) 有监督学习 有监督学习(supervised learning),需要你事先需要准备好要输入数据(训练样本)与真实的输出结果(参考答案),然后通过计算机的学习得到一个预测模型,再用…...

AI国漫女神这样画!傻瓜式的云端SD(stable diffusion)部署教程 - 白嫖4090、无需代码、一键启动

一、前言:为什么要云端部署stable diffusion? 前段时间一直在用midjourney进行Ai绘画,但是发现Midjourney绘画的限制有点多很死板,很多图都不能画,懂得都懂。想使用Midjourney可以看这个:( 【推荐】Midjo…...

消息队列、共享内存、信号灯

IPC(Inter-Process Communication,进程间通信) 常用的 IPC 对象包括管道(pipe)、消息队列(message queue)、信号量(semaphore)和共享内存(shared memory&…...

K次取反后最大化的数组和 加油站 分发糖果 柠檬水找零

1005.K次取反后最大化的数组和 力扣题目链接(opens new window) 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。&a…...

Standoff: 独特的基于真实商业基础架构的网络战

Standoff 网络战通常每年进行两次(5 月和 11 月)。该公共活动的核心是由多个良心黑客团队(也称为威胁研究团队、白帽队或红队)对虚拟地区的基础架构进行系列攻击。 下一届 Standoff 将在 2024 年 5 月 23 日至 26 日举行的 Posi…...

如何成为fpga工程师

FPGA的应用领域非常的广,尤其再人工智能,大数据,云计算等等方向非常吃香。加上国家这两年的政策支持,整个芯片行业相比较其他的传统行业来说会好很多,总之前景是光明的,道路是曲折的,想要在人才…...

基础算法(二)#蓝桥杯

文章目录 8、双指针8.1、挑选子串8.2、聪明的小羊肖恩8.3、神奇的数组 9、二分9.1、跳石头9.2、可凑成的最大花朵数9.3、最大通过数9.4、妮妮的月饼广场9.5、基德的神秘冒险9.6、体育健将 10、倍增10.1、快速幂10.2、最近公共祖先LCA查询10.3、理想之城10.4、数的变换 8、双指针…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...