说说 Java 的静态内部类
Java 的静态内部类就是定义在一个类的内部,并且标注为 static 的类。由于类是静态的,所以不需要通过外围类的实例来创建。下面是一个示例:
public class Outer {
private static final Logger log = LoggerFactory.getLogger(Outer.class);
private static class Inner {
public int value() {
return 1;
}
}
public static Inner inner() {
return new Inner();
}
public static void main(String[] args) {
Inner c = inner();
log.info("c.value() -> {}。", c.value());
}
}
外围类 Outer 定义了一个私有、静态内部类 Inner。然后定义了一个静态方法 inner(),返回 Inner 类。这个静态方法 inner() 就是外部类调用该内部类的桥梁。
静态内部类与非静态内部类之间的比较:
比较 | 静态内部类 | 非静态内部类 |
---|---|---|
创建 | 外围类.方法 | 外围类实例.方法 |
访问外围类 | 能访问静态属性,不能访问非静态属性 | 不能访问静态属性,可以访问非静态属性 |
比如在外围类 Outer 中分别定义了一个私有、非静态属性 i,与一个私有、静态属性 j。那么静态内部类 Inner 只能访问 私有、静态属性 j:
public class Outer {
private static final Logger log = LoggerFactory.getLogger(Outer2.class);
// Inner 不可访问
private int i;
// Inner 可访问
private static int j;
private static class Inner {
public int value() {
return 1;
}
}
}
参考:
BruceEckel, 埃克尔, 陈昊鹏. Java编程思想[J]. 机械工业出版社, 2007. p201-202.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)