------- android培训、java培训、期待与您交流! ----------
Java的异常处理机制可以概括为一种异常和异常处理模块(一段代码)之间的匹配机制(将产生异常的功能代码和处理异常的代码相分离【匹配】---try-catch-finally)。
具体的说,包括:
1、 Java将常见的异常均封装成类,并通过面向对象的方法来处理异常。允许用户自定义。
2、 【抛出异常】如果运行过程中出现了异常,就会生成代表异常的异常类实例并传递给jvm
3、 【捕捉异常】接到被抛出的异常后,jvm会自动查找处理异常的代码,如果找到,就交给代码处理;如果没找到就由jvm来处理,通常是显示异常的状态并终止程序的运行。
Throwable:Error + Exception
1、Error:不能靠改变程序的流程使程序恢复运行;这类错误由jvm负责抛出和捕获,应用程序本身不必对这类异常进行处理。
2、Exception:代表的错位是应用程序中可以捕获的异常状态,由应用程序抛出或处理。
(1)运行时异常(Runtime Exception):程序设计的逻辑不正确(区别语法错误),对编译系统来说具有不可预测性。
(2)非运行时异常(Non Runtime Exception):可控异常类:外部问题导致:语法错误:显式处理。
异常的捕获和处理
try关键字指明这些语句可能会出现问题,需要jvm对其进行【监控】
catch的参数类似于方法中的参数,包括“异常类型”和“异常对象变量名”
注意:由于在处理异常时只执行第一个相匹配的catch语句快,因此,程序中catch语句的排列顺序应该从具体到一般。子类的在父类的前。
finally是是否异常都要执行的。通常用来执行一些善后工作,如关闭文件,关闭数据库连接等
抛出异常
过程:当前方法出现了异常并且没有能捕获它的代码,或者现有的捕获代码无法捕获这个异常,则jvm就会终止当前方法并抛给上一级方法。。。。。直到捕获或者被抛给程序的调用者即jvm本身!
throws关键字在方法声明时使用;throw关键字在方法体内使用。
throws关键字在方法声明时使用:该方法可能会抛出异常,且该方法不处理这些异常,而是交给上一级处理。
throw关键字在方法体中使用,它强制抛出一个异常类的实例,且其后的语句都不再执行。
在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?
package com.itheima;
public class Test6
{
public static void main(String args[])
{
Test6 t = new Test6();//创建对象
t.divide(0);//调用divide方法
t.divide(1);//调用divide方法
}
public void divide (int i)
{
int y = 10;//定义并初始化整形变量
try
{
System.out.println("y="+y+" i="+i);
int a = y/i;//计算y/i的值
System.out.println("a="+a);//打印输出计算结果
}catch (ArithmeticException e)//捕获异常
{
System.out.println("捕获ArithmeticException异常");
e.printStackTrace();//追踪异常发生时执行的内容
}
finally
{
System.out.println("这是finally中的语句");
}
System.out.println("程序结束");
}
}