java 学习笔记

前言

如何学 java:把自己整疯就好了。QWQ

放些自己本来搞不懂的内容一看以下东西就懂了的东西。(好像是病句。。。)

正文

注:基本都是复制粘贴的,因为我都把自己搞疯了,怎么有时间总结自己的想法。QWQ

静态类与非静态类直接区别

在Java中,静态类和非静态类(即普通内部类)的主要区别体现在声明方式、作用域、内存分配以及与外部类的关系上。以下是详细对比:


1. 静态类(Static Nested Class)

  • 声明方式:用 static 修饰,定义在另一个类的内部。
    class OuterClass {
        static class StaticNestedClass { }
    }
    
  • 与外部类的关系
    • 静态类不依赖外部类的实例,可以直接通过外部类名访问。
    • 不能直接访问外部类的非静态成员(需通过外部类实例访问)。
  • 内存分配
    • 静态类在加载外部类时即被加载,与外部类实例无关。
  • 使用场景
    • 当内部类不需要访问外部类实例成员时,优先用静态类(更节省内存)。
    • 例如工具类、与外部类逻辑相关的辅助类。

示例

OuterClass.StaticNestedClass nestedObj = new OuterClass.StaticNestedClass();

2. 非静态类(普通内部类,Inner Class)

  • 声明方式:无 static 修饰,定义在另一个类的内部。
    class OuterClass {
        class InnerClass { }
    }
    
  • 与外部类的关系
    • 非静态类隐式持有外部类的引用,可以直接访问外部类的所有成员(包括私有成员)。
    • 必须先创建外部类实例,才能创建内部类实例。
  • 内存分配
    • 非静态类的实例与外部类实例绑定,可能导致内存泄漏(如内部类被长生命周期对象引用时)。
  • 使用场景
    • 需要访问外部类实例成员或紧密耦合外部类状态时使用。
    • 例如事件监听器、适配器模式。

示例

OuterClass outerObj = new OuterClass();
OuterClass.InnerClass innerObj = outerObj.new InnerClass();
posted @ 2025-08-10 18:27  wdgm4  阅读(9)  评论(0)    收藏  举报