快速业务通道

对Java嵌套类的讨论 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
{ this.jobTitle = jobTitle; }    public String toString () { return jobTitle; } }    class Employee { private String name; private Job [] jobs;    Employee (String name, Job [] jobs) { this.name = name; this.jobs = jobs; }    String getName () { return name; }    JobIterator getJobIterator () { return new JobIterator (); }    class JobIterator { private int jobIndex = 0;    public boolean hasMoreJobs () { return jobIndex < jobs.length; }    public Object nextJob () { return !hasMoreJobs () ? null : jobs [jobIndex++]; } } }    class JobIterator3 { public static void main (String [] args) { Job [] jobs = { new Job ("Janitor"), new Job ("Delivery Person") };    Employee e = new Employee ("John Doe", jobs);    System.out.println (e.getName () + " works the following jobs:\n");    Employee.JobIterator eji = e.getJobIterator ();    while (eji.hasMoreJobs ()) System.out.println (eji.nextJob ()); } }

JobIterator3的输出和JobIterator1、JobIterator2的一样,它使用了类嵌套:Employee类包含有JobIterator类的声明。这样做的结果是,JobIterator不再需要一个构造器,因为JobIterator可直接访问Employee的私有字段job。还有,在JobIterator3的main()方法中,如果需要访问JobIterator,你都要加入一个Employee前缀。由于JobIterator3的JobIterator类不再需要一个构造器和自己的jobs字段,因此源代码要比JobIterator2的清楚一些。

除了令源代码更加清楚之外,类嵌套还有第二个好处。这就是名字的冲突减少了。在列表3的程序中,顶级的类是Job, Employee和JobIterator3。还有一个Employee.JobIterator类。如果我们在与Employee的同一级中插入一个JobIterator接口,我们就会有Job, Employee, JobIterator3和Employee.JobIterator类,以及一个JobIterator接口。由于Employee.JobIterator和JobIterator表示两个不同的名字,因此没有名字冲突。

对Java嵌套类的讨论(5)

时间:2010-12-21

注意:

如果你编译JobIterator3并且查看得到的class文件,你将会发现有一个名字为Employee$JobIterator.class的文件。该文件包含有嵌套在Employee中的JobIterator类的字节码。要注意其中的“contentrdquo;字符。对于嵌套类,Java的编译器都会产生一个类似的class名,它以外面的类名和“contentrdquo;开头,接着是嵌套类的名字。为什么使用$符号呢?这是因为对于操作系统平台来说,这是一个合法的字符。而“.”通常是用来隔离文件的扩展名字的,通常都不可在文件名中使用。

Java支持哪些嵌套类?

Java将嵌套类分成两个主要的分类:嵌套顶级类(nested top-level classes)和内部类(inner classes)。Java还进一步将内部类分为实例内部类(instance inner class) ,本地内部类(local inner class)和匿名内部类(and anonymous inner class)。要掌握嵌套类,你需要懂得每个分类。以下我们就来讨论以下这些分类,首先我们来看一下嵌套顶级类。

嵌套顶级类

当你在其它类的外面声明一个类时,Java就认为该类是一个顶级类。如果你在一个顶级类中声明一个类,并且在该嵌套类的声明前加上static的修饰符,你就得到了一个嵌套顶级类。以下的代码段声明了一个顶级类和一个嵌套顶级类:

class TopLevelClass { static class NestedTopLevelClass { } }

就象静态的字段和静态的方法一样(也可称为类字段和类方法),一个嵌套的顶级类也是与对象无关的。考虑以下的代码段:

class Top

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号