快速业务通道

JAVA技术专题综述之内部类篇 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
- 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;语句说明:静态内部类的静态成员可以访问外部类的静态变量。

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

时间:2010-12-20

注意:静态内部类可以有静态成员,而非静态内部类则不能有静态成员。

示例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 } Inner in = new Inner(); } } public class Test { public static void main(String[] args) {} }

最后来讲解匿名内部类。简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:

·只用到类的一个实例。

·类在定义后马上用到。

·类非常小(SUN推荐是在4行代码以下)

·给类命名并不会导致你的代码更容易被理解。

在使用匿名内部类时,要记住以下4个原则:

·匿名内部类不能有构造方法。

·匿名内部类不能定义任何静态成员、方法和类。

·匿名内部类不能是public,protected,private,static。

·只能创建匿名内部类的一个实例。

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

时间:2010-12-20

下面是匿名内部类的用法举例。请读者通过例子来体会匿名内部类的用法。

示例9:(注意:匿名内部类以";"结束)

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 { System.exit(0); } }; public static void main(String[] args) { Test test = new Test(); test.setVisible(true); } }

示例10:(根据示例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) { Syste

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号