首页 > 其他分享 >异常

异常

时间:2023-03-25 20:12:15浏览次数:24  
标签:java age catch main 异常 public

一、什么是异常

程序在运行过程当中发生的问题

点击查看代码
public class Main1 {
public static void main(String[] args) {
System.out.println("发生异常前");
int i = 1 / 0 ;//这里发生异常
System.out.println("发生异常后");
	}
}

Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.qf.demo01.Main1.main(Main1.java:6)

结论:
异常会打断程序的进行

什么是异常

所以异常当然是指程序运行过程当中出现的问题,但是其本质,就是一个标识。

异常的结构和分类

Throwable:是所有异常和错误的共同父类
2.Error:错误是不可挽回的,不可修正的。(编译错误,类的缺失)
3.Exception:异常,是可以通过程序修正的。修正并不是把问题修改到没有,而是去进行策略上的弥
补。
a.Exception:受查异常(要么捕获,要么抛出
b.RuntimeException:运行时异常

异常的捕获

1.使用try,捕获某个区域当中,可能会发生的异常
2.catch用于匹配异常,如果异常不匹配,则try catch失效
3.多catch匹配,可以同时捕获多种异常
注意:在try当中只要发生异常,try代码块中无论还有多少代码没有执行,抵达对应的catch,执行catch的内容
4.在异常的catch列表当中,父类异常必须在后面

点击查看代码
package com.qf.demo01;
        public class Main2 {
            public static void main(String[] args) {
                System.out.println("发生异常前");
                try{String str = null;
                    str.length();
                    int i = 1 / 0 ;
                }catch (NullPointerException e){
                    e.printStackTrace();//打印异常的堆栈信息
                }catch (ArithmeticException e){
                    e.printStackTrace();//打印异常的堆栈信息
                }catch (Exception e){//父类异常必须在后面
                    e.printStackTrace();//打印异常的堆栈信息
                }
                System.out.println("发生异常后");
            }
        }

finally

无论如何都会被执行的代码块,即便return也无法组织。想要阻止他,只能强制关闭虚拟机。

点击查看代码
 public static void main(String[] args) {
                System.out.println("发生异常前");
                try{
                    String str = null;
                    str.length();
                    int i = 1 / 0 ;
                }catch (NullPointerException e){
                    e.printStackTrace();//打印异常的堆栈信息
                }catch (ArithmeticException e){
                    e.printStackTrace();//打印异常的堆栈信息
                }catch (Exception e){
                    e.printStackTrace();//打印异常的堆栈信息
                }finally {
                    System.out.println("无论如何都会执行");
                }
                System.out.println("发生异常后");
           }

自动抛出异常

checked异常通常可以考虑抛出
处理异常的策略:谁调用谁处理

点击查看代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Main3 {
            public static void main(String[] args) {
                A a = new A();
                try {//捕获异常为最终处理异常的方式
                    a.fun();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
        class A{
            B b = new B();
            public void fun() throws Exception {
                b.fun();
            }
        }
        class B{
            C c = new C();
            public void fun() throws Exception {
                c.fun();
            }
        }
        class C{
            public void fun() throws ParseException , Exception {
                SimpleDateFormat sdf = new SimpleDateFormat("");
                sdf.parse("");
            }
        }

异常的堆栈信息

点击查看代码
~~~~Exception in thread "main" java.lang.RuntimeException: java.text.ParseException:
Unparseable date: ""
at com.qf.demo01.Main3.main(Main3.java:12)
Caused by: java.text.ParseException: Unparseable date: ""
at java.text.DateFormat.parse(DateFormat.java:366)
at com.qf.demo01.C.fun(Main3.java:31)
at com.qf.demo01.B.fun(Main3.java:25)
at com.qf.demo01.A.fun(Main3.java:19)
at com.qf.demo01.Main3.main(Main3.java:10)

打印堆栈信息:e.printStackTrace();
最下面的是最开始的调用方法,最上面的是最开始出现异常的地方。
异常的信息包含:
1.异常的内容
2.异常的类型
3.异常所发生的类
4.异常所发生的方法
5.异常发生的位置,即行数

手动抛出异常

由开发者自己定义的异常行为

点击查看代码
class Person{
    private Integer age;
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        if(age < 0 || age > 120){
            throw new RuntimeException("年龄错啦,您确定是人类吗?");
        }
        this.age = age;
    }
}
public class Main4 {
    public static void main(String[] args) {
        Person p = new Person();
        p.setAge(1111);
    }
}

结果

点击查看代码
Exception in thread "main" java.lang.RuntimeException: 年龄错啦,您确定是人类吗?
at com.qf.demo01.Person.setAge(Main4.java:18)
at com.qf.demo01.Main4.main(Main4.java:6)

自定义异常

自定义异常的创建方式:
1.继承Exception或者RuntimeException
2.名字通常是XxxxException
3.对父类构造进行调用

点击查看代码
public class AgeBoundException extends RuntimeException{
    public AgeBoundException() {
        super();}
    public AgeBoundException(String message) {
        super(message);
    }
    public AgeBoundException(String message, Throwable cause) {
        super(message, cause);
    }
    public AgeBoundException(Throwable cause) {
        super(cause);
    }
    protected AgeBoundException(String message, Throwable cause, boolean
            enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
    public void setAge(Integer age) {
        if(age < 0 || age > 120){
            throw new AgeBoundException("年龄错啦,您确定是人类吗?");
        }
        this.age = age;
    }

标签:java,age,catch,main,异常,public
From: https://www.cnblogs.com/qiyuancc/p/17255472.html

相关文章

  • openfeign 请求异常
    在OpenFeign中,如果发生请求异常,是不会走到Decoder的。Decoder主要是用于将HTTP响应体转换为Java对象的,只有在请求成功并且返回了正确的HTTP响应体时才会被调用......
  • Java【全局异常】无法捕获【环绕通知】
    ......
  • 网络异常与网络断开,发送AJAX处理
    <!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title></title> <styletype="text/css"> #result{ width:300px; height:100px; ......
  • .net core 自定义异常中间件
    前言在程序设计中,我们会遇到各种各样的异常问题,一个好的异常处理解决方案能够帮助开发者快速的定位问题,也能够给用户更好的用户体验。异常处理的几种方式1、通过异常过......
  • 异常
    一、异常体系介绍异常的最大一个类为java.lang.Throwable,其有两个子类,分别为Error和Exception。Error:代表的系统级别错误(属于严重问题)系统一旦出现问题,sun公司会把这些......
  • DolphinDB 流计算应用:引擎级联监测门禁异常状态
    物联网的发展为智能安防和自动化监控带来了更多便利,与此同时,新型城镇建设、智慧城市与智慧社区的发展也为门禁管理等安防问题智能化提出了更高的要求。在智能化发展的背景下......
  • SpringBoot中定义全局异常处理器
    场景SpringBoot中创建全局异常处理器,使发生异常时能处理。实现在项目下新建handler包,在包下新建GlobalExceptionHnadler.javapackagecom.example.demo.handler;importja......
  • sql预编译参数设置为null导致空指针异常
    编写的公共查询方法  在Dao层调用我们的公共查询方法并将params设置为了null  报错空指针异常  解决方法:将params设置为一个空的数组 ......
  • Laravel 异常错误信息处理
    手动抛出错误try{ $num1=3; if($num1==3){ thrownew\Exception("自定义错误"); }}catch(\Exception$exception){ info($exception->getMessage());}日......
  • SSM整合——项目异常处理
    项目异常处理项目异常分类业务异常不规范的用户行为产生的异常  规范的用户行为产生的异常  系统异常项目运行过程中可预计且无法避免的异常  其他......