Java异常处理try catch的基本使用
作者:写Bug的渣渣高 发布时间:2023-11-24 05:04:38
1. 异常
1.1 try…catch异常处理
try catch的异常处理的格式写法 :
try{
被检测的代码
可能发生异常的代码
}catch(异常类的类名 变量名){
异常的处理方式 : 写什么都可以
定义变量,创建对象,调用方法,循环,判断...
只要写了catch,异常就被处理掉了
}
public static void main(String[] args) {
int[] arr = {1};
//try catch异常处理
try {
int i = getNum(arr);
System.out.println("i = " + i);
}catch (Exception ex){
System.out.println("异常被处理掉");
}
System.out.println(111);
}
public static int getNum(int[] arr){
return arr[1] + 10;
}
1.2 多catch并行处理
异常处理的代码中 : try 可以跟随多个catch
好处 : 不同的异常,可以区别对待,分开处理
public static void main(String[] args) {
/**
* myExec出现2个异常
* 写2个catch分别捕获异常
*/
try {
myExec(0);
}catch (NullPointerException ex){
System.out.println("处理空指针异常");
}catch (ArrayIndexOutOfBoundsException ex){
System.out.println("处理越界异常");
}
}
/**
* 定义方法,目的引发异常
* 传递参数 : 对参数进行判断
*/
public static void myExec(int i){
if ( i == 0){
//引发空指针异常
String s = null;
int len = s.length();
}else {
//引发越界异常
int[] arr = {};
int a = arr[0];
}
}
多个catch处理异常的时候,写法特别注意 : 如果catch中的异常类没有关系,先写后写没有区别, catch中的异常类有继承关系,父类写在最下面
1.3 throw和throws 关键字的使用
throw关键字 : 只能写在方法内部, 关键字的后面跟随对象的创建
throws关键字 : 只能写在方法的定义上,关键字后面跟随异常类名
public static void main(String[] args) {
/**
* getArea()调用方法,方法上有异常
* 只能处理,不处理编译失败
* 在main的方法上加throws 异常没有处理,交给JVM处理
* try catch处理
*/
try {
int area = getArea(-10);
System.out.println(area);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 功能: 计算正方形的面积
* 需要参数 : 边长
* 语法 : 方法的内部出现了异常,必须在方法定义上暴露
*/
public static int getArea(int length) throws Exception{
if (length <= 0)
//数据错误,导致后面的计算不能进行
//内部出现问题
throw new Exception("边长不存在");
return length * length;
}
1.4 finally代码块
finally代码块跟随try … catch使用,也有跟随try使用
finally代码块里面的程序,无论是否出现异常,都会执行,必须执行
结束JVM了,finally不执行.
主要用于释放资源
public static void main(String[] args) {
try {
int[] arr = {1};
System.out.println(arr[0]);
}catch (Exception ex){
ex.printStackTrace();
}finally {
//后期用于资源的释放
System.out.println("这里的代码,必须执行");
}
}
1.5 RuntimeException异常
异常的父类是Exception,Exception类的子类RuntimeException,凡是RuntimeException和他的所有子类,都称为运行异常,非子类的称为编译异常
编译异常 : 方法出现编译异常,调用者必须处理,否则编译失败.处理方式可以是try catch或者是throws都可以
运行异常 : 方法出现运行异常,方法的定义上,不需要throws声明,调用者也不需要处理这个异常
不要处理运行异常 : 程序一旦发生运行异常,请程序人员修改源码
常见的运行异常
NullPointerException 空指针
IndexOutOfBoundsException 越界异常
ClassCastException 类型强制
IllegalArgumentException 无效的参数异常
1.6 自定义异常
Java官方已经定义了大量的异常类,但是依然不够,以后做项目的时候,会出现的异常,在JDK中没有定义的,需要我们自己定义异常
自定义异常,入伙,继承Exception或者RuntimeException 只有Exception和他的子类,才具有可抛出性
自定义的类中,构造方法,super调用父类构造方法,传递异常信息
/**
* 自定义的异常类
* 成绩负数的异常
* 继承哪个父类呢
*
* 自定义异常信息 : 继承父类 RuntimeException 带有String类型的构造方法 (String 异常信息)
*/
public class ScoreException extends RuntimeException{
public ScoreException(String s){
super(s);
}
}
public static void main(String[] args) {
// int[] arr = {1};
//System.out.println(arr[2]);
int avg = getAvg(-100,2);
System.out.println("avg = " + avg);
}
/**
* 计算成绩的平均分
*/
public static int getAvg(int math,int chinese){
//判断成绩的数值
if ( math < 0 || chinese < 0)
//手动抛出,自己定义的异常
throw new ScoreException("成绩不存在");
return (math + chinese) / 2;
}
来源:https://blog.csdn.net/m0_52410356/article/details/122870130


猜你喜欢
- WPF 使用 DrawingContext 绘制刻度条框架使用大于等于.NET40;Visual Studio 2022;项目使用 
- 概述在JAVA JDK8 List分组的实现和用法一文中介绍了JDK 8如何对list进行分组,但是没有提到如何在分组后,获取每个分组的第一
- 废话不多说,先给大家贴代码,具体代码如下所示:import net.sf.json.JSONArray; import net.sf.jso
- 前言本文是精讲RestTemplate第8篇,前篇的blog访问地址如下:RestTemplate在Spring或非Spring环境下使用精
- 调用后动态壁纸其实是显示在Activity的后面,而Activity则是透明显示,这样就可以看到下面的动态壁纸,如果Activity不是透明
- 想用java做一个像windows里一样的txt编辑软件,涉及到字体设置选项卡,在网上找了很久都没找到,就生气啦自己写一个,现在贴这里分享一
- Navigation 组件支持 Jetpack Compose 应用。我们可以在利用 Navigation 组件的基础架构和功能,在可组合项
- 先来简单说一下本文所要实现的功能:用户在浏览网页的时候,长按某一区域,识别如果是图片,则弹出弹框,出现保存图片的功能。同时识别图片是否是二维
- Android 自定义gradle property在Android studio上运行项目,gradle的配置是必不可少的,但是随着项目的
- 周末这天手痒,正好没事干,想着写一个分页的例子出来给大家分享一下。这个案例分前端和后台两部分,前端使用面向对象的方式写的,里面用到了一些回调
- 1.全面屏的适配全面屏出现后,如果不做适配,屏幕上会出现上下黑边,影响视觉效果。针对此问题,Android官方提供了适配方案,即提高App所
- 这两天做了一个项目,发现标签不能更改任意一个标签的字体的颜色,需求如同置前标签,然后就对tagcloudeview稍做修改做了这么一个dem
- SpringBoot应用启动run方法SpringApplication.java 中执行的代码@SpringBootApplication
- 目录一、什么是vector数组二、vector的基本操作vector数组的初始化向vector中插入元素删除元素遍历数组利用vector创建
- 本文为大家分享了Unity制作签名功能的具体代码,供大家参考,具体内容如下前言:项目中需要做一个签名的功能,同时需要两个两个屏幕进行显示,但
- 闲暇之余,开发一个图片编辑小程序。程序主要特点就是可方便的对多个图像编辑,实现了一些基本的操作。本文主要介绍一下程序的功能、设计思路。执行程
- 在[高并发Java 二] 多线程基础中,我们已经初步提到了基本的线程同步操作。这次要提到的是在并发包中的同步控制工具。1. 各种同步控制工具
- C#生成指定范围内的不重复随机数// Number随机数个数// minNum随机数下限// maxNum随机数上限public int[]
- 原理概述Lifecycle主要用于Activity、Fragment这一类具有状态的组件的状态监听,最主要的一个作用就是将原先Activit
- 本文实例讲述了Android开发实现判断通知栏是否打开及前往设置页面的方法。分享给大家供大家参考,具体如下:项目中用到日程提醒功能,如果应用