Java异常处理
认识异常
1、异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,则可能导致程序的中断执行,造成不必要的损失。
Java异常强制用户去考虑程序的强健性和安全性。异常处理不应该用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应的处理。
2、异常实例
(1)
package 第十三次Java作业;
class Exc{
int i = 10;
}
public class ExceptionDemo1 {
public static void main(String[] args) {
Exc e = null;
e = new Exc();
System.out.println(e,i);
}
}
运行结果:
(2)
package 第十三次Java作业;
class Exc {
int i = 10;
}
public class ExceptionDemo1 {
public static void main(String[] args) {
int a = 10;
int b = 0;
int temp = a/b;
System.out.println(temp);
}
}
一、捕获异常
1.异常格式:
try {
异常语句
}catch(Exception e) {
}finally {
一定会执行的代码
}
捕获异常:
package 第十三次Java作业;
class Exc {
int i = 10;
}
public class ExceptionDemo1 {
public static void main(String[] args) {
int a = 10;
int b = 0;
int temp = 0;
try {
temp = a/b;
}catch (ArithmeticException e) {
System.out.println(e);
}
System.out.println(temp);
}
}
运行结果:
无异常将正常输出:
package 第十三次Java作业;
class Exc {
int i = 10;
}
public class ExceptionDemo1 {
public static void main(String[] args) {
int a = 10;
int b = 10;
int temp = 0;
try {
temp = a/b;
}catch (ArithmeticException e) {
System.out.println(e);
}
System.out.println(temp);
}
}
二、常见异常
1.数组越界异常:ArryIndexOutOfBoundsException ;
2.数字格式化异常:NumberFormatException ;
3.算数异常:ArithmeticException ;
4.空指针异常:NullPointerException 。
package 第十三次Java作业;
class Exc {
int a = 10;
int b = 10;
}
public class ExceptionDemo1 {
public static void main(String[] args) {
int temp = 0;
Exc e = null;
e = new Exc();
temp = e.a/e.b;
System.out.println(temp);
System.out.println("程序输出");
}
}
package 第十三次Java作业;
class Exc {
int a = 10;
int b = 10;
}
public class ExceptionDemo1 {
public static void main(String[] args) {
int temp = 0;
Exc e = null;
//e = new Exc();
try {
temp = e.a/e.b;
System.out.println(temp);
}catch(NullPointerException e2) {
System.out.println("空指针异常:" + e2);
}catch(ArithmeticException e2){
System.out.println("算数异常" + e2);
}
System.out.println("程序输出");
}
}
运行结果:
三、throws关键字
1、在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,抛给方法的调用者处理
2、格式:
public void tell() throws Exception{}
package 第十三次Java作业;
public class ExceptionDemo2 {
public static void main(String[] args) {
tell(10,0);
}
public static void tell(int i,int j) throws ArithmeticException {
int temp = 0;
temp = i/j;
System.out.println(temp);
}
}
运行结果:
使用try...catch :
package 第十三次Java作业;
public class ExceptionDemo2 {
public static void main(String[] args) {
try {
tell(10,0);
}catch(Exception e) {
System.out.println(e);
}
}
public static void tell(int i,int j) throws ArithmeticException {
int temp = 0;
temp = i/j;
System.out.println(temp);
}
}
运行结果:
如果方法抛出了异常,在调用该方法时,必须为捕捉的方法处理异常,当然,如果使用throws关键字将异常抛给上一级后,不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码 。
四、throw关键字
throw通常用来抛出用户自定义异常,抛出的时候直接抛出异常类的实例化对象即可。
package 第十三次Java作业;
public class ExceptionDemo3 {
public static void main(String[] args) {
try {
throw new Exception("实例化异常对象");
}catch(Exception e) {
System.out.println(e);
}
}
}
运行结果:
五、自定义异常
自定义异常直接继承Exception类就可以完成自定义异常类
package 第十三次Java作业;
class MyException extends Exception{ //创建自定义异常,继承Exception类
public MyException(String msg) { //构造方法
super(msg); //父类构造方法
}
}
public class ExceptionDemo04 {
public static void main(String[] args) { // 主方法
try { // try代码块处理可能出现异常的代码
throw new MyException("自定义异常");
} catch (MyException e) {
System.out.println(e);
}
}
}
运行结果: