【yoyo】关于java中内部类的使用

来源:互联网 发布:三浦翔平人不好知乎 编辑:程序博客网 时间:2024/04/29 08:40

静态内部类定义静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通过生成外部类对象来生成。作用:只有静态内部类中才能创建静态属性和静态方法实例

public class Stu {
    // 这个东西叫做静态代码块,静态代码块是在类的构造方法执行前执行的代码,我们所有的static修饰的内容都是放置在静态区的
    // 那么静态代码块也是这样,静态代码块中是可以加入操作流程的,我们可以理解为静态代码块是这个类的对象被创建之前必须执行的一个方法;
    static {
        System.out.println("类开始加载");
    }
    public Stu () {
        System.out.println("构造方法开始执行");
    } 
    
    /**
     * 内部类基本上具有类的所有特征, 内部类可用static修饰, 内部类是写在另外一个类里面的类
     */

    public static class SubClass { // 静态内部类
        public static void testInnerClass() {
            System.out.println("输出一个内容");
        }

    }
    public class SubClass1{ // 动态内部类
        public void testInnerClass1() {
            System.out.println("输出一个内容");
        }
    }

}

测试函数:

public class Test {
    public static void main(String[] args) {
        Stu stu = new Stu();
        Stu stu2 = new Stu();//只要有这个类被创建的时候,静态代码块只执行一次
        Stu.SubClass.testInnerClass(); // 静态内部类可通过外部类名.内部类命.内部类方法,进行调用

        Stu.SubClass sub = new Stu.SubClass(); // 也可通过创建内部类对象进行调用
        sub.testInnerClass();
        Stu.SubClass1 sub1 = stu.new SubClass1(); // 非动态内部类调用
        sub1.testInnerClass1();
    }
}

运行结果:

类开始加载
构造方法开始执行
构造方法开始执行
输出一个内容
输出一个内容
输出一个内容