内部类生成的class文件名的规律

说明

研究一下内部类,编译出来后的类名有什么规律

详细

内部类也是类,是个类就会有独立的class文件.可以看到,不管哪种内部类,文件名都有 $ 符号. 所以, 凡是有$的class文件都是内部类

一共4种内部类

  • 成员内部类(位于类中非静态)
  • 静态内部类(位于勒种静态)
  • 局部内部类(位于方法内,或者代码块内)
  • 匿名内部类
1. 成员内部类 & 静态内部类

成员和静态内部类,生产的class文件名的规律是: 外部类名$内部类名.class (这个规则就可保持不重名)

如:

  • 成员内部类
package com.wyf.test.p01memberinner;
public class P01_01_Outer {
    // 成员内部类,定义在类里面,非静态
    public class MemberInner {

    }
    public class MemberInner2 {

    }
}

生成的class是

P01_01_Outer.class
P01_01_Outer$MemberInner.class
P01_01_Outer$MemberInner2.class
  • 静态内部类
package com.wyf.test.p02staticinner;

public class P02_01_Outer {
    // 静态内部类,定义在类里,静态
    public static class StaticInner {

    }
    public static class StaticInner2 {

    }
}

生成的文件是:

P02_01_Outer.class
P02_01_Outer$StaticInner.class
P02_01_Outer$StaticInner2.class
2. 局部内部类

局部内部类的类定义在方法里,或者代码块里(可以非静态或静态代码块),命名的规律是: 外部类名$n内部类名.class,其中n是1~n的整数.

为什么需要n呢? 这样才能保证文件名唯一,因为在不同方法或代码块可以存在互相同名的局部内部类

package com.wyf.test.p03methodcodeblock;

public class P03_00_LocalInner {
    public void m() {
        class T {

        }
        class R {

        }
    }
    public void m2() {
        class T {

        }
    }
    {
        class X {

        }
    }
    static {
        class X {

        }
    }

}
P03_00_LocalInner.class
P03_00_LocalInner$1R.class
P03_00_LocalInner$1T.class
P03_00_LocalInner$1X.class
P03_00_LocalInner$2T.class
P03_00_LocalInner$2X.class
4. 匿名内部类

匿名内部类的class文件的命名: 外部类$n.class,n是0-n的整数,同一个外部类中有多少个内部类,n就多少个

package com.wyf.test.p04anonymous;

public class P04_03_AnonymousInner {
    MyInterface myInterface = new MyInterface() {
        @Override
        public void m() {
        }
    };
    MyInterface myInterface2 = new MyInterface() {
        @Override
        public void m() {
        }
    };

    public void m() {
        MyInterface myInterface = new MyInterface() {
            @Override
            public void m() {
            }
        };
    }
}

P04_03_AnonymousInner$1.class
P04_03_AnonymousInner$2.class
P04_03_AnonymousInner$3.class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值