当前位置: 首页 > news >正文

java基础-异常

1.注意:开发中语法错误和逻辑错误不叫异常

2.java程序在执行过程中发生的异常事件分为:

(1)Error:java虚拟机无法解决的严重问题,如:JVM系统错误、资源耗尽等严重情况

比如:StackOverflowError和OOM,一般不编写针对性的代码进行处理

(2)Exception:其他因编程错误或偶然外在因素导致的一般性问题,可用针对性的代码进行处理

3.对于这些错误,有两种解决方法:一是遇到错误就终止,另一种是程序员编写程序时就考虑到错误的检测、错误信息的提示、处理;

异常又分为:编译时异常和运行时异常

4.异常体系结构:

java.lang.Throwable

        java.lang.Error

        java.lang.Exception

                编译时异常:

                        IOException

                        ClassNotFoundException

                运行时异常:

                        NullPointerException

                        ArrayIndexOutOfBoundsException

                        ClassCastException

                        NumberFormatException

                        InputMismatchException

                        ArithmeticException

(1)NullPointerException

public class Main {public static void main(String[] args) {new Test().test();}
}
class Test{public void test(){int[] arr = null;System.out.println(arr[3]);}
}

(2)ClassCastException

   

import java.util.Date;public class Main {public static void main(String[] args) {new Test().test();}
}
class Test{public void test(){Object obj = new Date();String str = (String) obj;}
}

(3) NumberFormatException

import java.util.Date;public class Main {public static void main(String[] args) {new Test().test();}
}
class Test{public void test(){String str = "abc";int i = Integer.parseInt(str);}
}

5.异常处理机制的意义:

在编写程序时,往往需要检测分母为0、数据为空、输入的数据类型等等是否符合要求,会使用if-else语句进行检测,但太多的该语句会导致代码臃肿,可以采用异常处理机制;通过将异常处理的代码集中在一起,使程序简洁、优雅、易于维护

6.异常对象的产生:

(1)自动抛出:

由JVM自动生成

(2)手动抛出:由开发人员手动创建

7.try-catch-finally的使用

import java.util.Date;public class Main {public static void main(String[] args) {new Test().test();}
}
class Test{public void test(){String str = "abc";try {int i = Integer.parseInt(str);System.out.println(123);}catch (NumberFormatException e){System.out.println("出现数字转换异常了");}System.out.println(456);}
}

当try中的语句发生异常时,就会跳出该代码块;

不一定非得写finally;
 

import java.util.Date;public class Main {public static void main(String[] args) {new Test().test();}
}
class Test{public void test(){String str = "abc";try {int i = Integer.parseInt(str);System.out.println(123);}catch (NumberFormatException e){System.out.println(e.getMessage());e.printStackTrace();}System.out.println(456);}
}

实际开发中,对于异常的处理往往使用以上两种方式

println(s.getMessage())

s.printStackTrace

catch可以写多个;多个catch语句中的异常类型若有子父类关系,则必须保证子类在上,父类在下;

8.try-catch-finally的意义:

一般我们用它来处理编译时异常,使之异常在运行时出现;而对于运行时异常,我们一般不做干预;

import java.util.Date;public class Main {public static void main(String[] args) {System.out.println(new Test().test());}
}
class Test{public int test(){try {int[] arr = new int[10];System.out.println(arr[10]);return 1;}catch (ArrayIndexOutOfBoundsException e){return 2;}finally {return 3;}}
}

结果为3

9.finally的使用:

finally是一定会被执行的语句,即使try和catch中有return语句,即使catch中又出现异常,也会执行该代码块;

实际应用中:像数据库连接、输入输出流、网络编程Socket等资源,JVM不能自动回收,我们需要手动进行资源释放,一般声明在finally中,因为声明在其他地方有不被执行的风险;

10.第二种异常处理方式:throws

throws写在方法的声明处,当方法体中出现了与之对应的异常对象,就会停止运行下面代码,将异常抛出给调用者;·

11.子类重谢方法规则:子类抛出的异常类型不大于父类被重写方法抛出的异常类型;

12.

两种异常处理方式的选择:

(1)当父类中被重写方法未抛出异常,则重写时要用try-catch

(2)当调用一个方法时,该方法又会调用其他几个方法,这时经常用throws的方式

13.手动抛出异常:

import java.io.IOException;
import java.util.Date;public class Main {public static void main(String[] args) {Student s1 = new Student();s1.register(-100);}
}class Student{private int id;public void register(int id){if(id > 0){this.id = id;}else {throw new RuntimeException("您输入的数据非法");}}
}

14.自定义异常类:

(1)继承于现有异常结构:RuntimeException、Exception

(2)提供全局变量static final

(3)提供重载的构造器

import java.io.IOException;
import java.util.Date;public class Main {public static void main(String[] args) {Student s1 = new Student();s1.register(-100);}
}class Student{private int id;public void register(int id){if(id > 0){this.id = id;}else {throw new MyException("数据非法");}}
}
class MyException extends RuntimeException{static final long serialVersionUID = -21309428342L;public MyException(){}public MyException(String ms){super(ms);}}

http://www.dtcms.com/a/203013.html

相关文章:

  • CompleteableFuture的异步任务编排
  • MySQL的安装及相关操作
  • MySQL 自启动时报错can‘t create PID file: No such file or directory
  • 基于天猫 API 的高效商品详情页实时数据接入方法解析
  • 麒麟系统编译osg —— 扩展篇
  • 系统架构设计(十六):敏感点、权衡点、风险点和非风险点
  • EtherCAT通信协议
  • 题解:AT_abc244_e [ABC244E] King Bombee
  • vue+three.js 五彩烟花效果封装+加载字体
  • Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程
  • idea 插件开发自动发布到 nexus 私服中(脚本实例)
  • 随记1-LLM多轮对话的陷阱
  • LTX-Videov本地部署教程:时空扩散+多尺度渲染,重塑AI视频研究范式
  • 至此(day1-day4)代码详解(ai辅助整理)
  • Python代码加密与发布方案详解
  • 计算机图形学Games101笔记--几何
  • leetcode字符串篇【公共前缀】:14-最长公共前缀
  • NebulaGraph学习笔记-SessionPool之Session not existed
  • 常见高速电路设计与信号完整性核心概念
  • SVA 断言16.9 Sequence operations序列运算翻译笔记(12)
  • 香港科技大学(广州)智能制造理学硕士招生宣讲会——深圳大学专场
  • Nextjs App Router 开发指南
  • leetcode 找到字符串中所有字母异位词 java
  • 百度网盘加速补丁v7.14.1.6使用指南|PC不限速下载实操教程
  • 你知道mysql的索引下推么?
  • Doris高性能读能力与实时性实现原理
  • 【优秀三方库研读】在 quill 开源库中 QUILL_MAGIC_SEPARATOR 的作用是什么,解决了什么问题
  • 【Java】封装在 Java 中是怎样实现的?
  • 基于springboot的网上学校超市商城系统【附源码】
  • [Vue]组件介绍和父子组件间传值