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

上传人:小** 文档编号:89184633 上传时间:2019-05-20 格式:PDF 页数:7 大小:68.86KB
返回 下载 相关 举报
java技术专题综述之内部类篇_第1页
第1页 / 共7页
java技术专题综述之内部类篇_第2页
第2页 / 共7页
java技术专题综述之内部类篇_第3页
第3页 / 共7页
java技术专题综述之内部类篇_第4页
第4页 / 共7页
java技术专题综述之内部类篇_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《java技术专题综述之内部类篇》由会员分享,可在线阅读,更多相关《java技术专题综述之内部类篇(7页珍藏版)》请在金锄头文库上搜索。

1、JAVA 技术专题综述JAVA 技术专题综述 之 内部类篇内部类篇 有些类的定义中包含另一个类的定义。这种处于内部的类称为内部类(inner class)。 例如: public class OuterClass public class InnerClass /-This is a inner class. InnerClass 类嵌套在 OuterClass 中,并且被声明为 public,因此被 OuterClass 类之 外的对象访问。InnerClass 类没有被声明为 OuterClass 类的一个静态成员,因此除非生成了 一个 OuterClass 对象,否则无法生成任何 Inn

2、erClass 对象。但是,当你声明一个包含嵌套类 的类对象时,并不一定会生成嵌套类的对象,这主要由包含嵌套类的类的构造方法决定。 示例示例 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();语句生成了一个 OuterC

3、lass 类对象。 然后又使用 OuterClass.InnerClass in = out.new InnerClass();语句借助外部类的实 例生成了一个内部类的对象。main()方法中的两条语句也可以用下面的这一条语句替换: OuterClass.InnerClass in = new OuterClass().new InnerClass(); 总之:在一个类(Test)中,创建另一个类(OuterClass)中的非静态内部类(InnerClass) 必须要借助这个外部类(OuterClass)的一个实例。而且这个内部类对象的声明也必须用 OuterClass.InnerClass

4、的形式。 示例示例 2: public class Test class InnerClass 1 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()方法外,实例化本类的内部类就和我

5、们平常的操作一样了。 示例示例 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 v

6、oid main(String args) 2 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 in

7、t 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 = “ + StaticInne

8、r.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 - outer_stat = 0 NonStaticInner 类中的 System.out.println(“outer_stat = “

9、+ 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_sta

10、t);语句 说明:静态内部类的非静态成员可以访问外部类的静态变量。 static int stat_test = outer_stat;语句说明:静态内部类的静态成员可以访问外部 类的静态变量。 注意:静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 示例示例 7: class Outer public void tester() class Inner public class Test public static void main(String args) 可以在一个方法中定义一个类,这个类称为本地内部类。只能在本地,也就是说在该类定义出 现的方法中生成一个本地内部类的对象。

11、这种处理适用于一个方法中的计算要求使用一种特殊的类, 而这个类在其他地方根本不需要的时候。 本地内部类可以引用其定义出现所在的方法中声明的变量,当且仅当这种变量是 final 型的。 请看示例 8。 示例 8: class Outer public void tester() final int i = 5; class Inner int j = i; 4 Inner in = new Inner(); public class Test public static void main(String args) 最后来讲解匿名内部类。简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使

12、用 匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的: 只用到类的一个实例。 类在定义后马上用到。 类非常小(SUN 推荐是在 4 行代码以下) 给类命名并不会导致你的代码更容易被理解。 在使用匿名内部类时,要记住以下 4 个原则: 匿名内部类不能有构造方法。 匿名内部类不能定义任何静态成员、方法和类。 匿名内部类不能是 public,protected,private,static。 只能创建匿名内部类的一个实例。 下面是匿名内部类的用法举例。请读者通过例子来体会匿名内部类的用法。 示例示例 8: (注意:匿名内部类以“;”结束) import java.awt.*; impo

13、rt 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 ActionListen

14、er() public void actionPerformed(ActionEvent e) 5 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“); C

15、ontainer 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;k10;k+) System.out.print(k); ; r.start(); 示例示例 11: (根据示例 10 改编) public class Test public

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号