Java开发-面试题-0033-内部类和静态内部类有什么区别

Java开发-面试题-0033-内部类和静态内部类有什么区别

更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

(技术)微信公众号:CodeZeng1998

(生活)微信公众号:好锅

其他平台:CodeZeng1998好锅

在 Java 中,内部类和静态内部类有一些关键的区别。它们在访问外部类成员、生命周期以及使用场景上有所不同。

1. 内部类(非静态内部类)

内部类是定义在另一个类中的类,它与外部类实例相关联,可以直接访问外部类的成员变量和方法(包括私有成员)。

特点:
  • 与外部类实例相关内部类持有外部类的引用,只有在创建了外部类实例后才能创建内部类的实例。
  • 访问外部类成员:内部类可以直接访问外部类的所有成员,包括私有成员。
  • 需要外部类实例:创建内部类实例时,必须先有外部类的实例。
示例:
class OuterClass {
    private String outerField = "Outer field";

    class InnerClass {
        void display() {
            System.out.println(outerField); // 直接访问外部类的成员
        }
    }
    
    void createInner() {
        InnerClass inner = new InnerClass(); // 通过外部类实例创建内部类实例
        inner.display();
    }
}

2. 静态内部类

静态内部类是使用 static 关键字修饰的内部类,它与外部类的实例无关,因此不能直接访问外部类的非静态成员。

特点:
  • 与外部类实例无关:静态内部类不持有外部类的引用,可以独立于外部类实例创建。
  • 只能访问外部类的静态成员:静态内部类只能访问外部类的静态成员(包括静态方法和静态变量)。
  • 不需要外部类实例:可以直接通过外部类名创建静态内部类的实例。
示例:
class OuterClass {
    private static String staticField = "Static field";

    static class StaticInnerClass {
        void display() {
            System.out.println(staticField); // 只能访问外部类的静态成员
        }
    }
    
    void createStaticInner() {
        StaticInnerClass inner = new StaticInnerClass(); // 直接创建静态内部类实例
        inner.display();
    }
}

3. 主要区别

  • 关联性:普通内部类与外部类实例关联,静态内部类与外部类实例无关。
  • 成员访问:普通内部类可以访问外部类的所有成员,而静态内部类只能访问外部类的静态成员。
  • 实例化方式:普通内部类必须通过外部类实例创建,而静态内部类可以直接通过外部类名创建。
  • 性能和内存占用:由于静态内部类不依赖于外部类实例,它们通常在性能和内存占用上更加高效。

4. 使用场景

  • 普通内部类:适用于需要访问外部类非静态成员或者表示与外部类有强关联的关系时。
  • 静态内部类:适用于外部类的静态逻辑封装,或者不依赖外部类实例的情况下,如实现外部类的辅助功能、静态工具类等。

总结:内部类与静态内部类在设计上服务于不同的需求,选择何种内部类取决于它们是否需要与外部类实例关联。


以上就是本文相关的所有内容了,如果发现有误欢迎评论指正,更多内容欢迎各位关注。

在这里插入图片描述

上图是由 Pic 生成的

关键词:black widow


更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

(技术)微信公众号:CodeZeng1998

(生活)微信公众号:好锅

其他平台:CodeZeng1998好锅

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值