• Java 什么是静态内部类


    #定义

    Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。

     有static关键字修饰的内部类。

    比如:Pattern类中的Node类。

    public class Outer {
        private static String s1 = "this is s1 in Outer";
        private static String s2 = "this is s2 in Outer";
    
        public void method1() {
            // 外部类可通过内部类的对象调用内部类的私有成员变量或方法
            System.out.println(new Inner().s1);
            System.out.println(new Inner().method2());
        }
    
        private static String method2() {
            return "this is method2 in Outer";
        }
    
        // 内部静态类
        public static class Inner {
            private String s1 = "this is s1 in Inner";
            private static String s3 = "this is s3 in Inner";
    
            public void method1() {
                // 内部类可直接访问外部类的私有静态成员变量或方法
                System.out.println(s2);
                // 内部类和外部类有同名变量和方法时
                System.out.println(s1);
                System.out.println(Outer.s1);
                System.out.println(method2());
                System.out.println(Outer.method2());
            }
    
            private String method2() {
                return "this is method2 in Inner";
            }
        }
    }
    
    ------外部类测试--------
    this is s1 in Inner
    this is method2 in Inner
    ------内部类测试--------
    this is s2 in Outer
    this is s1 in Inner
    this is s1 in Outer
    this is method2 in Inner
    this is method2 in Outer

    1、创建静态内部类方式:Outer.Inner inner = new Outer.Inner()静态内部类不依赖于外部类

    2、外部类可通过内部类的对象调用内部类的私有成员变量或方法。

    3、静态内部类访问的外部类成员变量或方法为什么不能是非静态的,而成员内部类可以?

    成员内部类中有外部类的引用,所以成员内部类对外部类的私有非静态变量和方法可以随意访问。

    从静态内部类它不存在对外部类的引用,所以仅能访问外部类的静态成员变量或方法

    4、静态内部类中可定义静态的成员变量和方法。

    #总结

    1、创建静态内部类方式:Outer.Inner inner = new Outer.Inner();静态内部类不依赖于外部类。

    2、外部类可通过内部类的对象调用内部类的私有成员变量或方法。

    3、静态内部类访问外部类的静态成员变量或方法必须是静态的。

    4、静态内部类中可定义静态的成员变量和方法。

    5、外部类可以创建静态内部类的实例,即使是私有的;并可通过内部类的实例访问内部类的成员变量和方法,即使是私有的。

    #静态内部类的作用

    1)首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。
    2)静态都是用来修饰类的内部成员的。比如静态方法,静态成员变量,静态常量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。
    这样静态内部类就可以理解了,因为这个类没有必要单独存放一个文件,它一般来说只被所在外部类使用。并且它可以直接被用 外部类名+内部类名 获得。

    3)普通内部类把它理解为与外部类绑定了,创建普通内部类对象一定要通过外部类的对象new才行。而静态内部类是不需要的

    #参考

    https://www.cnblogs.com/SQP51312/p/6102620.html

    https://zhidao.baidu.com/question/149873207.html

  • 相关阅读:
    LFYZ-OJ ID: 1008 求A/B高精度值
    高精度运算
    【2018国庆雅礼集训】部分题解
    【模板】倍增求LCA
    Luogu1516 青蛙的约会
    loj #10043. 「一本通 2.2 例 1」剪花布条
    我太菜了
    Luogu1280 尼克的任务
    Luogu1091 合唱队形
    Luogu1006 传纸条
  • 原文地址:https://www.cnblogs.com/baxianhua/p/11547782.html
Copyright © 2020-2023  润新知