Java static class使用方式

在java中,不能用static修饰顶级类(top level class)。只有内部类可以为static。

静态内部类和非静态内部类之间区别:

1. 内部静态类不需要有指向外部类的引用。但非静态内部类需要。
2. 静态类只能访问外部类的静态成员,非静态内部类能够访问外部类的静态和非静态成员。
3. 非静态内部类不能脱离外部类实体被创建,非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。

修饰顶级类(top level class)会出现编译错误,划红线。
静态内部类只能访问外部类的静态成员,访问msg出现错误,可以访问name。

在这里插入图片描述

整体代码如下

/**
 * Java中static class使用方式
 * 在java中,不能用static修饰顶级类(top level class)。只有内部类可以为static
 *
 * @author Daniel
 * @version V1.0
 * @date 2019/11/21 15:21
 */
public static class StaticUnitTest {

    private String msg = "";

    private static String name = "";

    // 静态内部类
    public static class NestedStaticClass {

        // 静态内部类只能访问外部类的静态成员
        public void printMessage() {
            // 试着将msg改成非静态的,这将导致编译错误
            System.out.println("Message from nested static class: " + msg);
            // 能访问外部类的静态成员
            System.out.println("Message from nested static class: " + name);
        }
    }

    // 非静态内部类
    public class InnerClass {
        // 不管是静态方法还是非静态方法都可以在非静态内部类中访问
        public void display() {
            System.out.println("Message from non-static nested class: " + msg);
            System.out.println("Message from non-static nested class: " + name);
        }
    }

    @Test
    public void Test() {
        // 创建静态内部类的实例
        StaticUnitTest.NestedStaticClass staticClass = new StaticUnitTest.NestedStaticClass();
        // 调用静态内部类的非静态方法
        staticClass.printMessage();

        // 不能先创建外部类实例再创建非静态内部类
        StaticUnitTest.NestedStaticClass staticClass1 = new StaticUnitTest().new NestedStaticClass();

        // 创建非静态内部类的实例
        StaticUnitTest.InnerClass innerClass = new StaticUnitTest.InnerClass();
        // 调用非静态内部类的非静态方法
        innerClass.display();

        // 先创建外部类实例再创建非静态内部类
        StaticUnitTest.InnerClass innerClass1 = new StaticUnitTest().new InnerClass();
        // 调用非静态内部类的非静态方法
        innerClass1.display();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值