【黑马程序员】Java基础04:你至少应该掌握5个异常...
来源:互联网 发布:刷svip永久软件 编辑:程序博客网 时间:2024/05/21 13:09
一、引子:你至少应该掌握5个异常!
有一道面试题,请说出至少5个异常类,常见异常如下:
IOException:IO流异常
RuntimeException:运行时异常
ClassNotFoundException:没有找到指定的类异常
ClassCastException:类型转换异常
IndexOutOfBoundsException:角标越界异常
InterruptedException:中断时异常
UnknownHostException:未知主机异常
二、异常的概念与体系
Exception(异常):就是程序在运行时出现不正常情况。
由于问题也是现实生活中一个具体的事物,也可以通过Java类的形式进行描述,把问题封装成对象。
异常体系:Throwable
|--------Error:严重的问题,一般不编写针对性的代码对其进行处理;
|--------Exception:可以使用针对性的处理方式进行处理;
三、对异常的处理
1、声明抛出异常
throws:
用在函数上,是用来声明一个方法可能抛出的所有异常信息,声明处的异常类可以跟多个,用逗号隔开;
如:public void method()throwsIOException{...}
throws在方法声明时抛出异常,使程序通过编译,但是要在调用方法时使用try-catch捕获异常;
throw:
用在函数内,用于抛出一个异常类对象,如:throw newRuntimeException(),或者抛出自定义的异常类对象,throw new MyException()
在方法体内部抛出异常时, 要与throws或者try-catch语句块结合使用,否则程序无法通过编译;
注意:
当程序出现异常时,程序不会向下执行,JVM会将异常封装成相应的异常类的对象,然后向外抛出;
对于一个方法的返回值,正常运行时,要求方法必须返回定义的类型,如果不是,运行会出现异常,返回的是异常对象;
抛弃过程中可以对异常类型进行扩展,但是不能缩小。
2、try...catch... finally 处理
示例代码:
try{
需要被检测的代码
}catch(异常类变量){
处理异常的代码
}finally{
一定会被执行的语句
}
注意:
部分情况下,如果没有一定要执行的语句,可以只用try...catch二个模块,finally可以省略;
程序会在return前执行finally里的程序,如果System.exit(0)在finally之前,则不会执行finally里的程序;
一个try语句后可以跟多个catch语句;catch时子类异常放上面,父类异常放下面;
如果抛出的异常不进行try...catch处理,调用时也不处理,而是继续抛出,直到抛出到JVM。
3、自定义异常类型
因为项目中会出现特有的问题,而这些问题并未被Java所描述并封装对象,所以可按Java对问题封装的思想,将这些特有问题进行自定义的异常封装。
package blog.itheima;//自定义算术异常class ArithmeticException extends Exception {private int value;ArithmeticException(){super();}ArithmeticException(String msg, int value) {super(msg);this.value = value;}int getValue(){return value;}}class Demo {int div( int a, int b) throws ArithmeticException {if(b<=0)throw new ArithmeticException("被除以负数或0了,错误",b);return a/b;}}class ExceptionTest {public static void main(String[] args){Demo d = new Demo();try{int x = d.div(4,5);System.out.println("x="+x);}catch (ArithmeticException e){System.out.println(e.toString());System.out.println("错误的数是:"+e.getValue());}}}
四、异常在子父类覆盖中的体现
1、子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类的异常或者该异常的子类;
2、如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集;
3、如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常;如果子类方法发生了异常,就必须要进行try...catch处理,绝对不能抛。
- 【黑马程序员】Java基础04:你至少应该掌握5个异常...
- 黑马程序员-java基础 异常
- 黑马程序员JAVA基础-异常
- 黑马程序员--Java基础--异常
- 黑马程序员-->Java基础-->异常
- 黑马程序员--java基础--异常
- 黑马程序员--------------java基础----------------异常
- 黑马程序员 Java基础 异常
- 黑马程序员-----Java基础-----异常
- Java程序员应该掌握
- php程序员应该掌握的10个技能,看看你都掌握了哪些?
- php程序员应该掌握的10个技能,看看你都掌握了哪些?
- php程序员应该掌握的10个技能,看看你都掌握了哪些
- 黑马程序员--Java基础--java中的异常
- 黑马程序员---java基础---06异常
- 黑马程序员 Java基础<四>---> 异常
- 黑马程序员---java基础之异常(Exception)
- 黑马程序员:Java基础总结----异常
- Winform 验证输入TextBox身份证号是否有效
- mysql file sort
- 降低Cache失效率--编译器优化
- 二分搜索算法
- Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener
- 【黑马程序员】Java基础04:你至少应该掌握5个异常...
- Intent flag
- spring使用注解注入HibernateTemplate的sessionFactory异常
- VBscript 中调用wshShell.run 来执行批处理命令 type I love you on a notepad
- 解析ASP.NET Mvc开发之EF延迟加载
- Android 高仿QQ 界面滑动效果
- c语言的一处陷阱:
- 设计模式初探-适配器模式
- Linux Trace Toolkit