一、Throw(抛出异常,让调用者处理)

Throw(将异常抛给调用者)

在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。那么,抛出一个异常具体如何操作呢?

1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。

2. 需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw 就可以完成。

throw 异常对象。

throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

public?class?ThrowDemo?{ ????

public?static?void?main(String[]?args)?{ ????????

//创建一个数组? ????????

int[]?arr?=?{2,4,52,2}; ????????

//根据索引找对应的元素? ????????

int?index?=?4; ????????

int?element?=?getElement(arr,?index); ? ????????

System.out.println(element); ????????

System.out.println("over");

}?

public?static?int?getElement(int[]?arr,int?index){? ???????

//判断??索引是否越界 ? ????????

if(index<0?||?index>arr.length‐1){ ?????????????

???/* ?????????????

判断条件如果满足,当执行完throw抛出异常对象后,方法已经无法继续运算。 ?????????????

这时就会结束当前方法的执行,并将异常告知给调用者。这时就需要通过异常来解决。? ??????????????

*/ ???????????

throw?new?ArrayIndexOutOfBoundsException("哥们,角标越界了~~~"); ????????} ????????

int?element?=?arr[index]; ????????

return?element; ????

}

}???

二、Throws(声明异常),,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).

修饰符?返回值类型?方法名(参数)?throws?异常类名1,异常类名2…{???}

public?class?ThrowsDemo?{ ????

public?static?void?main(String[]?args)?throws?FileNotFoundException?{ ????????

read("a.txt"); ????

} ? ????

// 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明

public static void read(String path) throws FileNotFoundException {

if (!path.equals("a.txt")) {

//如果不是 a.txt这个文件

// 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw

throw new FileNotFoundException("文件不存在");

}

}

}

三、 捕获异常try…catch,捕获异常:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。

格式:

try{ ?????

编写可能会出现异常的代码

}catch(异常类型??e){ ?????

处理异常的代码 ????

//记录日志/打印异常信息/继续抛出异常

}

演示:

public?class?TryCatchDemo?{ ????

public?static?void?main(String[]?args)?{ ???????

try?{

//?当产生异常时,必须有处理方式。要么捕获,要么声明。 ????????????

read("b.txt"); ????????

}?catch?(FileNotFoundException?e)?{

//?括号中需要定义什么呢? ??????????

//try中抛出的是什么异常,在括号中就定义什么异常类型 ?? ????????????

System.out.println(e); ????????

} ????????

System.out.println("over"); ????

} ?

/** ?????

*?我们?当前的这个方法中?有异常??有编译期异常 ?????

*/ ????

public?static?void?read(String?path)?throws?FileNotFoundException?{ ????????

if?(!path.equals("a.txt"))?{

//如果不是?a.txt这个文件? ????????????

//?我假设??如果不是?a.txt?认为?该文件不存在?是一个错误?也就是异常??throw ???????????? ??

? throw?new?FileNotFoundException("文件不存在");

}

}

}

四、 ?nally 代码块:有一些特定的代码无论异常是否发生,都需要执行

?nally的语法: try...catch....?nally:自身需要处理异常,终还得关闭资源。

?

public?class?TryCatchDemo4?{ ????

public?static?void?main(String[]?args)?{ ????????

try?{ ????????????

read("a.txt"); ???????

}?catch?(FileNotFoundException?e)?{ ????????????

//抓取到的是编译期异常??抛出去的是运行期? ????????????

throw?new?RuntimeException(e); ????????

}?finally?{ ????????????

System.out.println("不管程序怎样,这里都将会被执行。"); ????????

} ????????

System.out.println("over"); ???

} ????

/* ?????

* ?????

*?我们?当前的这个方法中?有异常??有编译期异常 ?????

*/ ????

public?static?void?read(String?path)?throws?FileNotFoundException?{ ????????

if?(!path.equals("a.txt"))?{

//如果不是?a.txt这个文件? ???????????

//?我假设??如果不是?a.txt?认为?该文件不存在?是一个错误?也就是异常??throw ????????????

?throw?new?FileNotFoundException("文件不存在");

}

}

}

五、异常注意事项

多个异常使用捕获又该如何处理呢?

1. 多个异常分别处理。

2. 多个异常一次捕获,多次处理。

3. 多个异常一次捕获一次处理

try{ ?????

编写可能会出现异常的代码

}catch(异常类型A??e){??当try中出现A类型异常,就用该catch来捕获. ?????

处理异常的代码 ?????

//记录日志/打印异常信息/继续抛出异常

}catch(异常类型B??e){??当try中出现B类型异常,就用该catch来捕获. ?????

处理异常的代码 ?????

//记录日志/打印异常信息/继续抛出异常

}

六、自定义异常

原因:发现这些异常都是JDK内部定义好的,但是实际开发中也会出现很多异常,这些异常很可能在JDK中 没有定义过,例如年龄负数问题,考试成绩负数问题.那 么能不能自己定义异常呢?

异常类如何定义:

1. 自定义一个编译期异常: 自定义类 并继承于 java.lang.Exception 。

2. 自定义一个运行时期的异常类:自定义类 并继承于 java.lang.RuntimeException 。

案例:

//?业务逻辑异常

public?class?RegisterException?extends?Exception?{ ????

/** ?????

*?空参构造 ?????

*/ ????

public?RegisterException()?{} ? ????

/** ?????

* ?????

*?@param?message?表示异常提示 ?????

*/ ????

public?RegisterException(String?message)?{ ????????

super(message); ????

}

}

java 负数异常_java基础之异常相关推荐

  1. java 捕获异常顺序_Java基础:异常捕获顺序

    public voidtestException(){ int a[] = {1,2,3};int q = 0; try{ for(int i=0;i }catch(ArithmeticExcepti ...

  2. java 数字运算异常_Java基础之:异常及异常处理

    Java基础之:异常及异常处理 我们将java程序执行过程中出现的不正常现象称为异常,例如:之前遇到的数组下标越界异常,空指针异常等等 执行过程中发生的异常事件分为两类: Error(错误):Java ...

  3. java 编写异常_Java基础编程之异常处理

    Java异常类是对于程序中可能出现的错误或者异常的一种处理方式.在设计程序的过程中,对于可能出现的异常错误,比如说用户输入错误,设备错误,磁盘满了或者代码错误等等,通常采用异常处理的方式来进行处理可能 ...

  4. java 抛出异常的作用_Java 基础之异常抛出

    Java 基础之异常抛出 Java,基础,异常抛出 在 Java 里,除了对异常的捕获外,你还可以抛出异常,还可以创造异常.抛出异常的作用就是告诉你的调用者,程序出现了不正常的情况了,得不要期望的结果 ...

  5. java 数据库 异常类型_Java基础 -- 常见异常

    1.常见异常 Exception 类是 Throwable 类的子类.除了Exception类外,Throwable还有一个子类Error . 异常类有两个主要子类:IOException和Runti ...

  6. java exception用法_Java基础回顾_Exception异常使用详解

    package 内部类异常包装器; public class 异常 { /** * 1.异常: * 有Error和Exception两个基本子类 * 2.Error: * Error表示恢复不是不可能 ...

  7. java lang runtimeexception什么意思_Java基础之异常

    1.异常结构 Java中异常的父类接口为Throwable,它的两个实现类为Error和Exception.根据Javac对异常的分类可以将异常划分为两类,如下所示: 不可检查异常:Error 和 R ...

  8. java的数据异常_java的各种异常

    展开全部 Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表 ...

  9. java常见检查异常_java中常见异常总汇,附解释

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

最新文章

  1. php数据库操作类的调用优化,PHP PDO优化数据库操作类 多数据库驱动类
  2. ES6学习笔记二 新的声明方式和变量的解构赋值!
  3. SharePoint2010人员搜索
  4. LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42
  5. 获取触发事件的元素的ID
  6. 如何在 Linux 中找到你的 公网IP 地址
  7. 设计模式系列 - 装饰器模式
  8. Visual Studio Qt vs tools 下载教程及加速教程
  9. 京瓷4501i打印机扫描步骤_「硬件」如何使用打印机扫描文件传送到电脑本地?...
  10. Ubuntu中扩大虚拟机硬盘容量
  11. oracle同义词不再有效,ORA-00980: 同义词转换不再有效
  12. 大学四年的总结与感受
  13. android编辑视频,android 视频剪辑(亲测可用)
  14. 语音助手——评测指标
  15. 手机抓包获取数据,ROOT权限获取,xian鱼,taobao
  16. 牛顿迭代法leetcode
  17. Dubbo-02 20190315
  18. 目标检测经典论文——R-CNN论文翻译:Rich feature hierarchies for accurate object detection and semantic segmentation
  19. Linux下c语言文本方式文件读取
  20. 零基础教师成功转型数据分析师,它功不可没

热门文章

  1. 使用$.post和action或servlet交互 URL出现 http://localhost:8080/../[object%20Object] 错误的问题解决
  2. fastclick.js解决移动端(ipad)点击事件反应慢问题
  3. 一个由于springboot自动配置所产生的问题的解决
  4. U盘安装CentOS7的最终解决方案
  5. 如何git-cherry-pick仅更改某些文件?
  6. 文件的属性 计算机知识,计算机基础知识文件的属性(二)
  7. Eclipse中导入maven项目 maven update project报“Cannot nest ‘xx/src/main/resources‘ inside ‘xx/src ……”
  8. SpringMCV整合配置文件
  9. Android:Day03_完美登录案例(使用流和文件来保存登录信息)
  10. 机器人SLAM建图地图类型讨论