java异常类深入研究_第1页
java异常类深入研究_第2页
java异常类深入研究_第3页
java异常类深入研究_第4页
java异常类深入研究_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 异常package cn.itcast_01;/* * 异常:程序出现了不正常的情况。 * * 举例:今天天气很好,班长出去旅游。骑着自行车,去山里面呼吸新鲜空气。 * 问题1:山路塌陷了,班长及时停住了,但是过不去了。严重的问题。 * 问题2:班长出门推自行车,发现气没了,把气吹起来。出发前就应该检查的问题。 * 问题3:班长骑着车在山路上惬意的行驶着,山路两边是有小石子的,中间是平坦的水泥路。 * 一直在平坦的水泥路上行驶是没有任何问题的,但是呢,他偏偏喜欢骑到小石子上,结果爆胎了。旅游的过程中出现的问题。 * no zuo no die。 * * 程序的异常:Throwable *

2、严重问题:Error 我们不处理。这种问题一般都是很严重的,比如说内存溢出。 * 问题:Exception * 编译期问题:不是RuntimeException的异常 必须进行处理的,因为你不处理,编译就不能通过。 * 运行期问题:RuntimeException这种问题我们也不处理,因为是你的问题,而且这个问题出现肯定是我们的代码不够严谨,需要修正代码的。 * * 如何程序出现了问题,我们没有做任何处理,最终jvm会做出默认的处理。 * 把异常的名称,原因及出现的问题等信息输出在控制台。 * 同时会结束程序。 */public class ExceptionDemo public stati

3、c void main(String args) /第一阶段int a = 10;/ int b = 2;int b = 0;System.out.println(a / b);/第二阶段System.out.println(over);ExceptionDemo.javapackage cn.itcast_02;/* * 我们自己如何处理异常呢? * A:try.catch.finally * B:throws 抛出 * * try.catch.finally的处理格式: * try * 可能出现问题的代码; * catch(异常名 变量) * 针对问题的处理; * finally * 释放

4、资源; * * * 变形格式: * try * 可能出现问题的代码; * catch(异常名 变量) * 针对问题的处理; * * * 注意: * A:try里面的代码越少越好 * B:catch里面必须有内容,哪怕是给出一个简单的提示 */public class ExceptionDemo public static void main(String args) / 第一阶段int a = 10;/ int b = 2;int b = 0;try System.out.println(a / b); catch (ArithmeticException ae) System.out.pri

5、ntln(除数不能为0);/ 第二阶段System.out.println(over);ExceptionDemo2.javapackage cn.itcast_02;/* * A:一个异常 * B:二个异常的处理 * a:每一个写一个try.catch * b:写一个try,多个catch * try * . * catch(异常类名 变量名) * . * * catch(异常类名 变量名) * . * * . * * 注意事项: * 1:能明确的尽量明确,不要用大的来处理。 * 2:平级关系的异常谁前谁后无所谓,如果出现了子父关系,父必须在后面。 * * 注意: * 一旦try里面出了问题

6、,就会在这里把问题给抛出去,然后和catch里面的问题进行匹配, * 一旦有匹配的,就执行catch里面的处理,然后结束了try.catch * 继续执行后面的语句。 */public class ExceptionDemo2 public static void main(String args) / method1();/ method2();/ method3();method4();public static void method4() int a = 10;int b = 0;int arr = 1, 2, 3 ;/ 爷爷在最后try System.out.println(a /

7、b);System.out.println(arr3);System.out.println(这里出现了一个异常,你不太清楚是谁,该怎么办呢?); catch (ArithmeticException e) System.out.println(除数不能为0); catch (ArrayIndexOutOfBoundsException e) System.out.println(你访问了不该的访问的索引); catch (Exception e) System.out.println(出问题了);/ 爷爷在前面是不可以的/ try / System.out.println(a / b);/

8、System.out.println(arr3);/ System.out.println(这里出现了一个异常,你不太清楚是谁,该怎么办呢?);/ catch (Exception e) / System.out.println(出问题了);/ catch (ArithmeticException e) / System.out.println(除数不能为0);/ catch (ArrayIndexOutOfBoundsException e) / System.out.println(你访问了不该的访问的索引);/ System.out.println(over);/ 两个异常的处理publ

9、ic static void method3() int a = 10;int b = 0;int arr = 1, 2, 3 ;try System.out.println(arr3);System.out.println(a / b);/ System.out.println(arr3); catch (ArithmeticException e) System.out.println(除数不能为0); catch (ArrayIndexOutOfBoundsException e) System.out.println(你访问了不该的访问的索引);System.out.println(o

10、ver);/ 两个异常public static void method2() int a = 10;int b = 0;try System.out.println(a / b); catch (ArithmeticException e) System.out.println(除数不能为0);int arr = 1, 2, 3 ;try System.out.println(arr3); catch (ArrayIndexOutOfBoundsException e) System.out.println(你访问了不该的访问的索引);System.out.println(over);/ 一

11、个异常public static void method1() / 第一阶段int a = 10;/ int b = 2;int b = 0;try System.out.println(a / b); catch (ArithmeticException ae) System.out.println(除数不能为0);/ 第二阶段System.out.println(over);ExceptionDemo3.javapackage cn.itcast_02;/* * JDK7出现了一个新的异常处理方案: * try * * catch(异常名1 | 异常名2 | . 变量 ) * . * *

12、* 注意:这个方法虽然简洁,但是也不够好。 * A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理) *B:多个异常间必须是平级关系。 */public class ExceptionDemo3 public static void main(String args) method();public static void method() int a = 10;int b = 0;int arr = 1, 2, 3 ;/ try / System.out.println(a / b);/ System.out.println(arr3);/ System.o

13、ut.println(这里出现了一个异常,你不太清楚是谁,该怎么办呢?);/ catch (ArithmeticException e) / System.out.println(除数不能为0);/ catch (ArrayIndexOutOfBoundsException e) / System.out.println(你访问了不该的访问的索引);/ catch (Exception e) / System.out.println(出问题了);/ / JDK7的处理方案try System.out.println(a / b);System.out.println(arr3); catch

14、(ArithmeticException | ArrayIndexOutOfBoundsException e) System.out.println(出问题了);System.out.println(over);4 编译时和运行时的异常package cn.itcast_03;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/* * 编译时异常和运行时异常的区别 * 编译期异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译 * 运行期异常:无需显示处

15、理,也可以和编译时异常一样处理 */public class ExceptionDemo public static void main(String args) / int a = 10;/ int b = 0;/ if (b != 0) / System.out.println(a / b);/ String s = 2014-11-20;/ SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd);/ Da

16、te d = sdf.parse(s);try Date d = sdf.parse(s);System.out.println(d); catch (ParseException e) / e.printStackTrace();System.out.println(解析日期出问题了);5 Try问题package cn.itcast_04;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/* * 在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个对

17、象抛出,和catch里面的类进行匹配。 * 如果该对象是某个类型的,就会执行该catch里面的处理信息。 * * 异常中要了解的几个方法: * public String getMessage():异常的消息字符串 * public String toString():返回异常的简单信息描述 * 此对象的类的 name(全路径名) * : (冒号和一个空格) * 调用此对象 getLocalizedMessage()方法的结果 (默认返回的是getMessage()的内容) * printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。把信息输出在

18、控制台。 */public class ExceptionDemo public static void main(String args) String s = 2014-11-20;SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);try Date d = sdf.parse(s); / 创建了一个ParseException对象,然后抛出去,和catch里面进行匹配System.out.println(d); catch (ParseException e) / ParseException e = new

19、ParseException();/ ParseException/ e.printStackTrace();/ getMessage()/ System.out.println(e.getMessage();/ Unparseable date: 2014-11-20/ toString()/ System.out.println(e.toString();/ java.text.ParseException: Unparseable date: 2014-11-20e.printStackTrace();/跳转到某个指定的页面(index.html)System.out.println(o

20、ver);6 解决出错问题package cn.itcast_05;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/* * 有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限去处理某个异常。 * 或者说,我处理不了,我就不处理了。 * 为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出。 * * 格式: * throws 异常类名 * 注意:这个格式必须跟在方法的括号后面。 * * 注意: * 尽量不要在main方法上抛出异常

21、。 * 但是我讲课为了方便我就这样做了。 * * 小结: * 编译期异常抛出,将来调用者必须处理。 * 运行期异常抛出,将来调用可以不用处理。 */public class ExceptionDemo public static void main(String args) System.out.println(今天天气很好);try method(); catch (ParseException e) e.printStackTrace();System.out.println(但是就是不该有雾霾);method2();/ 运行期异常的抛出public static void method2

22、() throws ArithmeticException int a = 10;int b = 0;System.out.println(a / b);/ 编译期异常的抛出/ 在方法声明上抛出,是为了告诉调用者,你注意了,我有问题。public static void method() throws ParseException String s = 2014-11-20;SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);Date d = sdf.parse(s);System.out.println(d);7

23、Throwpackage cn.itcast_06;/* * throw:如果出现了异常情况,我们可以把该异常抛出,这个时候的抛出的应该是异常的对象。 * * throws和throw的区别(面试题)throws用在方法声明后面,跟的是异常类名可以跟多个异常类名,用逗号隔开表示抛出异常,由该方法的调用者来处理throws表示出现异常的一种可能性,并不一定会发生这些异常throw用在方法体内,跟的是异常对象名只能抛出一个异常对象名表示抛出异常,由方法体内的语句处理throw则是抛出了异常,执行throw则一定抛出了某种异常 */public class ExceptionDemo public

24、static void main(String args) / method();try method2(); catch (Exception e) e.printStackTrace();public static void method() int a = 10;int b = 0;if (b = 0) throw new ArithmeticException(); else System.out.println(a / b);public static void method2() throws Exception int a = 10;int b = 0;if (b = 0) th

25、row new Exception(); else System.out.println(a / b);8 Finally类FinallyDemo.javapackage cn.itcast_07;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/* * finally:被finally控制的语句体一定会执行 * 注意:如果在执行到finally之前jvm退出了,就不能执行了。 * * A:格式 * try.catch.finally. * B:用于释放资源,在IO流

26、操作和数据库操作中会见到 */public class FinallyDemo public static void main(String args) String s = 2014-11-20;SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);Date d = null;try / System.out.println(10 / 0);d = sdf.parse(s); catch (ParseException e) e.printStackTrace();System.exit(0); finally Sy

27、stem.out.println(这里的代码是可以执行的);System.out.println(d);FinallyDemo2.javapackage cn.itcast_07;/* * 面试题: * 1:final,finally和finalize的区别 * final:最终的意思,可以修饰类,成员变量,成员方法 * 修饰类,类不能被继承 * 修饰变量,变量是常量 * 修饰方法,方法不能被重写 * finally:是异常处理的一部分,用于释放资源。 * 一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了 * finalize:是Object类的一个方法,用于垃圾回收

28、 * * 2:如果catch里面有return语句,请问finally里面的代码还会执行吗? * 如果会,请问是在return前,还是return后。 * 会。前。 * * 准确的说,应该是在中间。 * * 3:try.catch.finally的格式变形 * A:try.catch.finally * B:try.catch * C:try.catch.catch. * D:try.catch.catch.finally * E:try.finally * 这种做法的目前是为了释放资源。 */public class FinallyDemo2 public static void main(

29、String args) System.out.println(getInt();public static int getInt() int a = 10;try System.out.println(a / 0);a = 20; catch (ArithmeticException e) a = 30;return a;/* * return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。 * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40 * 再次回到以前的返回路径,继续走return 30; */ f

30、inally a = 40;return a;/如果这样结果就是40了。/ return a;8 自定义异常MyEXxception.javapackage cn.itcast_08;/* * java不可能对所有的情况都考虑到,所以,在实际的开发中,我们可能需要自己定义异常。 * 而我们自己随意的写一个类,是不能作为异常类来看的,要想你的类是一个异常类,就必须继承自Exception或者RuntimeException * * 两种方式: * A:继承Exception * B:继承RuntimeException */public class MyException extends Exception public MyException() public MyException(String message) super(message);/ public class MyException extends RuntimeException / StudentDemo.javapackage cn.itcast_08;import java.util.Scanner;/* * 自定义异常测试类 */public class StudentDemo public static void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论