首页 > 其他分享 >异常

异常

时间:2023-06-13 23:33:07浏览次数:32  
标签:arr void try static 异常 public

异常概述

就是程序出现了不正常的情况。程序在执行过程中,出现的非正常的情况,最终会导致 JVM 的非正常停止。
注意:语法错误不算在异常体系中。

Error:严重问题,通过代码无法处理。比如:内存溢出。

Exception:称为异常类,它表示程序本身可以处理的问题。

  RuntimeException及其子类:运行时异常。 (空指针异常,数组索引越界异常) 

  除RuntimeException之外所有的异常:编译期必须处理的,否则程序不能通过编译。(日期格式化异常)。

编译时异常和运行时异常

编译时异常,是在编译成class文件时必须要处理的异常,也称之为受检异常

运行时异常,在编译成class文件不需要处理,在运行字节码文件时可能出现的异常。也称之为非受检异常

JVM 的默认处理方案 

将异常的名称,异常原因及异常出现的位置等信息以红色字体打印在控制台;结束程序运行。

异常处理方式 

一、抛出 throws、throw

throws

格式:throws 异常类名  (这个格式是写在方法的定义处,表示声明一个异常。)

  运行时异常因为在运行时才会发生,所以在方法后面可以不写

 1 public class ExceptionDemo1 {
 2     public static void main(String[] args) {
 3         method1(); //此时调用者也没有处理.还是会交给虚拟机处理.
 4     }
 5 
 6     //告诉调用者,你调用我,有可能会出现这样的异常哦.
 7     //如果方法中没有出现异常,那么正常执行
 8     //如果方法中真的出现了异常,其实也是将这个异常交给了调用者处理.
 9     //private static void method1() throws NullPointerException {
10     //如果声明的异常是一个运行时异常,那么声明的代码可以省略
11     private static void method1() /*throws NullPointerException*/ {
12         int [] arr = null;
13         for (int i = 0; i < arr.length; i++) {
14             System.out.println(arr[i]);
15         }
16     }
17 }

  编译时异常因为在编译时就会检查,所以必须要写在方法后面进行显示声明

 1 public class ExceptionDemo2 {
 2     public static void main(String[] args) throws ParseException {
 3         method2(); //还是继续交给调用者处理.而main方法的调用者是虚拟机还是会采取虚拟机默认处理异常的方法.
 4     }
 5 
 6     //告诉调用者,你调用我,有可能会出现这样的异常哦.
 7     //如果方法中没有出现异常,那么正常执行
 8     //如果方法中真的出现了异常,其实也是将这个异常交给了调用者处理.
 9     //如果声明的异常是一个编译时异常,那么声明的代码必须要手动写出.
10     private static void method2() throws ParseException {
11         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
12         sdf.parse("2048-10月10日");
13     }
14 }

throw-抛出异常对象

格式:throw new 异常()  (这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了。)

 1 public class ExceptionDemo3 {
 2     public static void main(String[] args) {
 3         int [] arr = null;
 4         printArr(arr);//2.接收到一个异常.
 5     }
 6 
 7     private static void printArr(int[] arr) {
 8         if(arr == null){
 9             throw new NullPointerException(); //1.当参数为null的时候,手动创建了一个异常对象,抛给了调用者.
10         }else{
11             for (int i = 0; i < arr.length; i++) {
12                 System.out.println(arr[i]);
13             }
14         }
15     }
16 }

throws 和 throw 的区别

throws:
  用在方法声明后面,跟的是异常类名
  表示声明异常,调用该方法有可能会出现这样的异常
throw:
  用在方法体内,跟的是异常对象名
  表示手动抛出异常对象,由方法体内的语句处理

二、捕获 try…catch…

格式:
  try {
    可能出现异常的代码;
  } catch(异常类名 变量名) {
    异常的处理代码;
  }
好处:可以让程序继续往下执行。

 1 public class ExceptionDemo4 {
 2     public static void main(String[] args) {
 3         int [] arr = null;
 4         try{
 5             //有可能发现异常的代码
 6             printArr(arr);
 7         }catch (NullPointerException e){
 8             //如果出现了这样的异常,我们进行的操作
 9             System.out.println("参数不能为null");
10         }
11     }
12 
13     private static void printArr(int[] arr) {
14         if(arr == null){
15             throw new NullPointerException();
16         }else{
17             for (int i = 0; i < arr.length; i++) {
18                 System.out.println(arr[i]);
19             }
20         }
21     }
22 }

注意:
  1.如果 try 中没有遇到问题,怎么执行?
    会把try中所有的代码全部执行完毕,不会执行catch里面的代码
  2.如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?
    那么直接跳转到对应的catch语句中,try下面的代码就不会再执行了
    当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行try...catch外的代码
  3.同时有可能出现多个异常怎么处理?
    出现多个异常,那么就写多个catch就可以了.
    注意点:如果多个异常之间存在子父类关系.那么父类一定要写在下面

Throwable 的成员方法

public String getMessage​()   返回此 throwable 的详细消息字符串
public String toString​()   返回此可抛出的简短描述
public void printStackTrace​()   把异常的错误信息输出在控制台(字体为红色的)

 1 public class ExceptionDemo {
 2     public static void main(String[] args) {
 3         try {
 4             int [] arr = {1,2,3,4,5};
 5             System.out.println(arr[10]);//虚拟机帮我们创建了一个异常对象 new ArrayIndexOutOfBoundsException();
 6         } catch (ArrayIndexOutOfBoundsException e) {
 7             /*String message = e.getMessage();
 8             System.out.println(message);*/
 9            /* String s = e.toString();
10             System.out.println(s);*/
11            e.printStackTrace();
12         }
13     }
14 }

自定义异常

步骤:
1.定义异常类
2.写继承关系
3.空参构造
4.带参构造

1 public class AgeOutOfBoundsException extends RuntimeException {
2     public AgeOutOfBoundsException() {
3     }
4     public AgeOutOfBoundsException(String message) {
5         super(message);
6     }
7 }

 

标签:arr,void,try,static,异常,public
From: https://www.cnblogs.com/sunny-sml/p/17477862.html

相关文章

  • 视频汇聚融合平台EasyCVR使用国标级联出现云台控制异常的解决方法
    EasyCVR视频融合平台基于云边端协同一体化架构,具备强大的数据接入、处理及分发能力,平台可提供视频直播、录像、回放、检索、云存储、平台级联、告警、集群、H.265自动转码等功能。有用户反馈,使用EasyCVR通过国标级联到另一个EasyCVR,上级平台使用云台控制出现返回失败的问题,如下......
  • 学习日记——接口和异常
    1.接口的定义(1)使用接口的原因接口可以实现“多”继承,一个类可以实现多个接口(2)什么是接口1.关键字:interface2.接口中的所有方法都是由publicabstract修饰的3.接口不能实例化4.实现类的关键字是implements必须实现接口的所有方法5.实现类可以实现多个接口(多继承)6.接口中......
  • redis集群异常修复
    概述分析redis在异常情况在的处理流程,redis集群在正常情况下自动主从切换,前提条件master在线多于一半的情况https://github.com/tair-opensource/RedisShake/wikihttp://www.redis.cn/commands/cluster-failover.html 环境:centos7.xredis-5.xredis-cluster(3master/3slave......
  • try……except配合traceback模块,进行不报错异常捕获
    通过try语句去尝试做正确的事,如果中途遭遇了意外情况就引发异常提示try:………………………………………………………………return"成功执行"exceptExceptionase:#Handletheexceptiont......
  • Java开发常出错5颗星——空指针和异常
    常犯指数5颗星空指针空指针概念及样例什么是空指针(java.lang.NullPointExcetion)?空:内存地址指针:引用异常:运行时privatestaticclassUser{privateStringname;privateString[]address;publicvoidprint(){System.out.pr......
  • Spring 异常处理HandlerExceptionResolver
    Spring的异常统一处理非常简单,首先我们需要看一下Spring中定义的HandlerExceptionResolver接口:1./**2.*Interfacetobeimplementedbyobjectsthancanresolveexceptionsthrown3.*duringhandlermappingorexecution,inthetypicalcasetoerrorviews.4......
  • 【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实
    异常传播有时候,您可能需要重新抛出捕获到的异常。这种情况通常发生在捕获到Error或RuntimeException时,因为您可能没有预料到这些异常,但在声明捕获Throwable和Exception时,它们也被包含在内了。为了解决这个问题,Guava提供了多种方法来判断异常类型并重新抛出异常。例如:try{......
  • Vue跨域配置异常采坑:Request failed with status code 401
    本地用Express作为服务端,前端Vue项目配置跨域代理,调用服务端api接口始终报错“Requestfailedwithstatuscode401”。原来发现是端口3000被占用了,被VSCode的一个插件占用了,修改为其他端口解决。具体解决过程记录一下。后端、前端配置Express服务端接口为3000,地址:http://lo......
  • JavaScript学习笔记:客户端编程之异常处理
    未被捕获的异常在程序中,往往会出现异常。虽然主动捕获这些异常是保证程序健壮的必要做法,但是难免会漏掉一些。对于未被捕获的异常,浏览器会在控制台显示一条错误信息,该信息包含异常信息和其在代码中出现的位置。window.onerrorWindow对象有一个onerror属性,将其指定为一个函数,可......
  • 警惕Python编程中异常处理结构可能的坑
    所谓异常,主要是指由于测试不充分导致在实际运行时遇到意料之外的错误而引发的代码崩溃。例如让用户输入两个数然后输出两个数的商,结果用户把除数输入为0。例如让用户输入文件名然后程序输出其中的内容,结果用户输入的文件名不存在。例如网络临时发生故障导致无法连接服务器。这样的......