`
desert3
  • 浏览: 2139704 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

java嵌套类、静态嵌套类、内部类

    博客分类:
  • Java
 
阅读更多
官网文档:Nested Classes

什么是嵌套类及内部类?
可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:静态嵌套类和非静态嵌套类。非静态嵌套类,也被称作为内部类(inner class)。嵌套类是其外部类的成员,可以被声明为private, public, protected, 或者package private。 (此时,外部类只能被声明为public 或者package private。)
嵌套类 从JDK1.1开始引入。其中内部类(inner类)又可分为三种:
  • 在一个类(外部类)中直接定义的内部类;
  • 在一个方法(外部类的方法)中定义的内部类;
  • 匿名内部类。

class OuterClass {
    ...
    static class StaticNestedClass {
        ...
    }
    class InnerClass {
        ...
    }
}

为什么使用嵌套类(什么时候使用嵌套类):
  • It is a way of logically grouping classes that are only used in one place. - If a class is useful to only one other class, then it is logical to embed it in that class and keep the two together. Nesting such "helper classes" makes their package more streamlined.
  • 如果一个类只在一个地方被使用,同时这个类和另外一个类在逻辑上紧密相关,那么这个类可以被设计成内部类。
  • It increases encapsulation. - Consider two top-level classes, A and B, where B needs access to members of A that would otherwise be declared private. By hiding class B within class A, A's members can be declared private and B can access them. In addition, B itself can be hidden from the outside world.
  • 增强了封装性
  • Nested classes can lead to more readable and maintainable code. - Nesting small classes within top-level classes places the code closer to where it is used.
  • 嵌套类增加代码的可读性和可维护性(因为嵌套类从逻辑上来说都是相关的)。

静态嵌套类的(static nested class):
  • 可以独立于外部类被实例化
  • 无法访问外部类中的非静态变量和方法
  • 静态嵌套类要和其外部类的实例变量(或者其他类)交互的话,其行为和一般顶级类一样
  • 实际上,静态嵌套类就是一个为了打包方便而被嵌套进外部类的顶级类

非静态嵌套类(内部类inner class):
  • 想要实例化必须先实例化外部类。
  • 可以访问外部类中的需要实例化的变量和方法,
分享到:
评论

相关推荐

    java静态内部类(嵌套类)

    java静态内部类(嵌套类)的实例 。嵌套类意味着: 1. 要创建嵌套类的对象,并不需要其外围类的对象。 2. 不能从嵌套类的对象中访问非静态的外围类对象。

    java和kotlin的内部类静态嵌套类

    简单的入门(上传的资源如果因版权、使用、内容完整度 等原因被举报并通过官方审核,将扣除通过该资源获得的全部积分)

    Java嵌套类和内部类详解

    主要介绍了Java嵌套类和内部类详解,本文讲解了什么是嵌套类及内部类、静态嵌套类、在外部类中定义内部类、在方法中定义内部类、匿名内部类等内容,需要的朋友可以参考下

    几行代码带你彻底搞懂Java内部类

    内部类基本概述语法格式成员内部类局部内部类匿名内部类静态嵌套类静态嵌套类和非静态嵌套类的区别 内部类 基本概述 当一个类的定义放在另一个类的实体时,则该类叫做内部类,该类所在的类叫做外部类 在一个类体中...

    JAVA语法总结 - 内部类

    内部类分为成员内部类、静态嵌套类、方法内部类、匿名内部类。 几种内部类的共性: A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。 B、内部类不能...

    (超赞)JAVA精华之--深入JAVA API

    1.2.2 静态嵌套类 1.2.3 在外部类中定义内部类 1.2.4 在方法中定义内部类 1.2.5 匿名内部类 1.2.6 内部类使用的其它的问题 1.3 文件和流 1.3.1 什么是数据流 1.3.2 InputStream 的方法有: 1.3.3 OutputStream 的...

    java笔试题,java程序员常见的笔试

    Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

    详细分析内部类的发生内存泄漏的原因

    如果您已了解静态类和内部类,则应该熟悉使用Java代码中的嵌套类的基础知识。在这个相关的技巧中,我将带您了解嵌套类的陷阱之一,这是内部类在JVM中导致内存泄漏和内存不足错误的潜力。 之所以会发生这种类型的内存...

    Java开发技术大全(500个源代码).

    anonymousInner.java 匿名内部类 base.java 定义一个基类 BaseColors.java 一个简单的接口 basePoint.java 一个测试用的基类 Colorable.java 一个子接口 ColoredPoint.java 一个测试用子类 common.java 一个...

    JAVA内嵌类代码.rar

    内嵌套类包括了静态类和成员类,还有方法中的类和匿名类的基本规则。

    Java内部类的一些总结

     内部类分为: 成员内部类、局部内部类、静态嵌套类、匿名内部类 。  1.成员内部类  成员内部类是普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:  class Outter {  private int age = 12;...

    C/C++ 局部类和嵌套类

    局部类  局部类是指在[removed];” onClick=”[removed]tagshow(event, ‘函数’);” target=”_self”>函数中定义类。...  c++内部类与java内部类大的区别是:  c++的内部类对象没有外部类对象的指针

    JAVA SE学习精华集锦

    1.2.2 静态嵌套类 48 1.2.3 在外部类中定义内部类 48 1.2.4 在方法中定义内部类 49 1.2.5 匿名内部类 49 1.2.6 内部类使用的其它的问题 50 1.3 文件和流 51 1.3.1 什么是数据流 51 1.3.2 InputStream 的方法有: 51 ...

    java面试题大全-基础方面

    Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 ...

    java面试宝典

    注: 静态内部类(Inner Class)意味着1创建一个static内部类 的对象,不需要一个外部类对 象,2 不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是...

    java基础知识

    Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

    Java程序员面试陷阱大全.doc

    Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。  注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类...

    java 语言中常见易错知识点

    Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 ...

    Java语言程序设计实验指导书

    5 抽象类、接口与内部类 编写程序实现类的继承、与接口的编写。 6 异常 编程实现处理异常的语句,理解处理与抛出的区别,学会自定义异常。 7 Java流 用输入输出流实现从一个文本文件中读写简单数据。 8 泛型与容器...

Global site tag (gtag.js) - Google Analytics