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();