1.异常是什么?
异常是导致程序中断执行的一种指令流,在程序运行的过程中发生的不正常事件,它会中断正在运行的程序。
合理的处理异常可以使你的程序更加具有健壮性。
2.为何要处理异常
当我们的程序出现异常的时候程序会中断
public class DivisionComputation {
public static void main(String[] args) {
System.out.println("start");
System.out.println(10 / 0);
System.out.println("出现异常");
System.out.println("end");
}
}
运行结果:
为了让程序继续运行下去,就要进行异常的处理。
3.如何处理异常
如果要想进行异常处理,在Java之中提供了3个关键字,try、catch、finally。
try{
//可能出现异常的语句
}catch(异常类型 对象){
//异常处理
}finally{
//不管是否有异常,这里的内容都执行
}
通过异常处理,即使程序中出现了异常,也可以正常执行完程序。从而使程序更加具有健壮性。
异常类中提供的printStackTrace()方法可以将异常的信息完整输出。
public class DivisionComputation {
public static void main(String[] args){
System.out.println("start");
try {
System.out.println(10 / 0);
}catch(Exception a){
System.out.println("出现异常");
a.printStackTrace();
}
System.out.println("end");
}
}
运行结果:
4.throws关键字
1>主要用于方法的声明上,当方法之中出现异常后交由被调用者处理。
2>当调用了具有throws的方法之后,不管是否出现异常,都必须使用try…catch。
public class Calculate {
public static int division(int a,int b) throws Exception{
return a/b;
}
}
class TestCalculate{
public static void main(String[] args) {
try{
System.out.println(Calculate.division(10,0));
}catch (Exception e){
e.printStackTrace();
}
}
}
5.throw关键字
在程序之中可以直接使用throw手工抛出一个异常类的实例化对象。
public class Calculate2 {
public static int division(int a,int b) throws Exception{
int result=0;
System.out.println("start");
try{
result=a/b;
}catch (Exception e){
throw e;
}finally {
System.out.println("end");
}
return result;
}
}
class TestCalculate2{
public static void main(String[] args) {
try{
System.out.println(Calculate2.division(10,0));
}catch (Exception e){
e.printStackTrace();
}
}
}
6.throw和throws的区别:
throw:指的是在方法之中认为抛出一个异常类对象(这个异常类对象可能是自己实例化或者抛出已经存在的)
throws:在方法声明上使用,表示此方法在调用时必须处理异常。
7.如何定义异常
1>首先创建自定义异常类,
语法格式:
自定义异常类名 extands Exception
2>在方法中通过关键字throw抛出异常对象。
3>若是在当前抛出异常的方法中处理异常,可以用try-catch语句捕获并处理;若不是,在方法的声明处通过关键字throws指明要抛出给方法调用的异常
4>在出现异常方法的调用中捕获并处理异常。
//创建自定义异常类,继承Exception
public class Calculate3Exception extends Exception {
public Calculate3Exception(String msg){
super(msg);
}
}
class Number{
public int division(int a,int b) throws Calculate3Exception{
if(b==0){
throw new Calculate3Exception("除数不为0");
}
return a/b;
}
}
class TestCalculate3Exception{
public static void main(String[] args) {
Number num=new Number();
try{
System.out.println(num.division(10,0));
}catch (Calculate3Exception e){
e.printStackTrace();
}
}