当前位置: 首页 > 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();}
}
http://www.lryc.cn/news/434930.html

相关文章:

  • Vue+SpringBoot+数据库整体开发流程 1
  • 百度Apollo打通与ROS的通信,扩展自动驾驶系统生态
  • Web3 项目安全手册
  • AI边缘计算在安防领域的智能化革新:赋能安防系统的智能化升级
  • vscode配置C/C++环境(保姆级详细教程)
  • MDK keil STM32 局部变量不能查看值,显示为not in scope
  • 表连接查询之两个left join与递归SQL
  • 2024.9.10
  • 22_图论中的高级数据结构
  • axure判断
  • 【开源大模型生态7】华为的盘古大模型
  • SprinBoot+Vue远程教育网站的设计与实现
  • docker的基本操作
  • 理解 RabbitMQ:生产者、连接、通道、交换机、队列与消费者的消息流
  • 【截图服务 +打包】pkg打包 puppeteer
  • 深入理解Servlet的并发处理机制小波制图流程图
  • Ajax和XMLHttpRequest之间的关系
  • Linxu系统:kill命令
  • 解决缺少genconfig
  • 百易云资产管理运营系统 house.save.php SQL注入漏洞
  • 【安卓13 源码】Input子系统(3) - EventHub增加设备的流程
  • 基于JAVA+SpringBoot+Vue的网上商城系统的设计与实现
  • Mysql基础练习题 1729.求关注者的数量 (力扣)
  • 【鸿蒙HarmonyOS NEXT】页面和自定义组件生命周期
  • Node.js Express 框架
  • 生日贺卡录放音芯片,多段音频录音ic生产厂商,NVF04M-32minute
  • 电影《西施新传》首映礼,九月金秋全国正式公映
  • 【H2O2|全栈】关于CSS(1)CSS基础(一)
  • 动态规划算法之背包问题详细解读(附带Java代码解读)
  • Vue3+TypeScript二次封装axios