Java语言与其他编程语言的最大不同之处在于:java有专门的异常处理机制,实现对各类异常情况进行有效控制。

一、基本概念:异常和错误的区别与联系:

(1)、定义形式不同:异常为exception;错误为error

(2)、处境不同:异常主要是指哪些在程序中可能发生的,经过处理有可能回复正常的非正常事件,通过对事件的处理,实现程序的不中断运行,所以异常的问题一般是非致命的;而错误是指哪些在程序中可能发生的、非常严重且无法回复的非正常事件,这些错误一旦发生,java虚拟机通常会将线程终止或让系统退出运行,错误是程序的致命问题是无法补救的。

(3)、API的包归属不同:异常归属与exception包,错误归属于error,但是两者都属于Throwable类的范化。程序通常能够处理异常,而无法实现对错误的处理,程序设计者也不需要且不能捕获错误。

(4)、受检异常(Checked Exception)和非受检异常(Unchecked Exception),非受检异常是指可以发生的合理的异常,这种异常的出现无需要程序员捕获和处理,包括RuntimeException、Error及其子类。非受检异常通常通常反映了程序中的逻辑错误。这种异常可以通过修改代码逻辑,并且不需要程序捕获和处理。非受检异常主要有NullPointerException(空指针异常)和IndexOutOfBoundsException(数组下标越界异常)等。受检异常主要反映了程序运行条件不满足的问题,不能从运行中合理恢复,编译器会强制程序必须处理这种异常。除了RuntimeException和Error及其子类都属于受检异常,这种异常必须用户自行进行处理。受检异常必须显式进行捕获,一般不要自定义受检异常。

(5)、Exception和RuntimeException类的区别,Exception必须使用try…catch来处理。Error:主要是虚拟机错误,,常常会令虚拟机退出。而RuntimeException可以不使用try…catch处理,直接使用jvm(java virtual machine)(java虚拟机)来处理。自定义的异常通常继承Exception类即可。

二、异常的产生:主要有throws和throw关键字

(1)throws关键字主要用来表明方法抛出异常,形式为

public 返回类型 方法名称(参数列表) throws 异常类{

;

}

这种方式产生的异常主要是方法抛出异常后,由方法的调用者对异常进行捕获处理。

(2)throw语句抛出异常对象即可,形式为

throw 异常对象;

(3)自定义异常,形式为

public class 异常类名 extends Exception{

……

}

三、异常的处理:主要有try、catch和finally关键字,形式为:

(1)异常的捕获使用:

try{

包含有可能抛出异常的代码块

}catch(异常类型 异常对象)//可以有多个catch语句,对异常进行多次捕获

[finally{

无论是否发生异常一定会执行的代码;

}]

注意try、catch、finally代码块中的变量是相簿独立的,try块有且只能有一个,catch块可以有一个或多个,不能没有,finally语句块可以有零个或一个。

(2)二次抛出:

异常的产生和转交过程称为抛出异常,在catch语句中再次throw 异常对象

四、常见的异常

异常 描述 备注
ArithmeticException 算数异常类  
NegativeArrayException 数组负下标异常  
ArrayIndexOutOfBoundsException 数组下标越界异常  
EOFException 文件已结束异常  
FileNotFoundException 文件未找到异常  
IOException 输入输出异常  
NoSuchMethodException 方法未找到异常  
NullPointerException 控制针异常类  
NumberFormatException 字符串转换为数字异常  

五、代码演示:

(1)异常的捕获和处理

1publicclass CatchExceptionDemo{

2     publicstatic
void function(){

3         Object[] obj =new String[4];

4         for(int i =0; i < obj.length; i++){

5             try{

6                 if(i %2 ==
1){

7                     obj[i] =new Integer(i);//程序在这里会抛出数组变量类型不匹配的异常

8                 }else{

9                     obj[i] =new Integer(i) +
" ";

10                 }

11                 System.out.print(" " + obj[i] +"\n");

12             }catch(ArrayStoreException exp){//这里对异常进行选择性的捕获

13                 System.out.println("出现ArrayStoreException异常,数组内的元素类型与数组类型不匹配!");

14             }finally{

15                 System.out.println("这是程序无论如何都会执行的代码部分!");//这里的代码是无论如何都会执行的部分

16                 System.out.println();

17             }

18         }

19         System.out.println("function方法执行结束!");

20     }

21  

22     publicstatic
void main(String[] args){

23         function();

24         System.out.println("程序执行完成!");

25     }

26 }


编译执行的结果:
 0  

这是程序无论如何都会执行的代码部分!



出现ArrayStoreException异常,数组内的元素类型与数组类型不匹配!

这是程序无论如何都会执行的代码部分!



2  

这是程序无论如何都会执行的代码部分!



出现ArrayStoreException异常,数组内的元素类型与数组类型不匹配!

这是程序无论如何都会执行的代码部分!



function方法执行结束!

程序执行完成!



请按 ENTER 或其它命令继续

(2)自定义异常方法:
1publicclass ThrowsExceptionDemo{

2     publicvoid catchThrowException(String str)throws
NullPointerException, ArrayIndexOutOfBoundsException, Arithme

  ticException{

3         System.out.print(str +"");

4         switch(str){

5             case"除零异常":

6                 {

7                     int a =0;

8                     int b =6 / a;

9                 }

10                 break;

11             case"空指针异常":

12                 {

13                     String[] s =new String[5];

14                     s[0].toCharArray();

15                 }

16                 break;

17             case"数组下标越界异常":

18                 {

19                     String[] s =new String[5];
20                    s[5] ="c";

21                 }

22                 break;

23             default:

24                 System.out.println("方法运行一切正常!");

25         }

26     }    

27  

28     publicstatic
void main(String[] args){

29         ThrowsExceptionDemo te02 =new ThrowsExceptionDemo();

30         try{

31             te02.catchThrowException("无异常");

32         }catch(Exception exp){

33             System.out.println(": " + exp.getMessage());

34         }

35          

36         try{

37             te02.catchThrowException("除零异常");

38         }catch(Exception exp){

39             System.out.println(": " + exp.toString());

40         }

41          

42         try{

43             te02.catchThrowException("空指针异常");

44         }catch(Exception exp){

45             System.out.println(": " + exp);

46         }

47          

48         try{

49             te02.catchThrowException("数组下标越界异常");

50         }catch(Exception exp){

51             System.out.println("异常: " + exp);

52         }

53     }

54 }

运行结果:
无异常方法运行一切正常!

除零异常: java.lang.ArithmeticException: / by zero

空指针异常: java.lang.NullPointerException

数组下标越界异常异常: java.lang.ArrayIndexOutOfBoundsException: 5



请按 ENTER 或其它命令继续
上课代码:


//public class ExceptionDemo extends Exception{

public class ExceptionDemo extends Throwable{

    public static void main(String[] args) {

        int[] a = new int[4];

        for(int i = 0; i < a.length; i++){

            a[i] = i;

        }

        for(int i : a){

           try{

               if(i % 2 == 0){

                    throw new ExceptionDemo();

                }else{

                    System.out.println(i + "");

                }

           }catch(ExceptionDemo  | IndexOutOfBoundsException exp){

               System.out.println("数组下标越界");

           }finally{

               System.out.println("无论如何,本行代码均会执行");

           }           

        }

        }

    }   //public class ExceptionDemo extends Exception{

public class ExceptionDemo extends Throwable{

    public static void main(String[] args) {

        int[] a = new int[4];

        for(int i = 0; i < a.length; i++){

            a[i] = i;

        }

        for(int i : a){

           try{

               if(i % 2 == 0){

                    throw new ExceptionDemo();

                }else{

                    System.out.println(i + "");

                }

           }catch(ExceptionDemo  | IndexOutOfBoundsException exp){

               System.out.println("数组下标越界");

           }finally{

               System.out.println("无论如何,本行代码均会执行");

           }           

        }

        }

    }   //public class ExceptionDemo extends Exception{

public class ExceptionDemo extends Throwable{

    public static void main(String[] args) {

        int[] a = new int[4];

        for(int i = 0; i < a.length; i++){

            a[i] = i;

        }

        for(int i : a){

           try{

               if(i % 2 == 0){

                    throw new ExceptionDemo();

                }else{

                    System.out.println(i + "");

                }

           }catch(ExceptionDemo  | IndexOutOfBoundsException exp){

               System.out.println("数组下标越界");

           }finally{

               System.out.println("无论如何,本行代码均会执行");

           }           

        }

        }

    }   
 
 

public class Chapter092 {

/**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        //String str = null;

        try{

            functionException("数组越界");

           

        }catch(IndexOutOfBoundsException exp){

            System.out.println("数组下标异常捕获");

        }

        try{

            functionException("除数为零");

        }catch(ArithmeticException exp){

            System.out.println("除数为零异常捕获");

        }

        functionException("");

    }

    public static void functionException(String string) throws IndexOutOfBoundsException, ArithmeticException{

        //String str = null;

        switch(string){

            case "数组越界":

            {

                int[] a = new int[4];

                System.out.println("数组下标异常发生");

                a[4] = 5;

            }

            break;

            case "除数为零":

            {

                int a = 0;

                int b = 6;

                System.out.println("除数为零异常发生");

                int c = b / a;

            }

            break;

            default:

                System.out.println("程序没有异常!");

        }

    }

   

}

Android开发基础(java)14的更多相关文章

  1. 20155227 《Java程序设计》实验四 Android开发基础设计实验报告

    20155227 <Java程序设计>实验四 Android开发基础设计实验报告 任务一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二 ...

  2. 20155233 《Java程序设计》实验四 Android开发基础

    20155233 <Java程序设计>实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android组件.布 ...

  3. 20145213 《Java程序设计》实验四 Android开发基础

    20145213 <Java程序设计>实验四 Android开发基础 说在前面的话 不同以往实验,对于这次实验具体内容我是比较茫然的.因为点我,打开实验四的链接居然能飘出一股熟悉的味道,这 ...

  4. 20145225《Java程序设计》 实验四 Android开发基础

    20145225<Java程序设计> 实验四 Android开发基础 实验报告 实验内容 安装Android Studio 运行安卓AVD模拟器 使用安卓运行出虚拟手机并显示HelloWo ...

  5. 20155324 《Java程序设计》实验四 Android开发基础

    20155324 <Java程序设计>实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件. ...

  6. 20145221 《Java程序设计》实验报告四:Android开发基础

    20145221 <Java程序设计>实验报告四:Android开发基础 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管 ...

  7. 20155235 《Java程序设计》 实验四 Android开发基础

    20155235 <Java程序设计> 实验四 Android开发基础 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理 ...

  8. 20145219 《Java程序设计》实验四 Android开发基础设计实验报告

    20145219 <Java程序设计>实验四 Android开发基础设计实验报告 实验内容 安装Andriod Studio并配置软件 使用Andriod Studio软件实现Hello ...

  9. 2018-2019-2 20175105王鑫浩《Java程序设计》实验四 《Android开发基础》实验报告

    实验四 <Android开发基础> 实验报告封面 课程:Java程序设计 班级:1751班 姓名:王鑫浩 学号:20175105 指导教师:娄嘉鹏 实验日期:2019年5月17日 实验时间 ...

  10. 20165223 实验四 Android开发基础

    实验四 Android开发基础 目录 一.实验报告封面 二.具体实验内容 (一)Android Stuidio的安装测试 (二)Activity测试 (三)UI测试 (四)布局测试 (五)教材代码测试 ...

随机推荐

  1. mybatis的环境搭建

    mybatis是一个持久层框架,其主要思想就是想将程序中大量的SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置. 使得SQL与程序代码分离,即在不修改程序代码的情况下,直接在配置文件中修改S ...

  2. PHP 计算代码运行所占内存和时间

    PHP 计算代码运行所占内存和时间 在PHP开发过程中,写出高质量的代码是很重要的,除了代码必须规范之外,性能也是不可忽视的一方面,那么如果检验一段代码是否高效呢,可通过以下一段php代码来粗略检测 ...

  3. Nosql和RDBMS的比较及解释

    概述 传统的关系型数据库以及数据仓库在面对大数据的处理时显得越来越力不从心.因为关系数据库管理系统 (RDBMS)的设计从未考虑过能够处理日益增长且格式多变的数据,以及访问数据并进行分析的用户需求呈爆 ...

  4. Oracle 数据库密码过期问题

    (1)在CMD命令窗口中输入:           sqlplus 用户名/密码@数据库本地服务名 as sysdba;(如:sqlplus scott/1234@oracle1 as sysdba; ...

  5. C#小知识点积累

    1.sealed 修饰符 概念: C#提出了一个密封类(sealed class)的概念,帮助开发人员来解决这一问题. 密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承.如果试图 ...

  6. Go语言之反射(三)

    结构体转JSON JSON格式是一种用途广泛的对象文本格式.在Go语言中,结构体可以通过系统提供的json.Marshal()函数进行序列化.为了演示怎么样通过反射获取结构体成员以及各种值的过程,下面 ...

  7. MySQL基础2-创建表和主键约束

    1.创建表 在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行 主键约束(唯一标识) ****非空*** ****唯一*** ****被引用****(学习外 ...

  8. 随手正则写的 CSDN【只看楼主】功能

    写这个的时候居然没有看到原来CSDN已经有这个功能了,写完代码了突然发现原来早就已经有了. 现把代码贴出来吧,虽然有很多解析HTML的开源类库如:http://htmlagilitypack.code ...

  9. STL 里面的几个容器简叙

    出处:http://blog.csdn.net/niushuai666/article/details/6654951 list1.list的成员函数push_back()把一个对象放到一个list的 ...

  10. 聊聊、Java 命令 第三篇

    这篇随笔主要写启动 jar 时,如果需要依赖其他的 jar 包该怎么处理,我会以 rabbitMQ 客服端启动为例. package com.rockcode.www.rabbitmq; import ...