ad

《JAVA服务端研发知识图谱》_让你更懂Java后台研发_1.8 异常

admin 119 2023-10-25

【摘要】 本书摘自《JAVA服务端研发知识图谱》一书中第1章,第8节,由何为、迟文恒 编著。

1.8 异常

对于使用 Java 编写的程序,编译器在编译的时候会进行语法检查等工作。但是有一些程序 中存在的问题是编译阶段无法识别的,例如用Java 实现了一个计算器,当用户输入除数为0的 情况下,怎么办?这就是异常处理存在的原因。这些错误会导致程序无法继续进行,而异常处 理就是处理这些错误的。

1.8.1 运行时异常

运行时异常是程序在执行过程中出现错误的调用而抛出的异常,这种异常都可以在编写时 避免,而编译器也不要求对可能抛出运行时异常的代码段强制加上try 语句。下面看几种常见的 运行时异常。

《JAVA服务端研发知识图谱》_让你更懂Java后台研发_1.8 异常

public class JavaRuntimeException {

public static void testDivisor(){

inti=6/0;

}

public static void main(String[] args){

testDivisor();

}

运行结果如下:

Exception in thread"main"java.lang.ArithmeticException:/ by zero

at com.javadevmap.exception.JavaRuntimeException.testDivisor(JavaRuntimeException java:5) at com.javadevmap.exception.JavaRuntimeException.main(JavaRuntimeException.java:9)

用一个整数除以0在算术上是明显错误的,但是这个问题编译器目前是不会报错的,只会 在执行时抛出一个异常,异常包含错误的类型和代码的位置,可以很容易地找到出问题的地方 并且优化。下面用异常捕获来处理这段代码。

运行结果如下:

divisor can not be 0

例子中用 try/catch 进行了代码运行和异常捕获, try 语句块的意思是执行代码, catch 语句块 的意思是对 try中的代码异常进行处理。当然这里只作为演示,实际项目中一般还是先用 if语 句 判断除数是否为0,为0则直接进行提示或者其他的处理,而不用异常捕获来进行处理,这样就 避免了运行时异常。

下面代码演示空引用异常:

public static void testNullPoint(){

Person person =null;

System.out.printin(person.id);

运行结果如下:

Exception in thread "main"java.lang.NullPointerException

at comjavadevmap.exception.JavaRuntimeException.testNullPoint(JavaRuntimeException.java:17) at com.javadevmap.exception.JavaRuntimeException.main(JavaRuntimeException.java:22)

这种空异常的避免办法一般也是在调用前对不确定是否已经初始化的对象进行非空判断, 从而避免这种异常。

下面代码演示常见的List异常。

public static void testArrayRemove(){

List list =new ArrayList>0;

list.add("one");

list.add("two")

list.add("three")

int index=0

for(String string:list){

System.out printin(string);

index++

if(index=1){

list.remove(index)

这种情况,在for 循环遍历过程中移除List元素是非常危险的,如何避免请参看1.6节。Java的 这种运行时异常有很多种,例如数组越界异常、类型转换异常等。异常的处理不是背出来的,在实 际的代码中去解决异常才是最快的学习方法,本书附带的代码中包含了其他异常的几种情况,读者 可以尝试模拟、处理和避免运行时异常。

1.8.2 检查性异常

运行时异常基本都可以避免,只要代码足够严谨就不会出现运行时异常。所以真正的代码 中要处理的是检查性异常。这就涉及异常的抛出和捕获,在抛出异常的地方使用throw 关键字抛 出;在抛出异常的方法后面添加 “throws 异常类名”。异常捕获的地方使用 try-catch-finally。 下 面看一个读取文件的例子。

public static String readFile(){

boolean bool = true;

StringBuilder builder = new StringBuilder();

try {

FileReader fReader = new FileReader("d:\test.txt");

char[] cs = new char[10];

while (fReaderread(cs)!=- 1){

builderappend(cs);

cs =new char[10]

}

fReader.close()

}catch(Exceptione){

bool=false;

e.printStackTrace();

}finally {

if(bool){

System.out.println("read file ok!");

}else {

System.out printin("read file fail!");

builder.replace(0, builder.length(),"fail");

}

return builder.toStringO

public static void main(String[] args){

System.out.println(readFile());

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:打开《Python入门与实战》_一步步学会Python_3.4 基本数据类型
下一篇:《给所有人的Python》_第四版_也是给你的一本知识宝典_3.4 if 语句的应用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×