当前位置: 首页 > 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、双指针…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...