Java异常总结
来源:互联网 发布:私有域名解析软件 编辑:程序博客网 时间:2024/05/21 10:38
1.异常分类
(1)运行时异常(checked exception):继承自java.lang. RuntimeException类
常见5种:
ClassCastException(类型转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
还有IO操作的BufferOverflowException异常
(2)非运行时异常(unchecked exception):继承自java.lang.Exception类
常见:
Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException
2.两种异常的区别:
Checked异常必须被显式地捕获或者传递,而unchecked异常则可以不必捕获或抛出。
Checked异常继承java.lang.Exception类。Unchecked异常继承自java.lang.RuntimeException类。
3. throw,throws,try-catch的联系
(1)throw:自己手动抛出异常。或者说此处一定会出异常。
比如年龄是负的,我们需要自己手动引发异常,这就是throw的作用。
注意:
如果方法fun1()内throw抛出的是非运行时异常,则该方法必须用throws抛出,否则编译不会通过。假如fun2()调用fun1(),要将fun1()放在fun2()的try中或者fun2继续throws,否则也编译不通过。
例如:
public void fun1(int m) throws Exception{ int age=m; if (age<0) { throw new Exception(); }}
public void fun2() { try { fun1(-1); } catch (Exception e) { System.out.println("年龄不能为负"); }}
如果方法fun1()内throw抛出的是运行时异常,fun1既不用throws,fun2也不用try,编译也会通过。例如:
public void fun1(int m){ int age=m; if (age<0) { throw new IndexOutOfBoundsException(); }}//这样编译没问题,但运行会崩溃public void fun2() { fun1(-1); }//这样运行,不会崩溃,因为做了处理public void fun3() {try { fun1(-1); } catch (Exception e) { System.out.println("出异常了~");} }
因为运行时异常产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。
(3)throws:用在方法声明后,表示方法可能会抛出异常。
如果一个方法会有异常,但你并不想处理这个异常,就在方法名后面用throws,这样这个异常就会抛出,谁调用了这个方法谁就要try- catch处理这个异常,或者继续throws抛出。
总之,用throws抛出非运行时异常的方法,调用它的方法必须try-catch或者继续throws。throws抛出的是运行时异常,既不用throws,也不用try-catch。
例如:
public class CheckedExceptionMethods { // 总异常类,既有checkedException又有RuntimeException,所以其中的checkedException必须处理 public void method1() throws Exception { System.out.println("我是抛出异常总类的方法"); } // 捕获并处理这个异常 public void testMethod1_01() { try { method1(); } catch (Exception e) { e.printStackTrace(); } } // 把异常传递下去,继续抛出 public void testMethod1_02() throws Exception { method1(); } }
(4)try{}catch(想要处理的异常种类){}
如果觉得方法内可能会产生异常,可以自己进行处理,调用者就不用再try-catch,例如:public void fun1() { int[] a={1,2,3}; try { System.out.println(a[3]); } catch (Exception e) { System.out.println("数组越界了~"); } }public void fun2() {fun1();}也可以偷懒不做处理,让调用者处理,例如:public static void fun1() throws Exception{ int[] a={1,2,3}; System.out.println(a[3]); }public void fun2() { try { fun1(); } catch (Exception e) { System.out.println("数组越界了~"); } }
- Java语法总结 - 异常
- Java异常处理总结
- Java异常处理总结
- Java异常总结
- Java异常处理总结
- Java异常处理总结
- java 异常处理总结
- Java异常处理总结
- java异常的总结
- Java 异常总结
- Java异常类总结
- JAVA异常题目总结
- Java异常 总结
- Java异常类总结
- Java异常处理总结
- java异常处理总结
- Java常见异常总结
- java异常总结(转)
- 企业项目中js方法的封装和使用
- 原来Github上的README.md文件这么有意思——Markdown语言详解
- ElasticSearch scan和scroll功能 python 实现
- C++操作符重载
- 在MVC项目中设置启动页
- Java异常总结
- [Unity&缺少引用]NavMeshAgent缺少引用
- 像大牛一样写代码: 31个Android 开发者工具
- 【Swift】UITabBarViewController 自定义小红点
- 极光推送JPush --- 简单使用
- 一个登录 的例子
- 函数重载、重写(覆盖)和重定义(隐藏)
- 15 linux驱动模块的参数
- linux 解压 .gz 格式文件出错解决办法