javaAPI(异常)
来源:互联网 发布:java lamda表达式语法 编辑:程序博客网 时间:2024/05/16 14:00
- 异常:就是程序在运行时出现不正常的情况.
- 异常的由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式描述,并封装成对象.
- 其实就是java对不正常情况进行描述后的对象体现.
-
- 对于问题的划分:两种:一种严重的问题.一种非常严重的问题.
- 对于严重的,java通过Error类进行描述.
- 对于Error一般不编写针对性的代码对其进行处理.
- 对于非严重的,java通过Exception可以使用针对性的处理方式进行处理.
-
- 无论Error或者Exception都具有一些共性内容.
- 如:不正常情况的信息,引发原因等.
-
- Throwable
- |–Error
- |–Exception
-
- 2,异常的处理:
- java提供好了特有的语句进行处理.
-
- try
- {
- 需要被检测的代码;
- }
- catch
- {
- 处理异常的代码:(处理方式)
- }
- finally
- {
- 一定会执行的语句;
- }
-
- 3,对捕获到的异常对象进行常见的方法操作.
- String getMessage(); 获取异常的信息.
- 在函数上声明异常.
- 便于提高安全性,让调用者去处理.不处理则编译失败.
-
- 对多异常的处理:
- 1,声明异常时,建议声明更为具体的异常,这样处理更具体.
- 2,对方声明了几个异常,就因该有几个catch块.不要定义多余的catch块.
- 如果多个catch块的异常出现继承关系,父类异常catch块放在最下面.
-
- 建议在进行catch处理中,catch中一定要定义具体的处理方式.
- 不要简单定义一句 e.printStackTrace();
- 也不要简单的就书写一条输出语句. *
class Demo{ int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException //throws Exception:在功能上通过throws的关键字声明了该功能有可能会出现问题. { int[] arr = new int[a]; System.out.println(arr[4]); return a/b; }}public class ExceptionDemo { public static void main(String[] args)//throws Exception //throws Exception:抛出异常 { Demo d = new Demo(); try//捕捉异常 { int x = d.div(3,0); System.out.println("x="+x); } catch(ArithmeticException e)//Exception e = new Exception(); { System.out.println("除以零了,不能运算"); System.out.println("e.getMessate()");//异常信息 by zero System.out.println("e.toString()");//异常名称,异常信息 e.printStackTrace();//异常名称,异常信息,异常出现的位置. //其实jvm默认的异常处理机制,就是在调用printStacktrace()方法. //打印异常的堆栈的跟踪信息. } catch(ArrayIndexOutOfBoundsException e) { System.out.println(e.toString()); System.out.println("脚标越界了"); } System.out.println("over"); }}
- 因为项目中会出现特有的问题,
- 而这些问题并未被java所描述并封装对象.
- 所以对于这些特有的问题可以按照java的对问题封装的思想.
- 将特有的问题,进行自定义的异常封装.
-
- 自定义异常:
- 需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的.
- 那么我们就要自己定义异常.
-
- 当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作.
- 要么在内部try catch 处理.
- 要么在函数上声明让调用者处理.
-
- 一般情况在,函数内出现异常,函数上需要声明.
-
- 自定义异常信息:
- 因为父类中已经把异常信息的操作都完成了.
- 所以子类只要在构造时,将异常信息传递给父类通过super语句.
- 那么就可以直接通过getMessage()方法获取自定义的异常信息.
-
- 注意:自定义异常必须是自定义类继承Exception.
-
- 继承Exception原因:
- 异常体系有一个特点:因为异常和异常对象都被抛出.
- 它们都具备可抛性,这个可抛性是Throwable这个体系中的独有特点.
- 只有这个体系中的类和对象才可以被throws和throw操作
-
- throws和throw的区别:
- throws使用在函数上.
- throw使用在函数内.
- throws后面跟的是异常类,可以跟多个.用逗号隔开.
- throw后跟的是异常常对象.
-
- Exception中有一个特殊的子类异常RuntimeException:运行时异常.
- 如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过.
- 如果在函数内容上声明了该异常.调用者可以不用进行处理.编译一样通过.
-
- 之所以不用在函数声明,是因为不需要让调用者处理.
- 当该异常发生,希望程序停止.一维在运行时,出现了无法继续运算的情况,希望停止程序后,
- 对代码进行修正.
-
- 自定义异常时,如果该异常的发生,无法在继续进行运算.
- 就让自定义异常继承RuntimeException.
-
- 对于异常分两种:
- 1,编译时被检测的异常
- 2,编译时不被检测的异常(运行时异常,RuntimeException以及子类)
-
- finally代码块:
- 定义一定执行的代码.通常用于关闭资源.
- public void method()
- {
- try
- {
- 连接数据库;
- 操作数据库;//throw new SQLException();
-
- }
- catch(SQLException e)
- {
- 会对数据库进行异常处理;
- throw new NoException();
- }
- finally
- {
- 关闭数据库;
- }
- }
-
- catch是用于处理异常.如果没有catch就代表异常没有被处理过.
- 如果该异常是检测时异常,那么就必须声明.
-
- 异常在子父类覆盖的体现:
- 1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类.
- 2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集.
- 3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常.
- 如果子类方法发生了异常,就必须要进行try处理.绝对不能抛.
class FuShuException extends Exception//getMessage();{ private int value; FuShuException() { super(); } FuShuException(String msg,int value) { super(msg); this.value = value; } public int getValue() { return value; }}class Demo1{ int div1(int a,int b)throws FuShuException { if(b<0) throw new FuShuException("出现了除数是负数的情况--/by fushu",b); //手动通过throw关键字抛出一个自定义异常. return a/b; }}public class ExceptionDemo2{ public static void main(String[] args) { Demo1 d = new Demo1(); try { int x = d.div1(3,-9); System.out.println("x="+x); } catch(FuShuException e) { System.out.println(e.toString()); //System.out.println("除数是负数了"); System.out.println(e.getValue()); } }}
异常总结:
异常:是对问题的描述,将问题进行对象的封装.
异常体系:
Throwable |--Error |--Exception |--RuntimeException
异常体系中的特点:
异常体系中所有类以及建立的对象都具有可抛性.
也就是说可以被throw和throws关键字所操作.
只有异常体系具备这个特点.
throw和throws的用法:
throw定义在函数上,用于抛出异常对象.
throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开.
当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,否则编译失败.
注意:RuntimeException除外,也就是说,函数内如果抛出的是RuntimeException异常,函数上可以不用声明.
如果函数上声明了异常,调用者需要进行处理.处理方法可以throws可以try.
异常有两种:
编译时被检测异常,该异常在编译时,如果没有处理(没有抛也没有try),编译失败.
该异常被标识,代表着可以被处理.
运行时异常(编译时不检测),在编译时,不需要处理,编译器不检查.
该异常的发生,建议不处理,让程序停止,需要对代码进行修正.
finally中定义的通常是关闭资源代码,因为资源必须释放.
finally只有一种情况不会执行,当执行到System.txie(0);
自定义异常:
定义继承Exception或者RuntimeException
1,为了让该自定义具备可抛性.
2,让该类具备操作异常的共性方法.
当要自定义异常的信息时,可以使用父类已经定义好的功能.异常信息传递给父类的构造函数.
class MyException extends Exception { MyException(String message) { super(message); } }
自定义异常:按照java的面向对象的思想,将程序中出现的特有问题进行封装.
异常的好处:
1,将问题进行封装.
2,将正常流程代码和问题处理代码相分离,方便于阅读.
异常处理原则:
1,处理方式有两种:try或者throws.
2,调用到抛出异常的功能时,抛出几个就要处理几个.一个try对象多个catch.
3,多个catch,父类的catch要放到最下面.
4,catch内,需要定义针对性的处理方式,不要简单的定义printStackTrace,输出语句,也不要不写.
{ throw new AException(); } catch(AException e) { throw e; }
如果并不属于该功能出现的异常,可以将异常转换后,在抛出和该功能相关的异常.
或者调用者知道,并处理,也可以将捕获异常处理后,转换新的异常.
try { throw new AException(); } catch(AException e) { //对AException处理 throw new BException(); }
- javaAPI(异常)
- javaAPI(多线程)
- JavaAPI
- JavaAPI
- javaAPI:
- JavaAPI
- javaAPI
- JavaAPI
- JavaAPI
- JavaAPI
- javaAPI(String、StringBuffer、StringBuilder)
- 利用javaApI【eclipse】操作HBase时,出现异常的解决方案
- JAVAAPI(字符串与集合框架)
- 第十三天-JavaAPI(String类、StringBuffer)
- 黑马程序员学习日记--javaApI(一)
- 黑马程序员学习日记--javaAPI(二)
- HDFS学习笔记(2)hdfs_shell & JavaAPI
- javaAPI(Collection单列集合2)
- [LeetCode][Java] Partition List
- 抽奖转盘
- 开始新的篇章
- linux挂载iso镜像时报错的解决方法 mount: can't find cdrom in /etc /fstab or /etc/mtab
- Java中的大数处理类BigInteger和BigDecimar浅析
- javaAPI(异常)
- 四、数组
- 500 OOPS:cannot change directory:/root 问题的解决方法
- 在WPF中实现图片一边下载一边显示
- java用三种方法实现阶乘n!
- springmvc + jquery聊天室,逗比版
- JAVA_SE基础——17.方法的重载
- eclipse使用link方式安装android ADT插件
- Bitmap类getPixels()方法中参数stride理解