Java语言程序设计 第五部分 Java异常处理.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第一單元 建立java 程式.
项目6 通用堆栈.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
Java程序设计教程 第一讲 Java概述.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
MVC Servlet与MVC设计模式.
程設一.
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
Ch07 介面與多重繼承 物件導向程式設計(II).
第三章 控制结构.
程設一.
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
API设计实例分析 通用IO API.
Java语言程序设计 清华大学出版社 第9章 网络通信.
例外處理(Exception Handling)
Java基础 JavaSE异常.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
2018/11/23 面向对象与多线程综合实验-数据库操作 教师:段鹏飞.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
第 14 章 例外處理.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
檔案讀寫與例外處理 (File IO and Exception Handling)
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
第一單元 建立java 程式.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
辅导课程八.
第二章Java基本程序设计.
第二章 Java基本语法 讲师:复凡.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第3章 JavaScript基本语句.
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

Java语言程序设计 第五部分 Java异常处理

Java异常处理 第一讲 异常处理概述

异常及其分类 软件的容错性 软件系统不仅自身不能有错误,还要具备较强的抗干扰能力。即使在用户操作出现错误,或遇到不可 抗拒的干扰时,软件系统也不能崩溃,而必须尽最大努力排除错误继续运行。只有这样的软件系统才会具有旺盛的生命力和广泛的应用空间。 异常 任何计算机语言的程序都难免有漏洞,捕获错误最理想的是在编译期间,然而,在实际的程序设计中,并非所有错误都能在编译期间侦测到。例如,下列情况在编译时通常检测不到:类文件丢失、想打开的文件不存在、网络连接中断、操作数超出预定范围等。这些在程序执行中,中断正常程序流程的异常条件称为错误或异常。

异常及其分类 错误(error) 异常( exception) 指程序运行时遇到的硬件或操作系统的错误,如内存溢出、虚拟机错误等。 错误对于程序而言是致命性的,错误将导致程序无法运行,而且程序本身不能处理错 只能依靠外界干预,否则会一直处于非正常状态。 异常( exception) 指在硬件和操作系统正常时,程序遇到的运行错,如整数进行除法运 算时除数为0,或操作数超出数据范围,或打开一个文件时发现文件不存在,或网络连接中断等。 异常对于程序而言是非致命性的,虽然异常会导致程序非正常终止,但Java的异常处理 机制使程序自身能够捕获和处理异常,由异常处理代码调整程序运行方向,使程序仍可继续运行。

异常处理机制 错误,程序不能处理 运行时异常,程序应避免而不捕获 其它异常,必须捕获 内存溢出、核溢出等错误,由系统进行处理, Java程序本身不能对错误进行处理。 运行时异常,程序应避免而不捕获 对于程序能够预见的异常,如除数为0、数组下标越界等,程序应该考虑周到进行事先 处理,尽量避免发生异常。例如,进行除法运算时,判断除数是否为0并给出解决办法,避免发生除数为0异常。 其它异常,必须捕获 由特殊环境错误造成的异常,如文件没找到、网络通信失败等, 必须进行捕获和处理,从而保证程序正常运行,保证程序的可靠性和安全性。

异常示例 public class HelloWorld{ public static void main(String args[]){ int i=0; String greeting []={ "Hello world !", "No,I mean it !", "HELLO WORD !!" }; while(i<4){ System.out.println(greeting[i]); i++; }

异常类的层次结构 Throwable Error Exception Object AWTException RuntimeException IOException ……

Java中的常用异常类 RuntimeException ArithmeticException:一个不寻常算术运算产生的异常。 ArrayIndexOutOfBoundsException:数组索引超出范围所产生的异常。 ClassCastExcption:类对象强迫转换造成不当类对象所产生的异常。 NumberFormatException:字符串转换数值所产生的异常。 IndexOutOfBoundsException:索引超出范围所产生的异常。 NegativeException:数组建立负值索引所产生的异常。 NullPointerException:对象引用参考值为null所产生的异常。

Java中的常用异常类 检查异常 也称为非运行时异常。Java编译器要求程序必须处理这种异常。 ClassNotFoundException:找不到类或接口所产生的异常。 IllegaAccessException:类定义不明确所产生的异常。 InterruptedException:目前线程等待执行,另一线程中断目前线程所产生的异常。 IOException:输入输出访问异常。

Java异常处理 第二讲 异常处理

Java异常的处理方法 为了写出健壮的Java程序,当程序出现异常时就应当进行处理,Java程序对异常处理有两种方式: 通过try{}catch(){}finally{}块处理异常。 把可能会发生异常的程序代码放在try区块中,那么当程序执行发生异常时,catch区块会捕捉这个异常,并且以区块内的程序代码来处理异常,而finally区块则负责处理一些必要的工作。 将异常抛给上一层调用它的方法,由上一层方法进行异常处理或继续向更上一层方法抛出该异常。

try/catch 异常处理的核心是try和catch。这两个关键字要一起使用,只有try而没有catch,或者只有catch而没有try 都是不可以的。下面是try/catch异常处理代码块的基本形式: try { 可能发生异常的代码块; } catch(异常类型 异常对象名)//捕获并处理异常 异常处理代码块;

try/catch try块 若一个方法产生了异常,该方法就会在异常产生过程中退出。可在那个方法内部设置一个特殊的代码块,用它捕获异常。 catch 生成的异常必须在某个地方中止。这个地方就是异常控制模块。而且针对想捕获的每种异常类型,都必须有一个相应的异常控制模块。异常控制模块紧接在try块后面,且用catch(捕获)关键字标记。如下所示: try { // Code that might generate exceptions } catch(Type1 id1) { // Handle exceptions of Type1 } catch(Type2 id2) { // Handle exceptions of Type2 } catch(Type3 id3) { // Handle exceptions of Type3 }

try/catch 异常处理过程 捕获所有的异常 当try描述的代码段遇到异常发生时,会抛出一个异常对象,该异常由相应的catch语句捕获并处理。与一个try相关的catch语句可以有多个,构成多重catch 语句,异常类型决定了要执行哪个catch语句。也就是说,如果由一个catch语句指定的异常类型与发生的异常类型相符,那么就会执行这个catch语句(其他的catch语句则被跳过)。如果catch语句执行完毕或者没有抛出异常,就会执行最后一个catch后面的第一个语句。 捕获所有的异常 catch(Exception e) { … …} 这段代码能捕获任何异常,所以在实际使用时将其置于控制模块列表的末尾。

public class Exam6_2{ public static void main(String [ ] args){ try{ device(Integer.parseInt(args[0])); }catch (ArithmeticException e){ System.out.println ("输入为零,产生异常,被catch捕获到"); } System.out.println ("输入不为零,没有产生异常!"); static int device(int i){ return 10/i;

try/catch finally关键字的使用 有时需要在catch处理异常后进行一些其他的操作,比如关闭一个已经打开了的文件,此时,可以在try/catch代码块的后面加上finally代码段来处理这种情况。try/catch/finally的基本形式如下所示: try{ 可能发生异常的代码块; } catch(异常类型 异常对象名){ 异常处理代码块; … finally{ 无论是否抛出异常都要执行的代码;

public class Exam6_4{ public static void main(String [ ] args){ try{ device(Integer.parseInt(args[0])); }catch (ArithmeticException e){ System.out.println ("输入为零,产生异常,被catch捕获到"); } finally{ System.out.println ("不论有没有产生异常,都会被执行的代码段!"); static int device(int i){ return 10/i;

抛出异常 一个异常对象可以由Java虚拟机抛出,也可以由程序主动抛出。程序运行过程中,当Java 发现一个运行错误时, Java抛出一个异常对象。如果程序中遇到有些逻辑问题但不是Java的 异常,程序也可以主动抛出一个异常对象。

抛出异常 Java提供给程序主动抛出异常的语句是throw,其语法格式如下: Throw 异常对象 其中, throw是关键字, 异常对象是程序创建的指定异常类对象。 由throw语句抛出的异常也必须由try语句捕获并处理 public void set(int age) { if (age>0 && age<100) this.age = age; else throw new Exception("IllegalAgeData"); }

public class FinallyWorks { static int count = 0; public static void main(String[] args) { while(true) { try { // post-increment is zero first time: if(count++ == 0) throw new Exception(); System.out.println("No exception"); } catch(Exception e) { System.out.println("Exception thrown"); } finally { System.out.println("in finally clause"); if(count == 2) break; // out of "while" }

抛出异常 如果一个方法的方法体将产生异常,而该方法体中不想处理或不能处理该异常,则可以 在方法声明时,采用throws子句声明该方法将抛出异常。 带有throws子句的方法声明格式如下: [修饰符]返回值类型方法([参数列表]) [throws 异常类] 其中, throws是关键字,异常类是方法要抛出的异常类,可以声明多个异常类,用逗号隔开。 throws子句不是一条独立的语句。 例如 public static int parseInt(String s) throws NumberFormatException

public class Exam6_6{ public static void main(String [ ] args){ try{ device(Integer.parseInt(args[0])); }catch (ArithmeticException e){ e.printStackTrace(); } static void device(int i) throws ArithmeticException{ if (i==0) throw new ArithmeticException("输入为零,请重新输入!"); else System.out.println ("10/"+i+"="+10/i);

方法覆盖中的异常 应用覆盖的规则 一致的声明(名称、参数) 不低于基类的存取权限 覆盖方法所抛出的异常不能比原方法多

Java异常处理 第三讲 自定义Java异常

自定义异常 为什么要创建异常 尽管Java的内置异常能够处理大多数常见错误,但有时还可能出现系统没有考虑到的异常,此时我们可以自己建立异常类型,来处理所遇到的特殊情况。 如何创建异常 只要定义Exception的一个子类就可以建立自己的异常类型。 自定义异常的基本形式如下 class 自定义异常 extends 父异常类名{ 类体; }

public class Exam6_7 extends Exception{ System.out.println ("输入为零,请重新输入!"); } class Test{ public static void main(String [ ] args) { try{ if (args[0].equals("0"){ throw new Exam6_7(); else{ System.out.println ("10/"+args[0] +"="+10/Integer.parseInt(args[0])); catch(Exception e){

class MyException extends Exception { public MyException() {} public MyException(String msg) { super(msg); } public class Inheriting { public static void f() throws MyException { System.out.println( "Throwing MyException from f()"); throw new MyException(); } public static void g() throws MyException { "Throwing MyException from g()"); throw new MyException("Originated in g()"); public static void main(String[] args) { try { f();} catch(MyException e) { e.printStackTrace(); try { g();} catch(MyException e) {

正确使用异常注意事项 由于异常使用起来非常方便,以至于在很多情况下可能会滥用异常。但是,使用异常处理会降低程序运行的速度,如果在程序中过多地使用异常处理,程序的执行速度会显著地降低。 在可以使用简单的测试就能完成的检查中,不要使用异常来代替它。例如: if (ins!=null) //使用ins引用对象 { … } 不要过细地使用异常。最好不要到处使用异常,更不要在循环体内使用异常处理, 可以将它包裹在循环体外面。

正确使用异常注意事项 不要捕获了一个异常而又不对它做任何的处理。如: 对于有些异常,将其交给方法的调用者去处理是一种更好的处理办法。 try { …… //正常执行的代码 } catch(Exception e) { } 对于有些异常,将其交给方法的调用者去处理是一种更好的处理办法。 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。 如果父类抛出多个异常,那么重写(覆盖)方法必须扔出那些异常的一个子集,也就是说不能扔出新的异常。

例题 设计两个异常类,当输入参数低于170时产生TooShortException异常,而当输入参数高于180时产生TooTallException异常。编写一个检查类,其中的某一个方法产生以上两种异常。测试此程序。