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

静态内部类

目录

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

一、什么是静态内部类

在 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.kler.cn/a/298841.html

相关文章:

  • 在vscode的ESP-IDF中使用自定义组件
  • 基于SSM(Spring + Spring MVC + MyBatis)框架搭建一个病人跟踪信息管理系统
  • vue3标签中的ref属性如何使用$refs获取元素
  • stm32定时器输出比较----驱动步进电机
  • Linux的mmap
  • 贪心算法求解跳跃游戏
  • MySQL中的redo log、 undo log、bin log
  • 提前购|基于SSM+vue的创新型产品提前购平台(源码+数据库+文档)
  • docker进阶 compose等
  • 指针 (五)
  • uniapp,vite整合windicss
  • CSS全面知识点及其应用
  • vue3项目如何设置同样的接口第一次请求有效,如果第二次请求同样的接口,则不去请求,因为第一次请求还没有返回数据
  • python 图片识别文字
  • WPS VBA插件使用说明
  • 【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline
  • QWidget(c++)嵌入window环境的exe
  • class 7: vue.js 3 前端工程化
  • 面向 AI 学习者的 Python 快速入门(初学者)
  • 经纬恒润高压电池管理系统,助力新能源汽车飞速发展
  • [Linux]:文件(下)
  • 韩国裸机云站群服务器的特点和使用步骤
  • 如何通过技术手段提高对网络赌博资金流向的监测效率?
  • Linux业务系统将/home目录删除并将空间扩给根目录
  • 简要介绍联合索引
  • SprinBoot+Vue校园部门资料管理系统的设计与实现