异常处理

来源:互联网 发布:张国荣为什么自杀知乎 编辑:程序博客网 时间:2024/06/08 00:04
异常处理
异常:就是在程序的运行过程中所发生的不正常事件,它会中断正在运行的程序。

Java常处理机制
Java编程语言使用异常处理机制为程序提供了错误处理能力。

异常分类






异常处理的五个关键字
try catch finally throw throws

finally 无论有没有发生异常,代码总能执行
try{}里面有一个return语句,try后面有一个finally,执行顺序是
finally是会执行的,先执行return,再执行finally




finally 实例

package com.jredu.ch23;

public class Ch02 {
// try{}里面有一个return语句,try后面有一个finally,执行顺序是
// finally是会执行的,先执行return,再执行finally
public static int test() {
int a;
try {
a = 10;
return a;

} finally {
// System.out.println("sdsad ");
a = 20;
}

}

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(test());
}

}
运行结果是10


try catch

和switch流程类似,如过把Exception写在第一个catch,后面的catch就会被跳过了
catch (Exception e2) {
// Exception表示捕获所有的异常
// 除了出现上边的错误以外,就会进入这个异常处理
System.out.println("程序出现未知错误");

}


try catch实例

package com.jredu.ch23;

import java.util.InputMismatchException;
import java.util.Scanner;

//异常处理
public class Ch01 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
// try包裹可能出现异常(bug)的代码
try {
System.out.println("请输入被除数");
int num1 = sc.nextInt();
System.out.println("请输入除数");
int num2 = sc.nextInt();
System.out.println("运算结果为:" + (num1 / num2));
} catch (InputMismatchException e) {
// 输入类型不匹配的情况,就会进入这个异常处理
System.out.println("输入类型不是整数");
} catch (ArithmeticException e1) {
// 算数出现错误时(除数是0),就会出现这个异常处理
System.out.println("除数不能为0");

} catch (Exception e2) {
// Exception表示捕获所有的异常
// 除了出现上边的错误以外,就会进入这个异常处理
System.out.println("程序出现未知错误");

} finally {
// 不管程序有没有异常,程序都没有执行finally中的代码
// finally是最终执行的代码块
System.out.println("谢谢使用");
}

}

}


throws

声明方法可能会出现的异常,
调用者必须解决这些异常(或者再次向上抛出)



throws实例
package com.jredu.ch23;

import java.util.InputMismatchException;
import java.util.Scanner;

//异常处理throws
//声明方法可能会出现的异常,
//调用者必须解决这些异常(或者再次向上抛出)
public class Ch03 {
// throws确定这个程序有异常,但是不解决,在调用的时候处理
// 1.不想解决2.考虑到不同情况下处理方式不一样,不能写死
// 在调用方法时决定解决异常。还是再次向上抛出
public static void test() throws InputMismatchException, ArithmeticException, Exception {
Scanner sc = new Scanner(System.in);

System.out.println("请输入被除数");
int num1 = sc.nextInt();
System.out.println("请输入除数");
int num2 = sc.nextInt();
System.out.println("运算结果为:" + (num1 / num2));

}

public static void main(String[] args) {
// TODO Auto-generated method stub
try {
test();
} catch (InputMismatchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

throw
异常处理throw
也叫自定义异常

特点:人为定义错误,手动抛出异常
目的:这些错误不会导致程序运行出现异常、崩溃,但会导致业务无法进行


check异常( 非运行时异常)
特点:程序必须要解决



RuntimeException 运行时异常
特点:程序可以不解决解决
throw实例

package com.jredu.ch23;

import java.util.InputMismatchException;
import java.util.Scanner;

//异常处理throw
//也叫自定义异常

//特点:人为定义错误,手动抛出异常
//目的:这些错误不会导致程序运行出现异常、崩溃,但会导致业务无法进行
public class Ch04 {
public static void test() {
Scanner sc = new Scanner(System.in);

System.out.println("请输入被除数");
int num1 = sc.nextInt();

System.out.println("请输入除数");
int num2 = sc.nextInt();
// 输入1不符合业务流程,没意义
if (num1 == 1) {
throw new CanNotBeOneException();
}
if (num2 == 0) {
throw new ArithmeticException("除数不能为0");
}
System.out.println("运算结果为:" + (num1 / num2));

}

public static void main(String[] args) {
// TODO Auto-generated method stub
test();
}

}

/**
* 自定义异常
*
* @author Administrator
*
*/
class CanNotBeOneException extends RuntimeException {

public CanNotBeOneException() {
super("除数不能为1");
// TODO Auto-generated constructor stub
}

}



原创粉丝点击