黑马程序员------Java基础学习------异常处理
2015-03-31 16:59
417 查看
-------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
异常处理
异常的定义:异常是导致一个程序中断的指令流,一旦出现之后程序就将立即退出,观察以下产生异常的程序。
java中所以异常类都会直接或间接地继承自Exception
常见异常类型:
1. Exception类:Java中凡是继承自Exception而不是继承于RuntimeException的类都是非运行异常,对于非运行出现异常(checked exception),必须要对其进行异常处理
2. RuntimeException类:RuntimeException直接继承于Exception类,它叫运行时异常,java中运行时异常都间接或直接的继承于它,对于运行时出现异常,我们可以不对其进行处理,也可以对其进行处理。推荐不对其进行处理。
3. NullPointerException是空指针异常,出现该异常的原因在于某个引用为null,但你却调用了它的某个方法,这是就会出现该异常。
异常处理方式有两种:
第一种,是使用try…catch…finaly进行捕获;
第二种是在调用该会产生异常的方法所在的地方声明throws Excepyion;
异常的处理流程:
1. 每当一个异常产生之后,实际上都会自动生成一个异常类的实例化对象,如果此时编写了异常处理语句的话,则进行异常的处理,如果没有的话,则交给 JVM 进行处理。
2. 使用了 try 捕获异常之后,将自动与 catch 中的异常类型相匹配,如果匹配成功,则表示可以使用此 catch处理异常,如果都没有匹配成功的,则不能处理。
3. 程序中不管是否出现了异常,如果存在了 finally 语句,都要执行此语句的代码。
1. 捕获异常
异常处理的出口, 一定会被执行 。
}
注意:如果一个 try 语句之中同时有多个 catch 的话一定要记住的是,捕获范围小的异常要放在捕获范围大的异常之前,一般在开发中为了简单起见,大部分的异常都直接使用 Exception 接收即可。
例:
2. 抛出异常
throw和throws有什么区别?
1. throw 用于抛出异常对象,后面跟的是异常对象;throw用在函数内,人为的抛出一个异常对象
2. throws 用于抛出异常类型,后面跟的异常类名,可以跟多个,用逗号隔开;主要是用在函数的声明上,表示方法不处理异常,而是交给被调用处进行处理。
注:throws 关键字不光可以在普通的方法上使用,主方法上也可以使,如果在主方法上使用的话就表示一旦出现了异常之后,继续向上抛,表示由 JVM 进行处理了。
自定义异常类
所谓自定义异常类,通常就是定义一个继承自Eception类的子类,通常我们都会直接继承自Eception类,一般不会继承某个运行时的异常类。
1. 抛出异常
捕获异常
总结:
Exception 和 Error的子类名大都是以父类名作为后缀。
Java异常其实是对不正常情况的一种描述,并将其封装成对象。
Java在设计异常体系时,将容易出现的异常情况都封装成了对象。
在java处理多异常时捕获小范围的异常必须放在大范围异常之前。
finally代码块只在一种情况下不执行:System.exit(0)。
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
异常处理
异常的定义:异常是导致一个程序中断的指令流,一旦出现之后程序就将立即退出,观察以下产生异常的程序。
java中所以异常类都会直接或间接地继承自Exception
常见异常类型:
1. Exception类:Java中凡是继承自Exception而不是继承于RuntimeException的类都是非运行异常,对于非运行出现异常(checked exception),必须要对其进行异常处理
2. RuntimeException类:RuntimeException直接继承于Exception类,它叫运行时异常,java中运行时异常都间接或直接的继承于它,对于运行时出现异常,我们可以不对其进行处理,也可以对其进行处理。推荐不对其进行处理。
3. NullPointerException是空指针异常,出现该异常的原因在于某个引用为null,但你却调用了它的某个方法,这是就会出现该异常。
异常处理方式有两种:
第一种,是使用try…catch…finaly进行捕获;
第二种是在调用该会产生异常的方法所在的地方声明throws Excepyion;
异常的处理流程:
1. 每当一个异常产生之后,实际上都会自动生成一个异常类的实例化对象,如果此时编写了异常处理语句的话,则进行异常的处理,如果没有的话,则交给 JVM 进行处理。
2. 使用了 try 捕获异常之后,将自动与 catch 中的异常类型相匹配,如果匹配成功,则表示可以使用此 catch处理异常,如果都没有匹配成功的,则不能处理。
3. 程序中不管是否出现了异常,如果存在了 finally 语句,都要执行此语句的代码。
1. 捕获异常
try { 可能出现异常的语句; } catch(异常类型异常对象) { 处理异常; } catch(异常类型异常对象) { 处理异常; } ...... // 不管try后面多少个catch,最终只会有一个catch被执行 finally {
</pre><pre name="code" class="java">}
异常处理的出口, 一定会被执行 。
}
注意:如果一个 try 语句之中同时有多个 catch 的话一定要记住的是,捕获范围小的异常要放在捕获范围大的异常之前,一般在开发中为了简单起见,大部分的异常都直接使用 Exception 接收即可。
例:
public class ExceptionDemo { public static void main(String args[]) { int x = 10; int y = 0; try { System.out.println("计算结果:" + (x / y)); } catch (ArithmeticException e) { System.out.println("出现了异常:" + e); } finally { System.out.println("不管是否有异常,都执行此语句!"); } } }
2. 抛出异常
class ExpDemo { public void div() throws Exception { return i / j ; } } public class ExceptionDemo{ public static void main(String[] args) throws Exception { System.out.println(new ExpDemo ().div(10,0)); }
throw和throws有什么区别?
1. throw 用于抛出异常对象,后面跟的是异常对象;throw用在函数内,人为的抛出一个异常对象
public class ExpDemo { public static void main(String args[]) { try{ throw new Exception("自己抛") ; }catch(Exception e){ e.printStackTrace() ; } } }
2. throws 用于抛出异常类型,后面跟的异常类名,可以跟多个,用逗号隔开;主要是用在函数的声明上,表示方法不处理异常,而是交给被调用处进行处理。
注:throws 关键字不光可以在普通的方法上使用,主方法上也可以使,如果在主方法上使用的话就表示一旦出现了异常之后,继续向上抛,表示由 JVM 进行处理了。
class ExpDemo { public int div(int i,int j) throws Exception{ return i / j ; } } public class ExceptionDemo{ public static void main(String[] args) throws Exception { System.out.println(new ExpDemo ().div(10,0)); }
自定义异常类
所谓自定义异常类,通常就是定义一个继承自Eception类的子类,通常我们都会直接继承自Eception类,一般不会继承某个运行时的异常类。
1. 抛出异常
class MyException extends Exception { public MyException() { super(); } public MyException(String message) { super(message); } } class Exception1 { public void method(String str) throws MyException { if (str == null) { throw new MyException("传入的字符串不能为null"); } else { System.out.println(str); } } } public class practice { public static void main(String[] args) throws MyException{ Exception1 e1 = new Exception1(); e1.method(null); } }
捕获异常
class MyException extends Exception { public MyException() { super(); } public MyException(String message) { super(message); } } class Exception1 { public void method(String str) throws MyException { if (str == null) { throw new MyException("传入的字符串不能为null"); } else { System.out.println(str); } } } public class practice { public static void main(String[] args) { Exception1 e1 = new Exception1(); try{ e1.method(null); } catch(MyException e){ e.printStackTrace(); } finally{ System.out.println("处理完毕"); } } }
总结:
Exception 和 Error的子类名大都是以父类名作为后缀。
Java异常其实是对不正常情况的一种描述,并将其封装成对象。
Java在设计异常体系时,将容易出现的异常情况都封装成了对象。
在java处理多异常时捕获小范围的异常必须放在大范围异常之前。
finally代码块只在一种情况下不执行:System.exit(0)。
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
相关文章推荐
- 黑马程序员Java基础加强9-16学习日记
- 黑马程序员-------学习日记Java基础 第一天
- 黑马程序员--Java基础学习--String类剖析
- 黑马程序员_毕向东_Java基础视频教程第十八天-IO流---学习笔记
- 黑马程序员--Java基础加强(高新技术)学习第二天
- 黑马程序员Java基础加强17-24学习日记
- 黑马程序员--Java基础学习第十三天
- 黑马程序员--Java基础学习第四天
- 黑马程序员第一节java基础学习
- 黑马程序员Java基础加强41-48学习日记
- 黑马程序员-------学习日记Java基础 第五天
- 黑马程序员-------学习日记Java基础 第三天
- 黑马程序员--Java基础学习第十四天
- 黑马程序员Java培训、Android培训-Java 学习过程记录_语言基础3
- 黑马程序员Java基础加强49-56学习日记
- 黑马程序员_java基础学习2
- 黑马程序员-------学习日记Java基础 第四天
- 黑马程序员--Java基础加强(高新技术)学习第三天
- 黑马程序员Java培训、Android培训_Java 学习过程记录_语言基础2
- 黑马程序员--Java基础学习第十一天