文章目录
异常概述
Java在编译或运行或者运行过程中出现的错误
程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。
(1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
(2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
(3)逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。
结构 :
异常类型
Error
程序中无法处理的错误,由jvm生成并抛出,例如JVM系统内部错误、资源耗尽等(栈溢出) OOM
Exception
程序本身可以处理的异常,编程错误问题,可以进行处理。分运行时异常和非运行时异常
RuntimeException 运行时异常(非检查性)
- NullPointerException:空指针异常
- IndexOutOfBoundsException:下标越界
- NumberFormatException:数字格式化异常
- ClassCastException:类类型转换异常
- ArithmeticException:算数异常
- ParseException:解析异常
- ConcurrentModificationException:并发修改异常
int[]a ={1,2,3};
a[3] = 10; //java.lang.ArrayIndexOutOfBoundsException数组下标越界异常
String str ="abc";
str.charAt(3); //java.lang.StringIndexOutOfBoundsException字符串下标越界异常
Integer.parseInt("a"); //java.lang.NumberFormatException数字格式化异常
String str = null;
str.length(); //java.lang.NullPointerException空指针异常
Object obj = "abc";
Integer i = (Integer) obj; //java.lang.ClassCastException类类型转换异常
System.out.println(10/0); //java.lang.ArithmeticException算数异常
new SimpleDateFormat("").parse(""); //ParseException解析异常
非运行时异常 (检查性)
- IOException
- SQLException
- ClassNotFoundException 类找不到异常
"a".getBytes("utf-8"); //java.io.UnsupportedEncodingException不支持的编码异常
异常处理
try{}catch{}finally{}
try {
可能出现异常的代码
}catch(异常类型 e 用来接收抛出的异常对象){
捕获处理发生的异常
}finally{
无论是否出现异常,代码都会执行
}
后续程序继续执行
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
try {
int a = 10;
int b = 2;
int c = a / b;
return c;
}catch (ArithmeticException e){
System.out.println("运算错误");
return -1; //即使return了 也会执行finally代码块
}finally {
System.out.println("cccccccccccccccccc");//IO jdbc
return 0;
}
}
throw & throws
- throw:作用在方法内,是人为抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常
- throws:作用在方法的声明上,声明这个方法会抛出会某种类型的异常,调用时必须处理异常,可以是多个
finally & return
- 在 try块中即便有return,break,continue等改变执行流的语句,finally也会执行
- finally中的return或异常会抑制(消灭)前面try或者catch块中的异常。
自定义异常
当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。
- 创建异常类继承Exception
- throw new TriangleException(“三角形构成异常”);
//定义三个整数变量a,b,c 判断能否构成一个三角形,如果不能请抛出一个自定义异常
//三角形类
public class Triangle {
private int a;
private int b;
private int c;
Triangle(int a,int b,int c){
this.a = a;
this.b = b;
this.c = c;
}
public void isTri() throws TriangleException {
if (a+b>c&&a+c>b&&b+c>a){
System.out.println("能构成三角形");
}else{
throw new TriangleException("三角形构成异常");
}
}
}
//自定义异常
public class TriangleException extends Exception{
public TriangleException() {
super();
}
public TriangleException(String message) {
super(message);
}
}
public class TriangleText {
public static void main(String[] args) {
try {
Triangle triangle = new Triangle(10,20,31);
triangle.isTri();
}catch (TriangleException e){
System.out.println("不能构成三角形");
e.printStackTrace();
}
}
}
----------------------------------------------------------
不能构成三角形
IO.TriangleException: 三角形构成异常
at IO.Triangle.isTri(Triangle.java:18)
at IO.TriangleText.main(TriangleText.java:7)