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

静态内部类

目录

    • 一、什么是静态内部类
    • 二、静态内部类的意义

一、什么是静态内部类

在 Java 中,静态内部类(也称为静态嵌套类)是定义在一个类内部的类,但它与外部类没有关联,即它不持有外部类的引用。静态内部类可以访问外部类的所有静态成员,但不能访问外部类的非静态成员。以下是静态内部类的一些特点:

  1. 静态关联:静态内部类是静态的,这意味着它不依赖于外部类的实例。你可以直接通过外部类名来创建静态内部类的实例。

  2. 访问控制:静态内部类可以访问外部类的所有静态成员(包括私有静态成员),以及外部类的公共、受保护和包访问级别的静态方法和静态字段。

  3. 创建实例:你可以通过外部类名来创建静态内部类的实例,如下所示:

    OuterClass.StaticInnerClass innerObject = new OuterClass.StaticInnerClass(); 
    
  4. 不需要外部类实例:由于静态内部类不持有外部类的引用,因此你不需要外部类的实例就可以创建静态内部类的实例。

  5. 定义静态内部类:静态内部类使用 static 关键字进行定义。

    public class OuterClass {private static int outerStaticVar = 0;public static class StaticInnerClass {public void display() {System.out.println("Display static inner class.");// 访问外部类的静态成员System.out.println("Outer class static var: " + outerStaticVar);}}public static void main(String[] args) {// 创建静态内部类的实例StaticInnerClass innerObject = new StaticInnerClass();innerObject.display();// 直接通过外部类名创建静态内部类的实例OuterClass.StaticInnerClass anotherInnerObject = new OuterClass.StaticInnerClass();anotherInnerObject.display();}
    }
    

二、静态内部类的意义

  1. 逻辑分组:静态内部类允许你将相关的类组合在一起,逻辑上归为一个单元。这有助于代码的组织和可读性。
  2. 访问控制:静态内部类可以访问外部类的所有静态成员,包括私有的静态成员。这使得静态内部类成为访问和操作外部类静态成员的理想选择。
  3. 实现接口:静态内部类可以用来实现外部类无法实现的接口,特别是当外部类已经实现了另一个类或者接口时。
  4. 单例模式:静态内部类常用于实现单例模式,因为它们可以控制实例的创建,并且可以访问外部类的私有成员。
  5. 常量类:静态内部类经常用作常量类,用来存储与外部类相关的常量。
  6. 避免不必要的实例化:由于静态内部类不需要外部类的实例就可以创建,它们可以用来避免在只需要静态方法或静态字段时不必要的外部类实例化。

下面是一个简单的示例,展示了静态内部类的作用:

public class OuterClass {private static int outerStaticVar = 100;public static class StaticInnerClass {public void display() {// 直接访问外部类的静态变量System.out.println("Outer class static variable: " + outerStaticVar);}}public static void main(String[] args) {// 直接通过外部类名创建静态内部类的实例StaticInnerClass innerClassInstance = new StaticInnerClass();innerClassInstance.display();}
}

相关文章:

静态内部类

目录 一、什么是静态内部类二、静态内部类的意义 一、什么是静态内部类 在 Java 中,静态内部类(也称为静态嵌套类)是定义在一个类内部的类,但它与外部类没有关联,即它不持有外部类的引用。静态内部类可以访问外部类的…...

Vue+SpringBoot+数据库整体开发流程 1

本篇文章通过springboot整合mybatis-plus去实现后端对数据库的增删改查,以及响应给前端的url,让前端获得数据。 目录 一、简单搭建一个Vue项目 检查node.js版本 使用vue-cli创建空项目 Vue-cli工程中每个文件夹和文件的用处 二、Mysql数据库 创建数…...

百度Apollo打通与ROS的通信,扩展自动驾驶系统生态

技术文档|打通与ROS的通信,扩展自动驾驶系统生态_Apollo开发者社区 (baidu.com)...

Web3 项目安全手册

现如今针对 Web3 项目的攻击手法层出不穷,且项目之间的交互也越发复杂,在各个项目之间的交互经常会引入新的安全问题,而大部分 Web3 项目研发团队普遍缺少的一线的安全攻防经验,并且在进行 Web3 项目研发的时候,重点关…...

AI边缘计算在安防领域的智能化革新:赋能安防系统的智能化升级

随着人工智能(AI)和边缘计算技术的快速发展,两者在安防视频领域的应用日益广泛,为传统安防系统带来了革命性的变革。AI边缘计算技术通过将AI算法和模型部署在边缘设备上,实现了数据处理和智能决策的即时响应&#xff0…...

vscode配置C/C++环境(保姆级详细教程)

一. 引言 VSCode,全称为Visual Studio Code,是一款由微软开发的免费、开源的轻量级代码编辑器,它支持多种编程语言和平台,并提供丰富的扩展功能,让开发者能够更高效地编写代码。 大家能来搜用如何在VSCode配置C/C环境…...

MDK keil STM32 局部变量不能查看值,显示为not in scope

用MDK调试程序,查看变量时watch窗口总是和 一、方法1:优化级别改为Level 0 1 编译器把这个局部变量给优化掉了,并没有在内存中生成,把优化级别改为Level 0,重新编译。 Keil默认优化是等级3,最高优化&…...

表连接查询之两个left join与递归SQL

一、如下SQL1 SELECT i.*,su1.name as createName,su2.name as updateNameFROM information ileft join sys_user su1 on su1.idi.create_idleft join sys_user su2 on su2.idi.update_id 二、分析 1、SELECT i.*,su.name as createName,sua.name as updateName FROM informati…...

2024.9.10

打的模拟赛难度很大,T1就2200分? 其中转化成差分数组上的问题很巧妙 还用了将数分成2的多次方的形式,这种套路在最近的几场比赛和题中都见到过,值得归纳一下 T3是长链剖分和对顶堆维护,太难写了还没写出来 T4仍然是概率题,但是并没有见过类似的出题方式,其中关键是:最大独…...

22_图论中的高级数据结构

菜鸟:老鸟,我最近在处理一个网络节点数据的问题,发现代码运行得特别慢。你能帮我看看有什么优化的方法吗? 老鸟:当然可以。你处理的是图结构对吗?你是如何存储和操作这些节点的? 菜鸟&#xf…...

axure判断

在auxre中我们也可以实现判断的功能,当目标等于什么内容时则执行下方的功能。 一、判断输入框中是否有值 画布添加一个输入框、一个文本标签删除其中内容,添加一个按钮,输入框命名为【文本显示】文本标签命名为【提示】 给按钮新增一个交互…...

【开源大模型生态7】华为的盘古大模型

鹏程盘古模型是全球首个全开源2000亿参数的自回归中文预训练语言大模型,在知识问答、知识检索、知识推理、阅读理解等文本生成领域表现突出。 2070亿参数,64层。 这里注意几个概念。 参数(Parameters): 参数是指构成模…...

SprinBoot+Vue远程教育网站的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…...

docker的基本操作

目录 一,应用部署 创建容器 进入容器 创建有端口的容器 通过ssh进入容器 二、镜像操作 搜索镜像 拉取镜像 查看本地镜像 删除镜像 导入镜像 三、容器操作 创建并启动容器 使用 docker run 命令创建并启动一个容器 创建一个有端口号的容器 查看正在运…...

理解 RabbitMQ:生产者、连接、通道、交换机、队列与消费者的消息流

在分布式消息系统中,RabbitMQ 是一个非常流行的消息代理。它的核心理念是解耦应用程序的生产者和消费者,使得消息能够可靠地从一方传递到另一方。本文将带你深入了解 RabbitMQ 中 生产者、连接、通道、交换机、队列 和 消费者 之间的消息流,并…...

【截图服务 +打包】pkg打包 puppeteer

目录 最后结论 windows打包成服务 定制executablePath 服务遇到的问题 使用java开一个线程启动 遇到的问题与解决 版本匹配问题 打出包后的运行报错问题 linux下的安装 安装n 库缺少 程序运行后的报错 制作 运行报错与修改后成功 参考文档 最后结论 pkg -t win…...

深入理解Servlet的并发处理机制小波制图流程图

在Java Web开发中,Servlet是处理HTTP请求的核心组件。理解Servlet如何处理并发请求对于开发高性能Web应用至关重要。本文将深入探讨Servlet的生命周期、实例化过程以及多线程处理机制。 Servlet的生命周期和实例化 Servlet遵循单例模式,对于每个Servle…...

Ajax和XMLHttpRequest之间的关系

Ajax和XMLHttpRequest之间的关系是非常密切的。Ajax(Asynchronous JavaScript and XML)是一种网页开发技术,用于创建交互式的应用程序或网站。而XMLHttpRequest是Ajax的核心技术之一。 XMLHttpRequest:这是一个JavaScript对象&…...

Linxu系统:kill命令

1、命令详解: kill命令是用于向进程发送信号,通常用来终止某个指定PID服务进程,kill命令可以发送不同的信号给目标进程,来实现不同的操作,如果不指定信号,默认会发送 TERM 信号(15)&…...

解决缺少genconfig

编译鸿蒙L0系统时,遇到报错: [OHOS INFO] Returned 127. [OHOS INFO] stderr: [OHOS INFO] [OHOS INFO] env: “genconfig”: 没有那个文件或目录 [OHOS INFO] [OHOS INFO] See //kernel/liteos_m/BUILD.gn:34:1: whence it was imported. [OHOS INFO] …...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...