- 浏览: 319309 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
opalescent_:
学习了。。
java笔试题的整理和解答扩展(String专题) -
yixiao258964:
谢谢,找了好久Reverse Enginee,都说在datab ...
PowerDesigner Reverse Engineer from database-mysql -
javaAlpha:
介绍的真全啊
Java编程那些事儿86——文件操作之File类使用
Java编程那些事儿82——异常处理语法1
陈跃峰
出自:http://blog.csdn.net/mailbomb
10.3 异常处理语法
为了方便程序员进行异常的处理,在Java语言中创建了一套语法,这些语法主要分为以下几个部分:
1、抛出异常
当程序运行时,如果发现异常的情况,通过生成对应的异常对象,并将该异常对象传递给Java的运行时系统,使得系统中包含该异常信息,这样的过程被称作抛出异常。
抛出异常是整个异常处理机制的起点,也是异常的发源地,一般出现在项目底层的代码中。
2、声明异常
当一个方法在执行时,除了能够完成正常的功能以外,还可以出现一些异常情况,为了提醒调用该方法的程序员注意处理这些异常情况,需要在方法的声明中将这些异常声明出来,这就是声明异常。
声明异常的语法使得异常处理更加容易进行实现。
3、捕获异常及异常处理
当异常被抛出以后,如果不进行处理,则异常会在方法调用过程中一直进行传递,直到最后一个方法,在J2SE中也就是main方法,最终将显示在控制台。
在实际项目中,当异常被抛出以后,需要首先捕获到该异常,按照异常的种类不同,分别进行处理。
4、声明自定义异常类
虽然在JDK API中提供了几百个异常类,但是这些异常所代表的还只是常见的异常情况,在实际使用时还是无法代表所有的异常情况,所以Java语言运行声明自定义的异常类,使用这些自定义的异常类来代表实际项目中JDK API无法代表的异常情况。
下面依次详细介绍一下这些语法的相关规则。
10.3.1 抛出异常
在书写项目中相关的底层基础代码时,相关的方法除了实现应该实现的功能以外,还需要考虑到各种异常情况,如果出现该代码所在的方法无法处理的异常情况时,则应该在该方法内部抛出对应类型的异常时,使得整个方法的逻辑比较严谨。
例如,下面是一个实现将十进制数字转换为二进制或8进制字符串的方法:
/**
* 将自然数转换为二进制或八进制字符串
* @param value 需要转换的自然数
* @param radix 基数,只能取2或8
* @return 转换后的字符串
*/
public static String toString(int value,int radix){
if(value == 0){
return "0";
}
StringBuffer s = new StringBuffer();
int temp; //余数
while(value != 0){ //未转换结束
temp = value % radix; //取余数
s.insert(0,temp); //添加到字符串缓冲区
value /= radix; //去掉余数
}
return s.toString();
}
在该方法中使用除n取余的方法,将参数value转换为对应的字符串,当在main方法中以书写如下代码时:
System.out.println(toString(12,2));
则程序的运行结果是:
1100
这样在正常的情况下,程序获得了正确的结果,但是该方法由于逻辑的限制,只能实现将“自然数”转换为“二进制或八进制”字符串,如果在其它程序员误传入非法的参数时,则程序会获得不正常的结果,例如书写如下调用的代码时:
System.out.println(toString(12,16));
则程序的运行结果是:
12
这个结果在转换的逻辑上就是错误的。这样就因为其它程序员误传入非法参数而出现了错误的结果。如果该方法作为实际项目的一个逻辑存在,则会由于该方法的问题导致后续其它的功能也发生错误,这是每个程序员都不希望看到的。
所以该方法虽然在功能上达到了要求,但是逻辑还是不严谨的,还需要在其它程序员调用该方法时传入非法参数这样的异常情况时,将这种异常报告出来,这就需要抛出异常的的代码了。
抛出异常的语法格式为:
throw 异常对象;
例如:
throw new NullPointerException();
或
IllegalArgumentException e = new IllegalArgumentException();
throw e;
该代码书写在方法或构造方法的内部。该语法中,使用throw关键字,后续为代表对应异常情况的异常类类型的对象。当系统执行到该代码时,将中止当前方法的执行,而直接返回到调用该方法的位置。所以在该代码下面不能直接书写其它的代码,因为这些代码将永远无法执行到。例如:
throw new NullPointerException();
int n = 10; //语法错误,该代码无法到达
按照该语法,则上面的转换方法改造以后的代码如下:
/**
* 将自然数转换为二进制或八进制字符串
* @param value 需要转换的自然数
* @param radix 基数,只能取2或8
* @return 转换后的字符串
*/
public static String toString(int value,int radix){
//判断异常的代码
if(value <0){
throw new IllegalArgumentException("需要转换的数字不是自然数!");
}
if(radix != 2 && radix != 8){
throw new IllegalArgumentException("进制参数非法");
}
if(value == 0){
return "0";
}
StringBuffer s = new StringBuffer();
int temp; //余数
while(value != 0){ //未转换结束
temp = value % radix; //取余数
s.insert(0,temp); //添加到字符串缓冲区
value /= radix; //去掉余数
}
return s.toString();
}
这里,当value的值小于0时,则抛出非法参数异常,当radix的值不是2或8时,则抛出非法参数异常。
这样在执行如下代码:
System.out.println(toString(12,2));
System.out.println(toString(12,16));
则程序的执行结果是:
1100
Exception in thread "main" java.lang.IllegalArgumentException: 进制参数非法
at ThrowException.toString(ThrowException.java:22)
at ThrowException.main(ThrowException.java:7)
这里当参数符合要求时,则输出正确结果1100,如果参数不合法,则抛出异常,由于异常没有得到处理,则将终止程序的执行,则控制台输出异常的信息,并显示异常的类型以及异常出现的位置。
这样,就通过抛出异常的语法,使得该方法的逻辑比较严谨,在方法的参数不合法,即出现异常情况时,将这个异常报告出来,使得该方法不会出现错误的结果。
另外,抛出的异常将传递给运行时系统,这样就将这种异常的情况传递出来,提醒其它的结构进行处理。
10.3.2 声明异常
异常虽然被抛出了,但是由于抛出异常的代码是在方法或构造方法的内部的,在调用方法或构造方法时一般是无法看到方法或构造方法的源代码的,这样调用的程序员就无法知道该方法或构造方法将出现怎样的异常情况,所以需要有一种语法,可以使得调用的程序员可以看到被调用的结构可能出现的异常情况,这就是声明异常的语法。
声明异常的语法类似于药品上的副作用说明,在患者服用药品时,知道药品的正常功能,但是无法详细了解药品的成分以及每种成分的含量(类似于源代码),但是在药品的说明上都有副作用的说明,例如过敏者不能服用等,这些和声明异常的语法在功能上是类似。
声明异常的语法格式为:
throws 异常类名
例如:
public static void test(int n) throws IllegalArgumentException,IOException
public Test()throws IllegalArgumentException
该语法使用在方法和构造方法的声明以后,在throws关键字以后,书写该方法或构造方法可能出现的异常,在这里需要书写异常类的类名,如果有多个,则使用逗号分隔这些异常类名即可。
这里需要注意的是:
1、这些异常必须是该方法内部可能抛出的异常
2、异常类名之间没有顺序
3、属于RuntimeException子类的异常可以不书写在throws语句以后,但是另外一类异常如果可能抛出则必须声明在throws语句之后
通过在对应的方法或构造方法声明中书写throws语句,使得调用该方法或构造方法的程序员可以在调用时看到对应结构可能出现的异常情况,从而提示对于这些异常情况进行处理,从而增强程序的健壮性。
而且即使在程序由于未处理对应的异常而导致程序在运行时出现错误时,也可以使程序员可以通过对应的提示获得错误的原因,并指导程序员进行逻辑的修正,这样都可以提高程序编写时的效率,也可以使程序员更加容易的编写出逻辑严谨的代码,从而增加项目的质量,提高程序的稳定性。
但是声明异常以后,异常还是存在的,异常还没有获得处理,在异常体系中最重要的还是捕获到异常,然后针对异常的类型不同作出对应的处理。
发表评论
-
Java编程那些事儿37—for语句语法
2008-06-17 11:53 752Java编程那些事儿37—for语句语法 郑州游戏学院 陈跃 ... -
Java编程那些事儿38—break和continue语句
2008-06-18 15:01 789Java编程那些事儿38—break和continue语句 ... -
Java编程那些事儿39—流程控制综合示例1
2008-06-19 12:30 803Java编程那些事儿39—流程控制综合示例1 郑州游戏学院陈 ... -
Java编程那些事儿40—流程控制综合示例2
2008-06-19 20:23 902Java编程那些事儿40—流程控制综合示例2 郑州游戏学院陈 ... -
Java编程那些事儿41—流程控制综合示例3
2008-06-20 18:06 709<meta http-equiv="Conte ... -
Java编程那些事儿42—流程控制综合练习
2008-06-20 22:13 817Java编程那些事儿42—流程控制综合练习 郑州游戏学院 陈 ... -
Java编程那些事儿57—面向对象基础
2008-07-28 14:15 784Java编程那些事儿57—面向对象基础 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿58—类(一)
2008-07-29 11:05 726Java编程那些事儿58—类(一) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿59——类(二)
2008-08-04 23:36 711Java编程那些事儿59——类(二) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿60——对象
2008-08-18 23:49 643Java编程那些事儿60—— ... -
Java编程那些事儿61—面向对象设计方法和面向对象特性(一)
2008-08-29 21:42 767Java编程那些事儿61—面向对象设计方法 郑州游戏学院 陈 ... -
Java编程那些事儿62——继承(二)
2008-09-08 12:11 831Java编程那些事儿62——继承(二) 郑州游戏学院 ... -
Java编程那些事儿63—多态性
2008-09-27 10:31 760Java编程那些事儿63—多态性 郑州游戏学院 陈跃峰 出 ... -
Java编程那些事儿64——访问控制符、修饰符和其它关键字
2008-10-14 14:12 809<meta http-equiv="Conte ... -
Java编程那些事儿65——static修饰符
2008-10-23 15:46 836Java编程那些事儿65——static修饰符 郑州游戏学院 ... -
Java编程那些事儿66——final修饰符
2008-11-11 17:19 743Java编程那些事儿66——f ... -
Java编程那些事儿67——this和super
2008-11-12 12:25 977Java编程那些事儿67——this和super 陈跃峰 ... -
Java编程那些事儿68——抽象类和接口(一)
2008-12-22 11:31 765Java编程那些事儿68—— ... -
Java编程那些事儿69——抽象类和接口(二)
2008-12-27 16:25 990Java编程那些事儿69——抽象类和接口(二) 陈跃峰 ... -
Java编程那些事儿70——抽象类和接口(三)
2009-01-05 14:20 1200Java编程那些事儿70—— ...
相关推荐
1. **操作灵活性**:Java的语法简洁且易于理解,它允许程序员以更少的代码实现复杂的逻辑,降低了编程的复杂性,提高了开发效率。 2. **可移植性**:Java遵循“一次编写,到处运行”的原则,由于其跨平台的特性,...
《Java编程那些事儿》是陈跃峰先生撰写的一部关于Java编程的完整教程,共包含了110个章节,深入浅出地讲述了Java语言的核心概念和技术。这部教程以chm(Compiled HTML Help)格式呈现,是一种常见的电子书格式,便于...
《Java编程那些事儿》是陈跃峰先生的一本关于Java编程技术的著作,该书深入浅出地介绍了Java编程中的重要概念和实践技巧。这里我们主要聚焦于压缩包中的部分内容,涉及Java集合框架、时间日期处理、文件操作、多线程...
在本项目中,"学习JAVA编程,完成作业——编一个控制台梭哈游戏.zip",开发者采用Java语言创建了一个基于控制台的梭哈(Poker)游戏。这是一款非常适合初学者进行实践和学习的项目,它涵盖了Java编程基础、面向对象...
这份"java语法大全"文档,结合了“java语法”,“java编程基础”,以及“java入门”等核心主题,旨在为初学者提供全面的学习资源,帮助他们理解和掌握Java语言的基本概念和高级特性。 首先,Java语法是学习Java的...
1. **JAVA基础**:这部分包括JAVA语法的基础知识,如数据类型(基本类型与引用类型)、变量、运算符、流程控制(条件语句、循环语句)、方法的定义和调用等。此外,还会涉及类和对象的概念,这是面向对象编程的核心...
Java语言包含标识符、关键字、运算符和分隔符等元素。这些元素有着不同的语法含义和组成规则,它们互相配合,共同组成Java的语句。
接着深入探讨了Java的进阶特性,如面向对象编程(类、对象、封装、继承、多态)、异常处理机制、集合框架(Collection和Map接口及其常用实现类)。通过两个实用案例——学生成绩管理系统和文件处理应用,展示了Java...
最后讨论了异常处理的重要方法——try-catch 结构和 finally 块的应用以及 Java 7 引入的改进型 try-with-resources 语法,特别强调了这些结构在提高程序稳定性方面的优势。 适用人群:具备一定的 Java 编程基础,...
1. **基础语法**:Java的基础语法是学习任何编程语言的起点。这包括变量声明、数据类型(如整型、浮点型、字符型和布尔型)、运算符(算术、比较、逻辑等)、流程控制(如if语句、switch语句、for循环、while循环)...
异常处理:阐述Java的异常处理机制,包括try-catch-finally语句、自定义异常等。 集合框架:详细介绍Java的集合框架,包括List、Set、Map等接口及其实现类。 I/O流:讲解Java的输入输出流,包括文件操作...
第1章 Java环境及配置 第2章 Java基本语法 第3章 类和接口 第4章 Java Applet 第5章 Java图形处理 第6章 Java用户界面技术 第7章 异常、事件和多线程机制 第8章 输入输出技术 第9章 Java数据库技术 第10章 ...
这份“Java JDK 6学习笔记——ppt简体版”涵盖了Java语言的核心概念、语法特性以及JDK 6的新功能,旨在帮助初学者和有经验的开发者深入理解并掌握这一版本的Java开发环境。 首先,Java JDK 6的安装与配置是学习的...
Java基础语法 面向对象编程 Java集合框架 异常处理与调试 Java多线程编程 Java网络编程 Java数据库连接(JDBC) Java标准类库 Java虚拟机(JVM)原理 Java泛型与反射 Java注解与元数据 Java高级特性:Lambda表达式 ...
Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份笔记以PPT的形式呈现,使得学习过程更加直观易懂,适合课堂教学或自我学习。...
### Java自学之路——超详细含练习项目及源码 #### Java知识体系最强总结 本篇文章旨在根据提供的文件信息,深入解读Java自学之路的关键知识点,并针对其中提到的学习资源进行详细的解析,帮助初学者更好地掌握...
1. Java基础:包括语法、面向对象编程、异常处理等。 2. GUI编程:使用Swing或JavaFX创建用户界面。 3. 数据库管理:理解SQL语言,能进行基本的数据库设计和操作。 4. 网络编程:了解Socket或RMI原理,实现客户端和...
【标题】"HNU编程新技术实务实验一——Java语言编程"揭示了这是一份与Java编程相关的学习资源,特别关注于湖南大学(HNU)的编程新技术实务课程中的实验项目。这个实验可能涵盖基础到进阶的Java编程概念,旨在帮助...