文章目录
- 一、异常与异常分类
- 二、异常处理机制
- 1、try-catch处理
- 2、try-catch-finally处理
- 3、throws可能抛异常(少用)
- 4、throw抛出异常(少用)
- 三、自定义异常
一、异常与异常分类
1、错误(Error)
在编译时就报出了的叫做错误,比如语法错误、逻辑错误等,这属于代码的基本错误。
2、编译型异常(Exception)
编译型异常,是指在编译过程中就出现的异常信息。编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。编译器要求Java程序必须捕获或声明所有编译时异常。
对于这类异常,如果程序不处理,可能会带来意想不到的结果。比如:tan90°、除法中分母为0等。
3、运行时异常(untimeException)
一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常java.lang.RuntimeException
类及它的子类都是运行时异常。
对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。
常指代码一般能够编译通过,但在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,也就是所谓的运行时异常,
4、Java程序在执行过程中所发生的异常事件可分为两类
(1)Error: Java虚拟机无法解决的严重问题。 如: JVM系统内部错误、 资源耗尽等严重情况。比如: StackOverflowError和OOM。 一般不编写针对性的代码进行处理。
(2)Exception: 其它因编程错误或偶然的外在因素导致的一般性问题, 可以使用针对性的代码进行处理。
- 空指针访问
- 试图读取不存在的文件
- 网络连接中断
- 数组角标越界
4、注意
(1)在运行程序过程中遇到异常时,程序会被迫终止执行下去,直接抛出异常警告。
(2)程序员在编写程序时, 就应该考虑到错误的检测、 错误消息的提示, 以及错误的处理。
二、异常处理机制
1、try-catch处理
public class Test07_Whale extends Test07_Mammal{
public static void main(String[] args) {
try{
System.out.println(1/0);
}catch(Exception e){
e.printStackTrace();
System.out.println("程序执行出错了!");
}
System.out.println("--------------------------this is bottom-------------------------" );
}
}
2、try-catch-finally处理
不管有没出错,都会执行的代码段,常作为收尾工作的存放位置。
public class Test07_Whale extends Test07_Mammal{
public static void main(String[] args) {
try{
System.out.println(1/1);
}catch(Exception e){
e.printStackTrace();
System.out.println("程序执行出错了!");
}finally{
System.out.println("终究还是我来执行收尾工作……");
}
System.out.println("--------------------------this is bottom-------------------------" );
}
}
3、throws可能抛异常(少用)
在方法声明处加上throws Exception
即表示该方法可能会抛出异常;
public void read() throws Exception{
System.out.println(1/0);
System.out.println("上面的代码有异常!");
}
原则:产生的异常尽可能自己处理,少向外抛出,否则会越抛越远,越来越难处理。
4、throw抛出异常(少用)
若使用throw,则表示要向外抛出异常,抛出的只能是异常对象,需要new Exception();
public class Test07_Whale extends Test07_Mammal{
public static void cul(int a, int b) throws Exception{
if(b==0){
throw new Exception("小学没毕业么?分母不能为0!!!");
}else{
System.out.println("a/b= " + a/b);
}
}
public static void main(String[] args) {
try{
cul(22,1);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("--------------------------this is bottom-------------------------" );
}
}
三、自定义异常
1、简单说明
这是最自由的一种异常抛出和处理,可以用自己的方式类呈现出异常的表现形式,使用时需要写一个类,并且继承于Exception类。
原则:尽可能少自己定义异常,否则会给同事和团队的开发难度加大,给他们造成不必要困扰。
2、测试练习
class Test07_Mammal{
String name;
int age;
public Test07_Mammal(String name, int age){
this.name = name;
this.age = age;
}
}
class AdultException extends Exception{
public AdultException(String msg){
super(msg);
}
}
public class Test07_Whale{
public void how_old(Test07_Mammal tm) throws AdultException{
if(tm.age>=18){
System.out.println(tm.name + ",你已经是一只成年鲸鱼了,应该要独当一面了!");
}else{
throw new AdultException("抛出异常!" + tm.name + ",你还未成年,不可以独当一面。");
}
}
public static void main(String[] args) throws AdultException{
Test07_Mammal tm1 = new Test07_Mammal("白鲸", 19);
Test07_Mammal tm2 = new Test07_Mammal("蓝鲸", 15);
Test07_Whale tw1 = new Test07_Whale();
tw1.how_old(tm1);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)