第11章 Java异常与异常处理
1.Java异常简介
1.什么是异常
异常出现的时候代码会无法正常运行下去,会产生各种问题
2.捕捉异常的作用
提早发现异常,方便查找问题,并给出解决方法
3.Java中的异常
1.Java中所有不正常的类都是继承与Throeable类,Throwable主要包括两个大类,一个是Error类,一个是Exception类
Error类主要包括虚拟机错误和线程死锁,一旦Error出现了,程序就彻底挂了,被称为程序终结者;
Exception类主要指编码、环境、用户操作输入出现问题,Exception主要包括两大类,运行时异常,也是非检查异常(RuntimeException)和检查异常(其他的一些异常)
RuntimeException异常主要包括以下四种异常:空指针异常,数组下标越界异常,类型转换异常,算术异常。
分析这四种异常
空指针异常:NullPointerException
String str = null;
System.out.println(str.length());
数组下标越界异常:ArrayIndexOutOfBoundsException
int[] ary = {1,2,3}
for (int i=0; i<=3; i++){
System.out.println(ary[i]);
}
类型转换异常:ClassCastException
class Animal{
}
calss Dog extends Animal{
}
calss Cat extends Animal{
}
public class Test{
public static void main(String[] args){
Animal a1 = new Dog();
Animal a2 = new Cat();
Dog d1 = (Dog) a1;
Dog d2 = (Dog) a2;
}
}
算术异常:ArithmeticException
int one=12;
int two=0;
System.out.println(one/two);
2.Java中使用rty……catch……finally实现异常处理
try-catch-finally的使用方法:
try{
//一些可能会抛出异常的方法
}catch(异常类型){
//处理该异常的代码快11
}catch(异常类型){
//处理该异常的代码快22
}catch(异常类型){
//处理该异常的代码快33
}finally{
//最终将要执行的一些代码
}
如果try中的代码发生异常,将发生以下行为:
1.程序终止执行
2.程序的控制权将被移交给catch块中的异常处理程序
关于catch块:
1.catch中具体执行什么操作根据需要写
2.可以有多个catch块,try抛出来的异常符合哪一个catch异常类型,就执行哪一个
3.多个catch块时,先定义小的,具体的,子类的,再定义大的,父类的。catch也遵守就近原则
关于finall:
1.是最终要执行的一些代码,即善后处理
3.案例
1.try-catch
public class TryCatchTest {
/**
* divide(除数)
* result(结果)
* 每次循环,divide减一,result=result+100/divider
* 如果:捕获异常,打印输出“抛出异常了!!!”,返回-1
* 否则:返回result
*/
public int test(){
int divider=10;
int result = 100;
try{
while(divider>-1){
divider--;
result=result+100/divider;
}
return result;
}catch (Exception e){
e.printStackTrace();//打印出异常
System.out.println("循环抛出异常了");
return -1;
}
}
public static void main(String[] args) {
TryCatchTest tct = new TryCatchTest();
int result = tct.test();
System.out.println("test()方法,执行完毕,返回的值是:"+result);
}
}
2.try-catch-finally
public class TryCatchTest {
/**
* divide(除数)
* result(结果)
* 每次循环,divide减一,result=result+100/divider
* 如果:捕获异常,打印输出“抛出异常了!!!”,返回999
* 否则:返回result
* fianlly:打印“这是finally输出!!”
*/
public int test2(){
int divider=10;
int result = 100;
try{
while(divider>-1){
divider--;
result=result+100/divider;
}
return result;
}catch (Exception e){
e.printStackTrace();//打印出异常
System.out.println("循环抛出异常了"); //此处的catch被捕获,并打印
return result=999; //返回result
}finally {
System.out.println("这是finally!!");//执行了finally
System.out.println("我是Result,我的值是:"+result);
}
}
public static void main(String[] args) {
TryCatchTest tct = new TryCatchTest();
int result2 = tct.test2();
System.out.println("我想大声告诉你,test()执行完毕,return="+result2);
}
}
…………
java.lang.ArithmeticException:(省略)
循环抛出异常了
这是finally!!
我是Result,我的值是:999
我想大声告诉你,test()执行完毕,return=999
4.Java中的异常抛出
4.1.throw和throws的使用
java中的异常处理有三种方式,第一种是系统自动抛出,就是我们上面讲的那些,第二种是针对语句使用的throw,第三种是针对方法使用的throws
第一种已经讲过了,看看第二种,throw的用法
throw是语句抛出一个异常
语法:
语法:throw (异常对象);
如:throw e;
一般用与程序出现某种逻辑时,程序员主动的抛出某种特定类型的异常
public static void main(String[] args) {
String s = "abc";
if(s.equals("abc")) {
throw new NumberFormatException();
} else {
System.out.println(s);
}
//function();
}
会抛出异常:NumberFormatException()
throws
throws是方法可能抛出的异常(用在申明方法时,表示该方法可能要抛出异常)
语法:
[修饰符] 返回值 方法名([参数列表]) [throws(异常类)]{
…………
}
当每个方法可能会抛出某种异常时用于throws声明可能抛出的异常,虽然异常抛出了,但是处理这个异常是在调用这个方法的时候处理
//throws抛出function()可能会产生的一个异常
public static void function() throws NumberFormatException{
String s = "abc";
System.out.println(Double.parseDouble(s));
} public static void main(String[] args) {
//调用了function()方法,则要处理这个方法抛出来的异常
try {
function();
} catch (NumberFormatException e) {
System.err.println("非数据类型不能转换。");
//e.printStackTrace();
}
}
4.2.throw和throws的比较
1.throws出现在方法函数头,而throw出现在函数体
2.throws表示出现异常的一种可能性,并不一定要发生这些异常,throw则是抛出了异常,执行throw则一定抛出某种异常
3.两者都是抛出异常,自己并不出理,都是由调用的它的地方来处理
5.Java中的异常总结
1.处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
2.在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
3.对于不确定的代码,也可以加上try-catch,处理潜在的异常
4.尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
5.具体如何处理异常,要根据不同的业务需求和异常类型去决定
6.尽量添加finally语句块去释放占用的资源
第11章 Java异常与异常处理的更多相关文章
- 程序员教程-11章-Java程序设计
自己是学java的,先看第十一章java吧. 列出章节目录,便于自己回忆内容. 11.1 Java语言概述 1 Java语言的特点 2 Java开发环境 11.2 Java语言基础 11.2.1 基本 ...
- java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类
package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...
- JAVA异常与异常处理详解
一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1.Java中的所有不正常类都 ...
- Java异常与异常处理简单使用
异常就是程序运行过程中阻止当前方法或作用域继续执行的问题: 任何程序都不能保证完全正常运行,当发生异常时,需要我们去处理异常,特别是一些比较重要的场景,异常处理的逻辑也会比较复杂,比如:给用户提示.保 ...
- 那些年,我们不懂的却又不得不提的 JAVA异常和异常处理!
---恢复内容开始--- 首先,我是个小小的菜鸟,最近突然突发奇想,想研究一下java的异常和异常的处理,稍有些理解,老鸟们莫要嘲笑... 既然要讲异常和异常的处理,我们就要先了解异常,那么,什么是异 ...
- Java异常及异常处理
如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法.在这种情况下会抛出一个封装了错误信息的对象.此时,这个方法会立刻退出同时不返回任何值.另外,调用这个方法的其他代码也无法继续执行, ...
- JAVA异常及其异常处理方式
异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...
- Java异常与异常处理
异常体系结构 1.所有异常都继承于Throwable类,其下有两大子类: (1)Error类:错误,一般编程人员不太接触,如虚拟机错误.线程死锁.硬伤:使程序崩溃 (2)Exception类:异常,编 ...
- JAVA异常与异常处理详解【转】
感谢!!!原文地址:https://www.cnblogs.com/knightsu/p/7114914.html 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在ja ...
随机推荐
- Java代码优化(长期更新)
前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸 ...
- 有问题得就分享(此实现不是 Windows 平台 FIPS 验证的加密算法的一部分)
今天呢,我写完了MD5加密算法的代码,可是我正高兴的想运行时,按了F5.突然了个这样的窗体 我当时就纳闷了,怎么回事? 代码又没有错,这是乍回事! 于是呢上网查了看看:可以这样解决的 在window中 ...
- 【再探backbone04】单页应用的基石-路由处理
前言 首先发一点牢骚,互联网公司变化就是快,我去一个团队往往就一年时间该团队就得解散,这不,公司居然把无线团队解散了,我只能说,我那个去!!! 我去年还到处让人来呢,一个兴兴向荣的团队说没就没了啊!我 ...
- 使用 Jquery-UI 实现一次拖拽多个选中的元素操作
项目需要,实现一个拖放操作,要求每次可以拖拽选中的多个元素,释放到目标容器后可排序.考虑了一下,觉得jquery-ui比较合适,毕竟它提供了项目需要的交互性事件机制.拖拽.释放.排序.选择等效果.而在 ...
- iOS 真机测试 App installation failed
真机测试的过程中,出现这种Bug This application's application-identifier entitlement does not match that of the in ...
- Android—实现自定义相机倒计时拍照
这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: 两个TextView是用来显示提示信息和倒计时的 ...
- 极光推送-适配 iOS10
//************************ iOS10 适配 **************************// //************************ 11/02/20 ...
- 【Swift 2.1】共享文件操作小结(iOS 8 +)
前言 适用于 iOS 8 + 本地共享文件列表 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs ...
- Android中asset和raw的区别
:assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片,html,js, css 等文件.
- 一个语句创建Oracle所有表的序列
-- 动态创建序列 declare cursor c_job is select TABLE_NAME from user_tables; c_row c_job%rowtype; v_sql ); ...