1.异常类结构图:
Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。
Exception(异常):是程序本身可以处理的异常
2.需要记住的几个异常:
FileNotFoundException
ArithmeticException
ClassCastException
ClassNotFoundException
NullPointerException
ArrayIndexOutOfBoundsException
3.异常处理机制:
try {
...... //可能产生异常的代码
}catch( ExceptionName1 e ) {
...... //当产生ExceptionName1型异常时的处置措施
}catch( ExceptionName2 e ) {
...... //当产生ExceptionName2型异常时的处置措施
} [ finally{
...... //无条件执行的语句
}]
(1)try:将可能出现异常的代码放在try语句块中。
(2)catch (Exceptiontype e):在catch语句块中是对异常对象进行处理的代码。
(3)如果明确知道产生的是何种异常,可以用该异常类作为catch的参数也可以用其父类作为catch的参数。
(4)每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
(5)finally中的语句,无论是否抛出异常,总会执行。
(6)catch多重异常时,子异常类必须在它们任何父类之前;如果子类在父类后面,子类将永远不会到达,系统会报编译错误。
4.异常处理的语法规则:
1) 必须在 try 之后添加 catch 或 finally 块。
2) 必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。
3) catch 块与相应的异常类的类型相关。
4) 一个 try 块可能有多个 catch 块。
5) 可嵌套 try-catch-finally 结构。
6) 在 try-catch-finally 结构中,可重新抛出异常。
7) 除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。
5.抛出异常
抛出异常有两种方式
(1)在方法内抛出异常
例如:throw new NullPointerException();
(2)在方法体上抛出异常
例如:public void throwException() throws NullPointerException{}
throws 后可以跟多个异常用“,”隔开;
多线程
1.Java中多线程的创建
通过继承Thread类
1) 定义子类继承Thread类。
2) 子类中重写Thread类中的run方法。
3) 创建Thread子类对象,即创建了线程对象。
4) 调用线程对象start方法:启动线程,调用run方法。
通过实现Runnable接口
1)定义子类,实现Runnable接口。
2)子类中重写Runnable接口中的run方法。
3)通过Thread类含参构造器创建线程对象。
4)将Runnable接口的子类对象作为实际参数传递给
Thread类的构造方法中。
5)调用Thread类的start方法:开启线程,调用
Runnable子类接口的run方法。
2.Thread类的有关方法:
构造方法:
Thread();
Thread(String threadname):创建线程并指定线程实例名
Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接口中的run方法
Thread(Runnable target, String name):创建新的Thread对象
start() 启动线程
run() 每个线程都是通过某个特定Thread对象的run()方法来完成操作的
static void sleep(long millis):令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。
wait() 使当前线程进入等待(某对象)状态 直到另一线程对该对象发出 notify (或notifyAll) 为止。
notify()/notifyAll() 唤醒等待该对象监控权的一个线程
stop(): 强制线程生命期结束
3.多线程程序的优点:
提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
提高计算机系统CPU的利用率
改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改
4.线程的生命周期
完整的生命周期中通常要经历如下的五种状态:
新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件
运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态, run()方法定义了线程的操作和功能
阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执行,进入阻塞状态
死亡:线程完成了它的全部工作或线程被提前强制性地中止
5.synchronized 使用
synchronized可以放在方法声明中,表示整个方法
为同步方法。一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候
public synchronized void show (String name){
}
对某一代码块使用,synchronized后跟括号,括号里是变量,这样,一次只有一个线程进入该代码块
synchronized (对象){
// 需要被同步的代码;
}