java炒冷饭系列14 内部类标识符

来源:互联网 发布:买火车票的软件 编辑:程序博客网 时间:2024/05/21 14:56

前言

由于每个类都会产生一个.class文件,其中包含了如何创建该类型的对象的全部信息(此信息产生一个”meta-class”,叫做Class对象),你可能猜到了,内部类也必须生成一个.class文件以包含它们的Class对象信息。这些类文件的命名有严格的规则:外围类的名字,加上“$”,再加上内部类的名字。

举列

如下面的Out.java文件经过编译后 会得到Out.class Out$Inner1.class Out$Inner2.class Out$Inner3.class这几个文件

public class Out{    public class Inner1{    }    public class Inner2{    }    public static class Inner3{    }}

如果是局部内部类的话,编译器会在”$”加上数字编号Find.class LocalClass$1FindImpl.class LocalClass$2FindImpl.class LocalClass.class
为了防止同一个类中,局部类重复

interface Find{}public class LocalClass{    public void method(){        class FindImpl implements Find{        }    }    public void method2(){        class FindImpl implements Find{        }    }}

如果是匿名内部类,编译器会简单地产一个数字作为其标识符AClass$1.class AClass$2.class AClass.class Find.class

interface Find{}public class AClass{    public void method(){        new Find(){        };    }    public void method2(){        new Find(){        };    }}

如果内部类是嵌套在别的内部类之中,只需直接将它们的名字加在其外围类标识符与“$”的后面
Mulit.class Mulit$One.class Mulit$One$Two.class Mulit$One$Two$Three.class

public class Mulit{    public class One{        public class Two{            public class Three{            }        }    }}

总结

虽然这种命名格式简单而直接,但它还是很健壮的,足以应对绝大多数情况。因为这是Java标准命令命名方式,所以生产的文件自动都是平台无关的。(注意,为了保证你的内部类能起作用,Java编译器会尽可能地转换它们)

参考文献

《Java编程思想》10.12内部类标识符

原创粉丝点击