码迷,mamicode.com
首页 > 编程语言 > 详细

我的java学习笔记(17)关于内部类(part 2)

时间:2015-04-04 22:41:11      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:内部类   java   

1.内部类是一种编译器现象,与虚拟机无关。编译器将会把内部类翻译成用$ 分隔外部类名与内部类的常规文件,而虚拟机则对此一无所知。

2.内部类拥有访问特权,所以与常规类比起来功能更加强大。

3.有时候一个类只在一个方法中使用一次,我们可以定义这个类为局部类。

public void start()
{
	class TimePrinter implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			Date now = new Date();
			System.out.println("现在时间是:" + now);
			if(beep)
				Toolkit.getDefaultToolkit().beep();
		}
	}
	ActionListener li = new TimePrinter();
	Timer t = new Timer(interval,li);
	t.start();
}

4.局部类不能用public或private访问说明符进行声明,它的作用域限定在声明这个局部类块中。

5.局部类有一个优势,即对外部世界可以完全地隐藏起来。

6.与其他的内部类相比较,局部类还有一个优点。它们不仅能够访问包含它们的外部类,还可以访问局部变量。不过,那些局部变量必须被声明为final。

7.如果局部变量表示一个动态的计数器,可以将其转换为一个长度为1的数组,数组变量任然被声明为final,但这仅仅表示它不能引用另外一个数组,数组中的值是可以随意改变的。

final int[] c = new int[1];
for(int i = 0; i < dates.length;i++)
{
	dates[i] = new Date()
	{
		public int compareTo(Date other)
		{
			c[0]++;
			return super.compareTo(other);
		}
	};
}


8.将局部内部类的使用再深入一步,假如只创建这个类的一个对象,就不必命名了。这种类被称为匿名类。

new SuperType(construction parameters)
{
	inner class methods and data
}

9.由于构造器的名字必须与类名相同。而匿名类没有类名,所以,匿名类不能有构造器。取而代之的是,将构造器参数传递给超类构造器。但实现接口时不能有任何参数。

new InterfaceType()
{
	inner class methods and data
}


10.构造参数的闭圆括号跟一个花括号,花括号内就是定义的匿名内部类。

实例代码

测试类

import javax.swing.JOptionPane;

public class test {
	public static void main(String[] args)
	{
		TalkingClock c = new TalkingClock();
		c.start(1000, true);
		JOptionPane.showMessageDialog(null, "退出吗?");
		System.exit(0);
	}
}

功能类

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.Timer;

public class TalkingClock {
	public void start(int interval,final boolean beep)
	{
		ActionListener li = new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				Date now = new Date();
				System.out.println("现在的时间是:" + now);
				if(beep)
					Toolkit.getDefaultToolkit().beep();
			}
		};
		Timer t = new Timer(interval,li);
		t.start();
	}
}


输出结果

技术分享



我的java学习笔记(17)关于内部类(part 2)

标签:内部类   java   

原文地址:http://blog.csdn.net/zhurui_idea/article/details/44875045

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!