栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java异常

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java异常

1.什么是异常:

1.程序运行过程中难免会有设计上的漏洞,比如输入的格式不规范,打开某个文件时这个文件格式不对或者不存在了,还有读取数据库数据不存在或者为空等,程序跑着跑着内存或者硬盘满了等等问题。对于一些运行时碰到的一些异常的问题,在java中统称为异常,英文名也叫Exception,也意为例外。异常就可以让我们的程序碰到这些问题不至于崩溃。

2.异常指程序运行中出现的不期而至各种情况(注意不是在编译时候报错这种,是在运行时发生的情况),比如:文件找不到了,非法参数,网络连接失败了等等。

3.异常发在在程序运行期间,它影响了正常程序的执行流程。

2.异常的体系结构

1.java中异常被当做对象处理,并且定义了一个基类:java.lang.Throwable作为所有异常类的超类(所有异常都可以被当做Throwable类来处理,只是不够详细)

2.java API中已经定义了许多异常类,这些异常分为两大类,错误Error(十分严重的异常)和异常Exception

 

可以看到所有异常都是Threwable的子类

3.然后在Exception分支中有一一个重要的子类RuntimeException (运行时异常)

ArrayIndexOutOfBoundsException (数组下标越界)二__

NullPointerException (空指针异常)

ArithmeticException (算术异常)~-

MissingResourceException (丢失资源)

ClassNotFoundException (找不到类)等异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。

这些异常-般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生;

4.Error和Exception的区别: Error通常是灾难性的致命的错误,是程序无法控制和处理的,当一出现这些异常时,Java虚拟机(JVM)一般会选择终止线程; Exception通常情况 下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。

异常的处理机制

合理使用ctrl+alt+t快捷键键

异常处理的五个关键字

try 、catch、finally、throw、throws

捕获异常

package exception;
​
public class Demo01 {
    public static void main(String[] args) {
        int a=1;
        int b=0;
        //try{}catch(){}是异常必须存在的结构,finally{}是可以省略的
​
        try {//try为监控区域,监控区域一旦发现异常,会进入catch语句被捕获
            System.out.println(a/b);
            new Demo01().a();//a()和b()都是无限循环的
        } catch (Exception e) {//这里catch后面()里的格式为 (异常类名 形式参数名)   可能会靠这个参数调用一些方法
            System.out.println("异常错误,进入了catch的代码块,异常被捕获到了");
            //e.printStackTrace();  使用快捷生成会输出原本报错输出的的异常类型
        }catch(Throwable e){
            System.out.println("范围更大的类一定要在范围小的类之后,不然会直接报错");
        }finally{//finally作善后工作,可以省略
            System.out.println("必定会执行finally里面的语句");
        }
    }
    public void a(){
        b();
    }
    public void b(){
        a();
    }
}

抛出异常

//抛出异常throws和throw关键字

package exception;
​
public class Demo02 {
    public static void main(String[] args) {
        int a=1;
        int b=0;
​
        //直接使用
        try{
            if(b==0){
                throw new ArithmeticException();//算数异常,主动抛出异常,一般在方法中使用
            }
            System.out.println(a/b);
        }catch (Exception e){
            System.out.println("异常");
        }
​
        //方法中只用了throw可以不进行捕获
        System.out.println("==============================");
        System.out.println(new Demo02().test(2,1));
​
        System.out.println("==============================");
        //方法中只用了throws必须进行捕获
        try {
            System.out.println(new Demo02().test1(2,0));
        } catch (Exception e) {
            System.out.println("已经捕获");;
        } finally {
        }
​
​
    }
    public int test(int a,int b){
        if(b==0){
            throw new ArithmeticException();
        }
        int x=a/b;
        return x;
    }
    public int test1(int a,int b)throws Exception{
        if(b==0){
            throw new ArithmeticException();
        }
        int x=a/b;
        return x;
    }
}

自定义异常

//自定义异常类

package exception;
​
public class myException extends Exception {//自定义异常类要进行继承异常类
​
    private int test1;
​
    public myException(int a) {
        this.test1 = a;
    }
​
    @Override
    public String toString() {//重写toString方法
        return "myException{" + test1 + "}";
    }
}
package exception;
//自定义异常的测试类
public class test {
    public static void main(String[] args) {
        //方法一在方法内直接处理了异常
        test1(8);
        //方法而在将方法内异常选择抛出,调用者调用时必须对其进行捕获
        try{
            test2(11);
        }catch(myException  e){
            System.out.println("调用者调用方法时捕获到异常");
        }
    }
​
​
​
    //1.在方法中直接进行捕获处理的方法
    public static void test1(int a){
        if (a>5){
            try {
                throw new myException(a);//myException构造器是有参构造器
            } catch (myException e) {//1.在方法中直接进行捕获处理
                System.out.println("在方法内直接抛出并捕获");
            }
        }else{
            System.out.println("传递的参数为"+a);
        }
    }
    //2.方法直接抛出异常通过调用者处理异常
    public static void test2(int a) throws  myException{
        if(a>10){
            throw new myException(a);
        }
        System.out.println("传递的参数为"+a);
    }
​
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462760.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号