当前位置: 首页 > 工具软件 > javaex > 使用案例 >

【JAVA语言学习】JavaExcaption

孙清野
2023-12-01

异常

异常概述

在日常的编写代码中,难免会遇到很多错误,有时在编写前便可以得到解决,但有时的错误特殊,只有在运行时才可以遇到,很多一场不是靠编写代码能够解决的,

比如: 内存溢出,数组下标越界,输入时异常,运算时异常,空指针异常…

还有些:用户输入数据时格式异常,文件读写是否存在,网络问题…

大概在分类上可以把异常分为两大类:

Error

虚拟据无法解决的严重问题:比如:

​ JVM系统内部错误,资源耗尽,这种情况无法通过我们编写代码解决,所以不做处理

Exception

因为编程错误或者偶然的外在因素:

​ 内存溢出,数组下标越界,输入时异常,运算时异常,空指针异常…

​ 这些情况下,可以通过编写异常处理代码来解决问题,使得编写的代码,在遇到异常时还可以继续执行下去.

​ 另一种就是终止程序的进行了;

异常的体系

运行时异常

编译时没有问题,但是在运行时因为各种各样的问题出现的异常,

数学异常
空指针异常
数组下标越界
输入时异常
内存溢出

编译时异常

这类异常比较常见,一般可以被编译器检测出解决;

IOException
SQLException

异常处理

异常处理一般通过语言中的关键字,

java中处理异常的关键字有5个:

try
catch
finally
throw
throws

try—>可能异常的代码块

catch---->捕获异常,返回异常后的提示

finally---->无论是否异常,该代码块总能被执行.

throws—>声明方法可能要抛出的所有异常

throw—>手动抛出异常

一个try可以跟一个catch—>

try{
    //可能出错的代码
}catch(错误类型){
    //错误提示
}
后续代码
//嵌套也可
try{
    //可能出错的代码
    try{
    //可能出错的代码
	}catch(错误类型){
    //错误提示
				}	
}catch(错误类型){
    //错误提示
}
后续代码

一个try可以跟多个catch

try{
    //可能出错的代码
}catch(错误类型){
    //错误提示
}catch(错误类型){
 	//错误类型提示   
}

当类型无法得知时

getMessage()—>获取异常信息,返回字符串
printStackTrace()—>获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

catch(Exception e){
    System.out.println(e.getMessage);
    e.printStackTrace();
}

当try中有多个异常时,只会抛出最先遇到的哪一个

try {
    String s1 = null;
    System.out.println(s1.length());
    int a2 = Integer.valueOf("adc");
    System.out.println(a2);
    int[] a = new int[5];
    System.out.println(a[5]);

}catch (NullPointerException ex){
    System.out.println("s1为空");
}catch (NumberFormatException ex){
    System.out.println("输入错误");
}catch (Exception ex){
    System.out.println("错误类型:"+ex.getMessage());
}

>>>s1为空

代码展示

package com.cxy.JavaException.day1;

public class Demo2 {
    public static void main(String[] args) {
        try {
            String s1 = "asjdlk";
            System.out.println(s1.length());
            int a2 = Integer.valueOf("123456");
            System.out.println(a2);
            int[] a = new int[5];
            System.out.println(a[5]);

        }catch (NullPointerException ex){
            System.out.println("s1为空");
        }catch (NumberFormatException ex){
            System.out.println("输入错误");
        }catch (Exception ex){
            System.out.println("错误类型:"+ex.getMessage());
        }
        System.out.println("last java");
    }
}

finally

必须要执行的字段

package com.cxy.JavaException.day1;

public class Demo3 {
    public static String TTry(){
        try{
            String s1 = null;
            System.out.println(s1.length());
        }catch (Exception e){
            System.out.println(e.getMessage());
            return 404+" notfind";
        }finally {
            System.out.println("必须执行");
        }
        return 200+"OK";
    }

    public static void main(String[] args) {
        System.out.println(TTry());
    }
}

>>>null
>>>必须执行
>>>404 notfind
>>>
>>>Process finished with exit code 0

throws

定义一个方法的时候使用throws修饰,表示这个方法不处理异常,直接抛出,交给调用的方法处理

1.任何方法都可以使用throws修饰

2.子类重写父类的方法时,子类不能抛出比父类类型更大的异常

3.使用throws 修饰的方法,在使用的时候,必须用 throws修饰或者使用 try–catch语句

public static int ab(int a , int b) throws ArithmeticException{
        return a/b;
    }

throw

用于显式抛出异常,抛出一个异常的实例化对象,try在运行中捕获一个异常对象,那么这个异常对象也可以自己抛出

public static int ac(int a) throws ArithmeticException{
        if(a>100||a<0){
            throw new ArithmeticException("分数不合法!");
        }
        return a;
    }

throw和throws

throw用于方法体中,抛出一个实际的对象,调用时可以使用throws修饰方法,或者使用try-catch

throws用于方法声明时,用来抛出对应类型的异常,表示该异常在这里不处理,调用时处理

package com.cxy.JavaException.day1;

public class Demo4 {
    public static void main(String[] args) {
        try{
            ab(5,0);
        }catch (ArithmeticException e){
            System.out.println("分母不为零");
        }
//        try {
//            System.out.println(ac(101));
//        }catch (Exception e){
//            System.out.println(e.getMessage());
//        }
        System.out.println(ac(105));
    }
    public static int ab(int a , int b) throws ArithmeticException{
        return a/b;
    }
    public static int ac(int a) throws ArithmeticException{
        if(a>100||a<0){
            throw new ArithmeticException("分数不合法!");
        }
        return a;
    }
}

自定义异常

自定义异常就是一些java中没有,但我们实际写代码时候需要用到的某些异常,比如:分数不能小于0,大于满分,我们就可以自定义异常,

基本语法:基本语法

public  class 异常类名 extends Exception/RuntimeException{
        public 异常类名(String msg){
            super(msg);
       }
 }

在定义时,自定义异常不需要写方法,只需要重写要使用的构造方法, 继承Excaption或者某个异常,使用时要抛出

//自定义异常
package com.cxy.JavaException.day1;

/**
 * 自定义异常
 */
public class MyExcaption extends Exception{
    public MyExcaption(String s1){
        super(s1);
    }
}
//测试类
package com.cxy.JavaException.day1;

public class Demo5 {
    public static int cc(int a) throws MyExcaption {
        if (a<0||a>100){
            throw new MyExcaption("我劝你耗子尾汁");
        }
        return a;
    }

    public static void main(String[] args) {
        try {
            System.out.println(cc(105));
        }catch (Exception a){
            System.out.println(a.getMessage());
        }
    }
}
 类似资料: