Java中的Nested Classes和Inner Classes

Java中的Nested Classes和Inner Classes

Java有嵌套类(Nested Classes)和内部类(Inner Classes)的概念。

嵌套类(Nested Classes)分为两种:static and non-static,即静态的和非静态的,静态的嵌套类我们称之静态嵌套类(static nested classes),非静态的嵌套类我们称之为内部类(inner classes)。

静态的嵌套类我们可以这样表示:

OuterClass.StaticNestedClass

比如说我们创建一个静态嵌套类:

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

静态嵌套内部类与别的类并没有什么语义上的区别,关于静态嵌套类存在的意义是,它能直接获得其外部类的静态成员变量,使用嵌套静态类的意义实际上并不大。

内部类的表示如下:

class OuterClass {
    ...
    class InnerClass {
        ...
    }
}

内部类对象是依附于其外部类的对象存在而存在的,也就是说,如果我们要创建内部类的对象,首先我们必须要创建外部类的对象,然后才能创建内部类的对象,内部类可以直接获取外部类的字段(fields )和方法(methods )。创建内部类的方式如下:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

内部类由于依赖外部类的对象,因此其不能定义静态变量(static final除外)。

所以,关于静态嵌套类和内部类的区别是:

  • 静态嵌套类不会持有外部类的应用,而内部类会持有外部类的引用。
  • 静态嵌套类的实例化不需要先实例化外部类,而内部类的实例化需要先实例化外部类。
  • 静态嵌套类并不能获取外部类的成员变量(只能获取其静态成员变量),而内部类即使其外部类的成员变量是私有的,仍然可以获取其变量(无论是否是静态的)。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 15:53:10

Java中的Nested Classes和Inner Classes的相关文章

java嵌套类(Nested Classes)总结

转自:http://www.cnblogs.com/aigongsi/archive/2012/04/24/2467183.html Nested Classes定义 在java语言规范里面,嵌套类(Nested Classes)定义是: A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class t

java中的异常和处理

算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberF

关于java中的异常问题 1

1.首先参考一下关于java异常处理方面的知识 查看博客http://lavasoft.blog.51cto.com/62575/18920/ 这里介绍的很好,下面从中学习到一些东西,摘抄如下: 1.Throwable        Throwable 类是 Java 语言中所有错误或异常的超类.只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出.类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型. 两个子类的实例,Error

Java中调用Delphi编写的DLL

有些时候,要写一些程序,在 JAVA 里面好难实现, 但如果使用其它编程语言却又比较容易时,我们不妨通过 JNI 来让不同语言的程序共同完成. JNI 的教程, 网上 C 的比较多,Java 也提供了 javah.exe 为 C 语言的 JNI 程序生成头文件, 如果你是一个 Delphi 编程员, 能否让 JAVA 与 Delphi 程序交互呢? 答案是肯定的,今天我们就来看一下一个简单的例子. Helloworld. 主要是来认识一下, JAVA 怎样调用 Delphi 程序的方法. 好的,

java中常见的异常种类

Java常见的异常种类 ------------------------------------------------------------------------------- java Exception: 1.Error 2.Runtime Exception运行时异常 3.Exception 4.throw用户自定义异常 异常类分为两个大的类型:Error类代表了编译和系统的错误,不允许被捕获:Exception代表了java库方法所激发的异常.Exception类还包括Runtim

沉淀再出发:java中注解的本质和使用

沉淀再出发:java中注解的本质和使用 一.前言 以前XML是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,XML的内容也越来越复杂,维护成本变高.于是就有人提出来一种标记式高耦合的配置方式——注解.方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正几乎需要配置的地方都可以进行注解.关于注解和XML两种不同的配置模式,争论了好多年了,各有各的优劣,注解可以提供更大的便捷性,易于维护修改,但耦合度高,而XML相对于注解则是相反的.追求低耦合就要抛

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c

Java中JNI的使用详解第一篇:HelloWorld

今天开始研究JNI技术,首先还是老套路,输出一个HelloWorld:具体流程如下:在Java中定义一个方法,在C++中实现这个方法,在方法内部输出"Hello World",然后再回到Java中进行调用.分为以下步骤: 第一步:在Eclipse中建立一个类:JNIDemo 1 package com.jni.demo; 2 public class JNIDemo { 3 //定义一个本地方法 4 public native void sayHello(); 5 public sta

Java中动态加载jar文件和class文件

概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下的jar文件以及classes目录下的class文件,另外像spring这类框架,也可以根据指定的路径扫描并加载指定的类文件,这个技术可以实现一个容器,容纳各类不同的子应用. Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,不像C加载动态链接库只要一个文件名就可以搞定,但JDK仍提供了一整套方法来动态加载jar文件和class文件. 动态加载jar文件 // 系统类库路径 File libPath =