嵌入式之路,贵在日常点滴
---阿杰在线送代码
目录
所谓异常是指在程序运行的过程中发生的一些不正常事件。(如除0溢出,数组下标越界,所要读取的文件不存在)
JAVA程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将其被提交给Java运行时系统,这个过程称为抛出异常,不处理的话会直接导致程序直接中断。
设计良好的程序应该在程序异常发生时提供处理这些异常的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。
| 异常类型 | 包括 | 来源 | 处理 |
| 受查异常 checked Exception | Exception及其子类 (不包括RuntimeException及其子类) | 由代码控制能力之外的因素导致的运行时错误 | 必须要处理,否则通不过编译 |
| 非受查异常 unchecked Exception | Error和RuntimeException及其子类 | RuntimeException一般代表编程错误 | 可以不用处理 |

try-catch-finally
try:监控区域,执行可能产生异常的代码 (比如读文件、连接网络等等,可能会出现文件没有或者连接不上网络)
catch:捕获、处理异常
finally:善后处理,无论是否发生异常,代码总能执行。
- try{}语句块中放的是检测的java代码,可能会抛出异常,也可能会正常执行。
- catch(异常类型){} 块是当JAVA运行时系统接收到try块中所抛出异常对象时,会寻找能处理这一异常catch块来进行处理(可以有多个catch块)。
- finally{}不管系统有没有抛出异常都会去执行,一般用来释放资源。除了在之前执行了System.exit(0)
- import java.util.Scanner;
-
- class Person
- {
- String name;
- }
-
- public class Test {
- public static void main(String[] args) {
- Person p = null;
-
- int a = 10;
- int b = 0;
- int c = 0;
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入除数:");
- b = sc.nextInt();
-
- try{
- c = a/b;
- //p.name = "ajie";
- }catch(java.lang.NullPointerException e){
- System.out.println("空指针,检查下是否没有初始化类");
- }catch(java.lang.ArithmeticException e){
- System.out.println("你输入了0,请重新输入");
- b = sc.nextInt();
- c = a/b;
- System.out.println("c="+c);
- }
-
- //finally{//finally可以不要要,因为这不是固定搭配
- // System.out.println("end");
- //}
-
- System.out.println("c="+c);
- System.out.println("end");
- }
- }
运行结果:
请输入除数:
0
你输入了0,请重新输入
5
c=2
end
异常有很多,那么是不是catch(异常类型) 都需要记住呢,当然不用啦
- import java.util.Scanner;
-
- class Person
- {
- String name;
- }
-
- public class Test {
- public static void main(String[] args) {
- Person p = null;
-
- int a = 10;
- int b = 0;
- int c = 0;
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入除数:");
- b = sc.nextInt();
-
- try{
- c = a/b;
- //p.name = "ajie";
- }catch(Exception e){
- System.out.println("空指针,检查下是否没有初始化类");
-
- System.out.println("你输入了0,请重新输入");
- b = sc.nextInt();
- c = a/b;
- System.out.println("c="+c);
- }
-
- //finally{//finally可以不要要,因为这不是固定搭配
- // System.out.println("end");
- //}
- System.out.println("c="+c);
- System.out.println("end");
- }
- }
运行结果:
请输入除数:
0
空指针,检查下是否没有初始化类
你输入了0,请重新输入
5
c=2
c=2
end
throw
- class Bar
- {
- int age;
-
- public Bar(int age){
- this.age = age;
- }
- void check(){
- if(age < 18){
- throw new IllegalArgumentException("年龄太小");
- }
- }
- }
-
- public class Test {
- public static void main(String[] args) {
-
- Bar b = new Bar(15);
- try{
- b.check();
- }catch(IllegalArgumentException e){
- System.out.println(e.getMessage());//年龄太小
- e.printStackTrace();//抛出异常的数据显示出来java.lang.IllegalArgumen....
- }
- System.out.println("end");
- }
- }
运行结果:
年龄太小
java.lang.IllegalArgumentException: 年龄太小
at Bar.check(Test.java:10)
at Test.main(Test.java:20)
end
throws
- class Bar
- {
- int age;
-
- public Bar(int age){
- this.age = age;
- }
- void check()throws IllegalArgumentException{
- if(age < 18){
- throw new IllegalArgumentException("年龄太小");
- }
- }
- }
-
- public class Test {
- public static void main(String[] args) {
-
- Bar b = new Bar(15);
- try{
- b.check();
- }catch(IllegalArgumentException e){
- System.out.println(e.getMessage());//年龄太小
- e.printStackTrace();//抛出异常的数据显示出来java.lang.IllegalArgumen....
- }
- System.out.println("end");
- }
- }

RuntimeException,IOException,SQLException,ClassNotFoundException
JAVA提供的异常体系不可能预见所有希望加以报告的错误
- 自定义异常类必须从已有的异常类继承。
- 建立新的异常类型最简单的方法就是让编译器产生默认构造方法。
- 对异常来说,最重要的部分就是它的类名。
- 可以为异常类定义一个接受字符串参数的构造方法,字符参数描述异常信息。
- class Bar
- {
- int age;
-
- public Bar(int age){
- this.age = age;
- }
- void check()throws AgeLessThanEighteenException{
- if(age < 18){
- throw new AgeLessThanEighteenException("年龄太小");
- }
- }
- }
-
- class AgeLessThanEighteenException extends Exception
- {
- private String message;
- public AgeLessThanEighteenException(String message)
- {
- this.message = message;
- }
- }
-
- public class Test {
- public static void main(String[] args) {
-
- Bar b = new Bar(15);
- try{
- b.check();
- }catch(AgeLessThanEighteenException e){
- System.out.println(e.getMessage());//年龄太小
- e.printStackTrace();//抛出异常的数据显示出来java.lang.IllegalArgumen....
- }
- System.out.println("end");
- }
- }
运行结果:
null
AgeLessThanEighteenException
at Bar.check(Test.java:10)
at Test.main(Test.java:29)
end