Android开发基础(java)14
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)异常的捕获和处理
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 }
这是程序无论如何都会执行的代码部分!
出现ArrayStoreException异常,数组内的元素类型与数组类型不匹配!
这是程序无论如何都会执行的代码部分!
2
这是程序无论如何都会执行的代码部分!
出现ArrayStoreException异常,数组内的元素类型与数组类型不匹配!
这是程序无论如何都会执行的代码部分!
function方法执行结束!
程序执行完成!
请按 ENTER 或其它命令继续
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];
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的更多相关文章
- 20155227 《Java程序设计》实验四 Android开发基础设计实验报告
20155227 <Java程序设计>实验四 Android开发基础设计实验报告 任务一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二 ...
- 20155233 《Java程序设计》实验四 Android开发基础
20155233 <Java程序设计>实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android组件.布 ...
- 20145213 《Java程序设计》实验四 Android开发基础
20145213 <Java程序设计>实验四 Android开发基础 说在前面的话 不同以往实验,对于这次实验具体内容我是比较茫然的.因为点我,打开实验四的链接居然能飘出一股熟悉的味道,这 ...
- 20145225《Java程序设计》 实验四 Android开发基础
20145225<Java程序设计> 实验四 Android开发基础 实验报告 实验内容 安装Android Studio 运行安卓AVD模拟器 使用安卓运行出虚拟手机并显示HelloWo ...
- 20155324 《Java程序设计》实验四 Android开发基础
20155324 <Java程序设计>实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件. ...
- 20145221 《Java程序设计》实验报告四:Android开发基础
20145221 <Java程序设计>实验报告四:Android开发基础 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管 ...
- 20155235 《Java程序设计》 实验四 Android开发基础
20155235 <Java程序设计> 实验四 Android开发基础 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理 ...
- 20145219 《Java程序设计》实验四 Android开发基础设计实验报告
20145219 <Java程序设计>实验四 Android开发基础设计实验报告 实验内容 安装Andriod Studio并配置软件 使用Andriod Studio软件实现Hello ...
- 2018-2019-2 20175105王鑫浩《Java程序设计》实验四 《Android开发基础》实验报告
实验四 <Android开发基础> 实验报告封面 课程:Java程序设计 班级:1751班 姓名:王鑫浩 学号:20175105 指导教师:娄嘉鹏 实验日期:2019年5月17日 实验时间 ...
- 20165223 实验四 Android开发基础
实验四 Android开发基础 目录 一.实验报告封面 二.具体实验内容 (一)Android Stuidio的安装测试 (二)Activity测试 (三)UI测试 (四)布局测试 (五)教材代码测试 ...
随机推荐
- JAVA解析XML有哪几种方法?并简述各自的优缺点
DOM: 是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.是基于信息层次的 优点有:由于树在内存中是持久的,因此可以修改它以 ...
- C++构造函数使用的多种方法
// classes and uniform initialization #include <iostream> using namespace std; class Circle { ...
- 【Isamaru, Hound of Honda】SVN常用命令补遗
一些常用的 就是svn commit的时候 都必须是最新版本的东西 不能不是,但是其实只是.svn在控制,所以可以update到最新版本再svn merge -r 20:10 将版本10和20的融合, ...
- 策略模式—Java实现(转)
1. 现实需求 客户有了新的需求,这时我们直接新增策略即可,改很少的代码.基本符合我们面向对象原则中的开闭原则(对扩展开放,对修改关系),实现了高内聚低耦合. 2. 策略模式定义 策略模式,又叫算法簇 ...
- 3、python中的字符串
一.前言 字符串是python中重要的数据类型.字符串就是一段文本,在python中用引号来标示. 二.字符串分类 字符串根据使用场景不同,一共分成3类: (1)单引号.双引号创建的单行字符串: 在单 ...
- 最近使用Nginx的一点新得
1.基本的负载配置 Nginx最简单的配置模块如下 upstream name{ server ip:port; server ip:port; } server { listen 80; serve ...
- jvm探秘之三:GC初步
GC即垃圾收集器,虚拟机的必要组成部分. 不过这里说当然是,hotspot虚拟机(jvm的主要版本)的GC机制,前面说过了jvm的组成部分,那么想当然GC只需要负责方法区和堆就好了,虚拟机栈.本地方法 ...
- 【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)
本文来自网易云社区 作者:孙娇 严选iOS客户端的现有打包方式是通过远程连接打包机执行脚本去打包,打完包会输出相应的ipa的二维码,扫一扫二维码可以安装,但是随着测试队伍的壮大,外包同学越来越多,在打 ...
- 设计模式之第5章-解释器模式(Java实现)
设计模式之第5章-解释器模式(Java实现) “开个商店好麻烦,做个收单的系统,发现类的方法好多.”“真是的,不就是简单的四则运算,这都不会!”你说你会啊.来来来,你把以下的方法用代码写出来: a+b ...
- jmeter连接数据库之增删改查
配置jdbc: 查询sql配置: 插入sql配置: 修改sql配置: 删除sql配置: