说说 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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值