嵌套类就是指被定义在另一个类内部的类。分为四种:
静态成员类、非静态成员类、匿名类和局部类。
静态成员类和非静态成员类都可以访问外围类的所有成员,包括那些声明为private的成员。
两者非常相似,主要区别在于静态成员类多了static关键字。
正因此,非静态成员类的每个实例都隐含着与外围类的一个外围实例相关联。在非静态成员类的每个实例方法内部,可以调用外围实例上的方法,或者利用修饰过的this构造获得外围实例的引用。而静态成员类可以独立于外围实例之外。
public class StaticInnerClassTest {
private NonStaticInnerClass nsic = new NonStaticInnerClass();
private class NonStaticInnerClass{
private void test(){
StaticInnerClassTest.this.nsic = null;//reference this
}
}
}
所以在应用上,
如果声明成员类不要求访问外围实例,就要始终把static修饰符放在它的声明中。
因为如果使用非静态嵌套类的话,每个实例都将含有一个额外的指向外围对象的引用。保存这份引用要消耗时间和空间,并会导致外围实例在符合垃圾回收时却仍然得以保留。
分享到:
相关推荐
3. **接口与抽象类**:讨论了接口和抽象类在设计上的差异,强调接口用于定义类型,抽象类用于共享实现,以及Java 8引入的默认方法和静态方法。 4. **枚举**:介绍枚举类型的强大之处,如枚举的自动序列化、枚举常量...
8. **优先考虑静态成员类**:内部类提供了封装,但非静态(成员)内部类隐含持有对外部类的引用,可能导致内存泄漏。静态成员类则不持有这种引用,更适合表示与外部类关系不那么紧密的概念。 9. **序列化**:讨论了...
2. **考虑将静态导出类作为公共API的一部分(Item 3)**:静态导出类可以提供工具方法,或者作为单例的实现方式,避免直接使用public static成员,使API更清晰。 3. **总是用枚举替代常量类(Item 4)**:枚举类型...
3. 优先考虑使用静态成员类。 4. 使用final、static和private修饰符来防止意外的类初始化。 5. 尽量避免使用原始类型数组,而是使用泛型集合。 6. 使用泛型编写类、方法和接口。 7. 避免在public API中使用可变对象...
对于顶级(非嵌套)类和接口,只有两种可能的访问级别:包私有和公共。 如果包私有的顶级类或接口仅被一个类使用,请考虑使顶级类成为使用它的唯一类的私有静态嵌套类 成员(字段、方法、嵌套类和嵌套接口) 修饰符 ...
《Effective Java》是Java开发领域的经典著作,由Joshua Bloch编写,旨在提供一系列实用的编程准则和最佳实践,帮助开发者写出更高效、更可靠、更可维护的Java代码。这本书共分为九个部分,涵盖了23条核心的编程原则...
##### Item18:偏好静态成员类而非非静态类 - **目的**:提高代码的组织性和可维护性。 - **实现方式**: - 如果内部类不需要访问外围类的实例变量,则应将其声明为静态。 - 这样可以避免不必要的耦合,同时提高...
唯品会不仅参考了阿里的手册,还融合了《Clean Code》和《Effective Java》两本经典著作的内容。这两本书为编写高质量的Java代码提供了宝贵的指导思想和实践经验,因此唯品会在定制开发手册时,将其作为重要的参考...
标题“机器学习资源整理002不全”和描述中的“机器学习资源整理002不全-math_deep.effective-java”暗示了这份压缩包包含了关于机器学习和Java编程的资料,特别是数学基础和《Effective Java》这本书的相关内容。...
该手册不仅吸收了《阿里巴巴Java开发手册》的核心理念,还融合了唯品会在软件开发过程中的实践经验,以及借鉴了如《Clean Code》、《Effective Java》等权威资料的内容。通过这种方式,唯品会进一步提升了开发规范的...
它可以访问外部类的所有成员(包括私有的),并且可以分为非静态内部类和静态内部类。 1. **非静态内部类**:这类内部类需要先实例化外部类后才能创建。例如:`OuterClass.InnerClass inner = new OuterClass().new...
22. **静态类与密封类**:了解何时使用静态类和密封类,以及它们在封装和防止继承中的作用。 23. **接口与抽象类**:掌握接口和抽象类的区别,正确选择用于多态性实现。 24. **枚举与位掩码**:有效利用枚举和位...