当前位置: 首页 > 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.xdnf.cn/news/559171.html

相关文章:

  • 2.前端汇总
  • 《初入苍穹:大一新手的编程成长之旅》
  • SpringBoot 项目实现操作日志的记录(使用 AOP 注解模式)
  • C++类与对象--6 特性二:继承
  • springMVC拦截器,拦截器拦截策略设置
  • 破解误区:WebView 调试常见认知误区与 WebDebugX 实践指南
  • AnyText2 在图片里玩文字而且还是所想即所得
  • V2X协议|如何做到“车联万物”?【无线通信小百科】
  • Hutool 常用工具类实战指南
  • selenium——基础知识
  • 数据一致性校验算法
  • 创建与管理MySQL数据库
  • Google精准狙击OpenAI Codex,发布AI编程助手Jules!
  • Fluent Bit持久化配置指南:保障日志不丢失的关键策略
  • Elasticsearch高级面试题汇总及答案
  • AMBA三种总线详解并比较
  • 元宇宙赋能广州文化传承,激发新活力​
  • C语言学习之内存函数
  • AI练习:毛发旋转效果
  • 再议AOI算法
  • 通过强化学习让大模型自适应开启思考模式
  • 101个α因子#9
  • C++(3)
  • idea如何让文件夹分层显示,而不是圆点分割
  • Python训练营打卡 Day31
  • 模板引擎:FreeMarker
  • 基于pyttsx3的文字转语音实现
  • 输出字母在字符串中位置索引
  • 超强吸水宠物垫行业2025数据分析报告
  • 从计算机组成原理寻址方式参悟指针的本质