当前位置: 首页 > 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);}}

相关文章:

  • 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)
  • 全国首例闭环脊髓神经接口手术在浙江完成,截瘫患者实现自主行走
  • 财政部:4月份中央收入增长1.6%,今年以来首月实现正增长
  • 金融监管总局将研究出台专门的城市更新项目贷款管理办法:引导大力支持城中村的改造等
  • 国际博物馆日|在辽宁省博物馆遇见敦煌
  • 15年全免费,内蒙古准格尔旗实现幼儿园到高中0学费
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区