首页 JAVA技术专题综述之内部类篇

JAVA技术专题综述之内部类篇

举报
开通vip

JAVA技术专题综述之内部类篇 JAVA技术专题综述 之 内部类篇 有些类的定义中包含另一个类的定义。这种处于内部的类称为内部类(inner class)。 例如: public class OuterClass { public class InnerClass { //---This is a inner class. } } InnerClass类嵌套在 OuterClass中,并且被声明为 public,因此被 OuterClass类之 外的对象访问。InnerClass 类没有被声明为 Out...

JAVA技术专题综述之内部类篇
JAVA技术专题综述 之 内部类篇 有些类的定义中包含另一个类的定义。这种处于内部的类称为内部类(inner class)。 例如: public class OuterClass { public class InnerClass { //---This is a inner class. } } InnerClass类嵌套在 OuterClass中,并且被声明为 public,因此被 OuterClass类之 外的对象访问。InnerClass 类没有被声明为 OuterClass 类的一个静态成员,因此除非生成了 一个 OuterClass对象,否则无法生成任何 InnerClass对象。但是,当你声明一个包含嵌套类 的类对象时,并不一定会生成嵌套类的对象,这主要由包含嵌套类的类的构造 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 决定。 示例 1: class OuterClass { class InnerClass {} } public class Test { public static void main(String[] args) { OuterClass out = new OuterClass(); OuterClass.InnerClass in = out.new InnerClass(); } } 我们使用 OuterClass out = new OuterClass();语句生成了一个 OuterClass类对象。 然后又使用 OuterClass.InnerClass in = out.new InnerClass();语句借助外部类的实 例生成了一个内部类的对象。main()方法中的两条语句也可以用下面的这一条语句替换: OuterClass.InnerClass in = new OuterClass().new InnerClass(); 总之:在一个类(Test)中,创建另一个类(OuterClass)中的非静态内部类(InnerClass) 必须要借助这个外部类(OuterClass)的一个实例。而且这个内部类对象的声明也必须用 OuterClass.InnerClass的形式。 示例 2: public class Test { class InnerClass {} 1 Administrator 线条 Administrator 线条 Administrator 线条 public static void main(String[] args) { InnerClass in = new Test().new InnerClass(); } } 在 main()方法中实例化本类的内部类可以用上例的形式。 示例 3: public class Test { class InnerClass {} InnerClass in = new InnerClass(); public static void main(String[] args) {} } 在 main()方法外,实例化本类的内部类就和我们平常的操作一样了。 示例 4: public class Test { class InnerClass {} public void method() { InnerClass in = new InnerClass(); } public static void main(String[] args) {} } 在本类的非静态方法中,实例化本类的内部类也和我们平常的操作一样。 为了让内部类的对象不依赖于外部类的对象,你可以把内部类声明为 static。 示例 5: class OuterClass { static class InnerClass {} } public class Test { public static void main(String[] args) { 2 Administrator 线条 OuterClass.InnerClass in = new OuterClass.InnerClass(); } } 从这个例子我们可以看出:创建 InnerClass类的对象不再需要 OuterClass类的对象。但 依然要用 OuterClass.InnerClass这个形式声明 in对象。 示例 6: class Outer { static int outer_stat = 0; int outer_non_stat = 1; static class StaticInner { static int stat = 2; static int stat_test = outer_stat; public void tester() { System.out.println("outer_stat = " + outer_stat); } } class NonStaticInner { public void tester() { System.out.println("outer_stat = " + outer_stat); System.out.println("outer_non_stat = " + outer_non_stat); System.out.println("StaticInner.stat = " + StaticInner.stat); } } } public class Test { public static void main(String[] args) { new Outer().new NonStaticInner().tester(); System.out.println("------------"); new Outer.StaticInner().tester(); } } 输出结果: outer_stat = 0 outer_non_stat = 1 StaticInner.stat = 2 3 Administrator 线条 ------------ outer_stat = 0 NonStaticInner类中的 System.out.println("outer_stat = " + outer_stat); 语句说明:非静态内部类的非静态成员可以访问外部类的静态变量。 System.out.println("outer_non_stat = " + outer_non_stat);语句说明:非静 态内部类的非静态成员可以访问外部类的非静态变量。 System.out.println("StaticInner.stat = " + StaticInner.stat);语句说明: 非静态内部类的非静态成员可以访问相同外部类下的静态内部类的静态变量。 StaticInner类中的 System.out.println("outer_stat = " + outer_stat);语句 说明:静态内部类的非静态成员可以访问外部类的静态变量。 static int stat_test = outer_stat;语句说明:静态内部类的静态成员可以访问外部 类的静态变量。 注意:静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 示例 7: class Outer { public void tester() { class Inner {} } } public class Test { public static void main(String[] args) {} } 可以在一个方法中定义一个类,这个类称为本地内部类。只能在本地,也就是说在该类定义出 现的方法中生成一个本地内部类的对象。这种处理适用于一个方法中的计算要求使用一种特殊的类, 而这个类在其他地方根本不需要的时候。 本地内部类可以引用其定义出现所在的方法中声明的变量,当且仅当这种变量是 final型的。 请看示例 8。 示例 8: class Outer { public void tester() { final int i = 5; class Inner { int j = i; 4 Administrator 线条 } Inner in = new Inner(); } } public class Test { public static void main(String[] args) {} } 最后来讲解匿名内部类。简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用 匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的: ·只用到类的一个实例。 ·类在定义后马上用到。 ·类非常小(SUN推荐是在 4行代码以下) ·给类命名并不会导致你的代码更容易被理解。 在使用匿名内部类时,要记住以下 4个原则: ·匿名内部类不能有构造方法。 ·匿名内部类不能定义任何静态成员、方法和类。 ·匿名内部类不能是 public,protected,private,static。 ·只能创建匿名内部类的一个实例。 下面是匿名内部类的用法举例。请读者通过例子来体会匿名内部类的用法。 示例 8:(注意:匿名内部类以“;”结束) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame { Test() { super("test_title"); Container cp = getContentPane(); cp.setLayout(new FlowLayout()); JButton btn = new JButton("close"); cp.add(btn); btn.addActionListener(act); setSize(300,200); } ActionListener act = new ActionListener() { public void actionPerformed(ActionEvent e) 5 Administrator 线条 Administrator 铅笔 Administrator 线条 Administrator 矩形 { System.exit(0); } }; public static void main(String[] args) { Test test = new Test(); test.setVisible(true); } } 示例 9:(根据示例 8改编) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame { Test() { super("test_title"); Container cp = getContentPane(); cp.setLayout(new FlowLayout()); JButton btn = new JButton("close"); cp.add(btn); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[] args) { Test test = new Test(); test.setSize(300,200); test.setVisible(true); } } 示例 10: public class Test { public static void main(String[] args) 6 { Thread r = new Thread() { public void run() { for(int k=0;k<10;k++) { System.out.print(k); } } }; r.start(); } } 示例 11:(根据示例 10改编) public class Test { public static void main(String[] args) { new Thread(new Runnable() { public void run() { System.out.println("run"); } }).start(); } } 示例 10和 11的程序并没有什么实际用处,在实际编程时几乎没有人这样写程序。但这两个程 序有助于我们理解匿名内部类的用法。 本文作者:徐明杰 SCJP/MCSE/MCDBA xmjemail@yahoo.com.cn 2002.9 7 Administrator 线条 Administrator 线条
本文档为【JAVA技术专题综述之内部类篇】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_886435
暂无简介~
格式:pdf
大小:93KB
软件:PDF阅读器
页数:7
分类:互联网
上传时间:2010-01-18
浏览量:22