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异常与异常处理的更多相关文章

  1. 程序员教程-11章-Java程序设计

    自己是学java的,先看第十一章java吧. 列出章节目录,便于自己回忆内容. 11.1 Java语言概述 1 Java语言的特点 2 Java开发环境 11.2 Java语言基础 11.2.1 基本 ...

  2. java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类

    package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...

  3. JAVA异常与异常处理详解

    一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1.Java中的所有不正常类都 ...

  4. Java异常与异常处理简单使用

    异常就是程序运行过程中阻止当前方法或作用域继续执行的问题: 任何程序都不能保证完全正常运行,当发生异常时,需要我们去处理异常,特别是一些比较重要的场景,异常处理的逻辑也会比较复杂,比如:给用户提示.保 ...

  5. 那些年,我们不懂的却又不得不提的 JAVA异常和异常处理!

    ---恢复内容开始--- 首先,我是个小小的菜鸟,最近突然突发奇想,想研究一下java的异常和异常的处理,稍有些理解,老鸟们莫要嘲笑... 既然要讲异常和异常的处理,我们就要先了解异常,那么,什么是异 ...

  6. Java异常及异常处理

    如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法.在这种情况下会抛出一个封装了错误信息的对象.此时,这个方法会立刻退出同时不返回任何值.另外,调用这个方法的其他代码也无法继续执行, ...

  7. JAVA异常及其异常处理方式

    异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...

  8. Java异常与异常处理

    异常体系结构 1.所有异常都继承于Throwable类,其下有两大子类: (1)Error类:错误,一般编程人员不太接触,如虚拟机错误.线程死锁.硬伤:使程序崩溃 (2)Exception类:异常,编 ...

  9. JAVA异常与异常处理详解【转】

    感谢!!!原文地址:https://www.cnblogs.com/knightsu/p/7114914.html 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在ja ...

随机推荐

  1. 背水一战 Windows 10 (15) - 动画: 缓动动画

    [源码下载] 背水一战 Windows 10 (15) - 动画: 缓动动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 缓动动画 - easing 示例演示缓动(easing ...

  2. DDD心得

    使用DDD分层架构有哪些好处 帮你更集中的管理业务逻辑. 帮你降低各层间,以及各业务模块间的依赖关系. 帮你更方便的进行单元测试. 我的DDD分层架构使用经验 使用充血模型,将业务逻辑尽量放到领域实体 ...

  3. phpstorm 软件

    PhpStorm是一款强大的IDE,非常适合于PHP开发人员及前端工程师.提供诸于:智能HTML/CSS/JavaScript/PHP编辑.代码质量分析.版本控制集成(SVN.GIT).调试和测试等功 ...

  4. table tr foreach td 换行

    @{ ;} <table style=" class="sy_table"> <tr> @foreach (DataRow dr in (View ...

  5. 如何调用外部的Web API

    Uri uri = new Uri(url + "?" + postData); System.Net.HttpWebRequest request = (System.Net.H ...

  6. SharePoint 2013 文档库中PPT转换PDF

    通过使用 PowerPoint Automation Services,可以从 PowerPoint 二进制文件格式 (.ppt) 和 PowerPoint Open XML 文件格式 (.pptx) ...

  7. [Android]官网《monkeyrunner》中文翻译

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5050768.html 翻译自 Android Develope ...

  8. Objective-C 30分钟入门教程

    Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...

  9. RoboGuice 3.0 (一)入坑篇

    RoboGuice是什么? 一个Android上的依赖注入框架. 依赖注入是什么? 从字面理解,这个框架做了两件事情,第一是去除依赖,第二是注入依赖.简单理解就是,将对象的初始化委托给一个容器控制器, ...

  10. OC load与initialize

    OC load与initialize load 当类被引用进程序的时候会执行这个函数 一个类的load方法不用写明[super load],父类就会收到调用,并且在子类之前. Category的loa ...