抛出异常
使用throws声明抛出异常
Throws 通常用于方法声明,当方法中可能存在异常,却不想在方法中对异常进行处理时,就可以在声明方法时使用throws声明抛出的异常,然后再调用该方法的其他方法中对异常进行处理。语法格式如下:
数据类型 方法名(形参列表) throws 异常类1,异常类2,…异常类n
{
方法体;
}
使用throw语句抛出异常
有时希望程序自行抛出异常,可以使用throws语句来实现。Throws语句通常用在方法中,在程序中自行抛出异常,使用throw语句抛出的时异常类的实例,通常与if语句一起使用。
其语句格式如下:
Throw new Exception(“对异常的说明”);
自定义异常
创建自定义异常
创建自定义的异常类需要继承自Exception类,并提供含有一个String类型形参的构造方法,该形参就是异常的描述信息,可以通过getMessage()方法获得。
异常的使用原则
在程序中使用异常,可以捕获程序中的错误,但是异常的使用也要遵循一定的规则。下面是异常类的几项使用原则:
- 不要过多地使用异常,这样会增加系统的负担。
- 在方法中使用try…catch语句块捕获异常时,要对异常做出处理。
- Try…catch语句块的范围不要太大,这样不利于对异常的分析。
- 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或子异常。、
文件的创建与删除
可以使用File类创建一个文件对象,通常使用以下3种构造方法来创建文件对象。
- File(String pathname);
- File(String parent,String child);
- File(File f,String child);
带缓存的输入/输出流
缓存可以说是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得再流上执行skip()、mark()和reset()方法成为可能。
数据输入/输出流(DataInputStream类与DataOutputStream类)允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型。也就是说,当读取一个数据时,不必在关心这个数值应当时什么字节。
输入/输出
输入流
InputStream类是字节输入流的抽象类,是所有字节输入流的父类。
在swing中常用的布局管理器:流布局管理器、边界布局管理器、网格布局管理器。
重点章节:高级事件处理
键盘事件
当向文本框中输入内容时,将发出键盘事件(KeyEvent)。KeyEvent类负责捕获键盘事件,可以通过为组件添加实现了KeyListener接口的监听器类来处理相应的键盘事件。
KeyListener接口总共有3个抽象方法,其接口的具体定义如下:
鼠标事件
所有组件都能发出鼠标事件(MouseEvent),MouseEvent类负责捕获鼠标事件,可以通过为组件添加实现了MouseListener接口的监听器类来处理相应的鼠标事件。
MouseListener接口共有5个抽象方法,具体定义如下:
窗体事件
在捕获窗体事件(WindowEvent)时,可以通过3个事件监听器接口来实现,分别为WindowFocusListener、WindowStateListener和WindowListener。
首先时捕获窗体焦点变化事件
捕获窗体状态变化事件
捕获其他窗体事件
选项事件
多线程
Java语言提供并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发执行,这种机制被称为多线程。
一个进程是一个包含有自身地址的程序,每个独立执行的程序都成为进程。也就是正在执行的程序。一个线程则是进程中的执行流程,一个进程中可以同时包括多个线程,每个线程也可以得到一小段程序的执行事件,这样一个进程就可以具有多个并发执行的线程。
实现线程的两种方式
在java中主要提供了两种方式实现线程,分别为继承java.lang.Thread类与实现java.lang.Runnable接口。
实现Runnable接口
注意:启动一个新的线程,不是直接调用Thread子类对象的run()方法,而是调用Thread子类的start()方法,Thread类的start()方法产生一个新的线程,该线程运行Thread子类的run()方法。
线程的生命周期
线程具有生命,其中包括出生状态、就绪状态、运行状态、等待状态、休眠状态、阻塞状态和死亡状态7种状态。
虽然多线程看起来像同时执行,但事实上在同一时间点上只有一个线程被执行,只是线程之间切换较快,所以才会使人产生线程是同时进行的假象。
线程的加入
当某个线程使用join()方法加入到另一个线程时,另一个线程会等待该线程执行完毕再继续执行。
线程的礼让
Thread类种提供了一种礼让方法,使用yield()方法表示,它只是给当前正处于运行状态下的线程一个提醒,告知它可以将资源礼让给其他线程,但这仅仅是一种暗示,没有任何一种机制保证当前线程会将资源礼让。
Yield()方法使具有同样优先级的线程有进入可执行状态的机会,当当前线程放弃执行权时会再度回到就绪状态。对于支持多任务的操作系统来说,不需要调用yield()方法,因为操作系统会为线程自动分配CPU时间片来执行。
线程同步
Java提供线程同步的机制来防止资源访问的冲突。
线程同部机制
如何解决资源共享的问题?基本上所有解决多线程资源冲突问题都会采用给定时间只允许一个线程访问共享资源,这时就需要给共享资源上一道锁。这就好比一个人上洗手间,这个人进入洗手间后将门锁上,当他出来时再将锁打开,然后其他人才可以进入。
1.同步块
在java中提供了同步机制,可以有效地防止资源冲突。同步机制使用synchronized关键字。
将资源放置在同步块中。这个同步块也被称为临界区,其语法格式如下:
2.同步方法
同步方法就是在方法前面修饰synchronized关键字的方法,其语法格式如下:
线程间的通信