前言

定义

静态嵌套类(Static Nested Class),是 Java 中对类的一种定义方式,是嵌套类的一个分类。

Java 编程语言允许一个类被定义在另一个类中,这样的类就称为嵌套类。嵌套类分为两种:静态的和非静态的。用 static 关键字来声明的嵌套类,就称为静态嵌套类

包含嵌套类的类,可称为外围类(Enclosing Class)或外部类(Outer Class)。静态嵌套类不能访问其外围类的其他成员。静态嵌套类作为其外部类的成员,它可声明为 privatepublicprotected 或包私有的。

  • 提示:外部类只能声明为 public 或包私有的。

概述

与类的方法和变量一样,静态嵌套类与其外部类相关联。与类的静态方法一样,静态嵌套类不能直接引用其外围类中定义的实例变量或方法。

 /**
* 定义一个公共的 OuterClass 类。
*/
public class OuterClass {
private final String name; public static void main(String[] args) {
String name = "Java";
OuterClass outerObject = new OuterClass(name);
OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass(name);
System.out.println(outerObject.getName());
System.out.println(nestedObject.getName());
} /**
* 定义一个 OuterClass 类的构造方法。
*
* @param name 表示一个名称字符串。
*/
public OuterClass(String name) {
this.name = name;
} public String getName() {
return name;
} /**
* 定义一个包私有的 StaticNestedClass 类。
*/
static class StaticNestedClass {
private final String name; /**
* 定义一个 StaticNestedClass 类的构造方法。
*
* @param name 表示一个名称字符串。
*/
public StaticNestedClass(String name) {
this.name = name + " (in the nested object)";
} public String getName() {
return name;
}
}
}
/* 输出结果:
Java
Java (in the nested object) */

在上述示例中,若 StaticNestedClass 类的实例在创建时需要使用 OuterClass 类的成员变量,则可向其构造方法传递该变量的值。

  • 提示:静态嵌套类在与其外部类或其他类的实例成员进行交互的时候,就像任何其他顶层类(Top-Level Class)一样。实际上,静态嵌套类在行为上就是一个顶层类,为了便于打包,它被嵌套在了另一个顶层类中。

请用外围类名来访问静态嵌套类,例如,在为静态嵌套类创建对象时,请使用以下语法:

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

最新文章

  1. C#版的mongodb最新的官方驱动2.4.0版本
  2. mac下网页中文字体优化
  3. filestream read方法 循环读取固定文件
  4. C#中的集合有几种?
  5. Android第三方jar包ClassNotFind
  6. 1 。 LightOJ 1234 打表法(数据太大,把数据缩小100倍)
  7. iOS中的imageIO与image解码
  8. Bootstrap_排版_列表
  9. nginx本地的测试环境添加SSL
  10. Java静态字段(属性、方法、类别)
  11. VB.NET版机房收费系统---异常处理
  12. Previous operation has not finished;run 'cleanup' if it was interrupted;Please execute the 'Cleanup' command.
  13. Linux学习小记(1)
  14. 力扣(LeetCode)520. 检测大写字母
  15. jquery 滚动条位置的
  16. hadoop sqoop的常用名命令
  17. SDN交换机迁移2
  18. LTE时代的定位技术:OTDOA,LPP,SUPL2.0
  19. Unity3D中的弹道和移动目标提前量计算
  20. pylot 学习笔记

热门文章

  1. 前端基础知识之html和css全解
  2. jchdl - RTL
  3. Chisel3 - Tutorial - Adder4
  4. Java实现 LeetCode 697 数组的度(类似于数组的map)
  5. Java实现 蓝桥杯 算法训练 最大的算式
  6. Java实现 LeetCode 367 有效的完全平方数
  7. Java实现 蓝桥杯VIP 算法训练 黑色星期五
  8. Java实现 LeetCode 123 买卖股票的最佳时机 III(三)
  9. Java实现 LeetCode 116 填充每个节点的下一个右侧节点指针
  10. Java中数组二分法查找