1.Java中的异常分为两大类:
a) Checked exception (非 Runtime Exception)
b) Unchecked exception(Runtime Exception)
2.Java中所有的异常类都会直接或间接地继承自Exception,RuntimeException类也是直接继承自Exception类,它叫做运行时异常,Java中所有的运行时异常都会直接或间接地继承自RuntimeException,Java中凡是继承自Exception而不是继承RuntimeException的类都是非运行时异常。
3.异常处理的一般结构是:
try
{
}
catch(Exception e)
{
}
finally
{
}
无论程序是否出现异常,finally块中的代码都是会被执行的。
4.对于非运行时异常(checked exception),必须要对其进行处理,处理方式有两种:第一种是使用try.. catch…finally进行捕获;第二种是在调用该会产生异常的方法所在的方法声明throws Exception
举例1:ExceptionTest.java
package com.shengsiyuan.exception;
public class ExceptionTest
{
public static void main(String[] args)
{
int c = 0;
try
{
int a = 3;
int b = 0;
c = a / b;
System.out.println("hello world");
}
catch(ArithmeticException e)
{
e.printStackTrace();
}
finally
{
System.out.println("welcome");
}
System.out.println(c);
}
}
举例2:ExceptionTest2.java
package com.shengsiyuan.exception;
public class ExceptionTest2
{
//在方法声明的时候要抛出异常使用的是throws关键字
public void method() throws Exception
{
System.out.println("hello world");
//在方法体要抛出异常里面使用的是throw关键字
//方法体里面一旦出现了throw关键字,方法定义的时候就必须跟着throws关键字,否则会报错
throw new Exception();
}
public static void main(String[] args)
{
ExceptionTest2 test = new ExceptionTest2();
try
{
test.method();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
System.out.println("aaa");
}
}
}
5.对于运行时异常(runtime exception),我们可以不对其进行处理,也可以对其进行处理。推荐不对其进行处理。
6.NullPointerException是空指针异常,出现该异常的原因在于某个引用为null,但你
却调用了它的某个方法。这时就会出现该异常。
举例:ExceptionTest3.java
package com.shengsiyuan.exception;
public class ExceptionTest3
{
public static void main(String[] args)
{
String str = null;
System.out.println(str.length());
}
}
7.所谓自定义异常,通常就是定义了一个继承自Exception类的子类,那么这个类就是一个自定义异常类。通常情况下,我们都会直接继承自Exception类,一般不会继承某个运行时的异常类,自定义异常一般是为了在标准异常里加入一些自己独特的信息。
8.我们可以使用多个catch块来捕获异常,这时需要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,Java编译器会报编译错误;如果多个catch块的异常类型是独立的(MyException, MyException2), 那么谁前谁后都是可以的。
举例: MyException,MyException2,Exception4
package com.shengsiyuan.exception;
public class MyException extends Exception
{
public MyException()
{
super();
}
public MyException(String message)
{
super(message);
}
}
package com.shengsiyuan.exception;
public class MyException2 extends Exception
{
public MyException2()
{
super();
}
public MyException2(String message)
{
super(message);
}
}
package com.shengsiyuan.exception;
public class ExceptionTest4
{
public void method(String str) throws Exception
{
if(null == str)
{
throw new MyException("传入的字符串参数不能为null");
}
else if("hello".equals(str))
{
throw new MyException2("传入的字符串不能为hello");
}
else
{
System.out.println(str);
}
}
public static void main(String[] args)
{
try
{
ExceptionTest4 test = new ExceptionTest4();
test.method("hello");
}
catch(MyException e)
{
System.out.println("进入到MyException catch块");
e.printStackTrace();
}
catch(MyException2 e)
{
System.out.println("进入到MyException2 catch块");
e.printStackTrace();
}
catch(Exception e)
{
System.out.println("进入到Exception catch块");
e.printStackTrace();
}
finally
{
System.out.println("异常处理完毕");
}
System.out.println("程序执行完毕");
}
}
说明:
a)如果一个方法抛出了异常,另外一个方法调用这个方法的时候,可以有2种处理办法:要么try--catch--finally,要么继续往上抛,第一种处理方式容易理解,没什么好说的,如果是第二种处理方式,即继续往上抛,最高层可以抛到main方法,main方法可以捕获异常然后进行处理,也可以继续往外抛,此时,是抛给JVM去进行处理了。
继续往上抛与try--catch的区别是如果程序执行过程中发生异常,处理方式如果为往上抛的话程序就不会继续往下执行,就在发生异常的地方中止了,后面的代码不会执行,如果是try--catch,发生异常后程序进入catch,执行完后会接着执行下面的代码,也就是说就算发生异常,程序也不会中止执行,依然会跑下去。
b)关于自定义异常:实际项目中经常要用到自定义异常,一般使用情况是程序抛出了一个java预定义的异常,我们 catch住后,将该异常包装为自定义的异常,然后抛出去,这样我们写的方法声明的时候就只会抛自定义的异常,而不会再去抛java自带的异常。
9.Exception常见面试题
举例:ExceptionTest5
package com.shengsiyuan.exception;
public class ExceptionTest5
{
public void method()
{
try
{
System.out.println("进入到try块");
//return
System.exit(0);
}
catch(Exception ex)
{
System.out.println("异常发生了");
}
finally
{
System.out.println("进入到finally块");
}
System.out.println("异常处理后续的代码");
}
public static void main(String[] args)
{
ExceptionTest5 test = new ExceptionTest5();
test.method();
}
}
说明:
a)如果在try代码块里出现了return,那程序执行到return时并不会立即return,而是会继续把finally代码块里面的代码 执 行完,然后返回,切记。
b)如果try块中存在System.exit(0)语句,那么就不会执行finally块中的代码,因为System.exit(0)会终止当前运行的Java虚拟机,程序会在虚拟机终止前结束执行。
分享到:
相关推荐
张龙老师的JavaSE课堂笔记是针对这个基础平台的重要学习资源,适合初学者和希望巩固Java基础知识的开发者。 【类与对象】 在JavaSE中,一切皆为对象。类是创建对象的模板,定义了对象的状态(属性)和行为(方法)...
【张龙S2SH学习笔记(经典)】是基于圣思园张龙的视频教程整理出的学习资料,主要涵盖了Struts2、Spring和Hibernate这三大框架的整合使用,也就是我们常说的SSH(Spring、Struts2、Hibernate)框架集成。SSH框架在...
张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...
### 张龙 Schema DOM笔记 #### 一、Schema概述 **Schema**是一种用于验证XML文档有效性的工具,类似于**DTD**(Document Type Definition),但它提供了更加强大且灵活的功能。Schema不仅支持更丰富的数据类型,还...
张龙老师的JAVA圣思园笔记深入浅出地涵盖了JAVA-SE的基础知识点,帮助学习者构建扎实的Java编程基础。 1. **IO(输入/输出)**: Java IO是处理数据输入和输出的重要模块,包括文件操作、流处理等。笔记中可能讲解...
北京圣思园JAVA学习笔记全套: 全套的北京圣思园java学习笔记,总结的很好,很受用。 此文档是将圣思园张龙老师的javase早期的笔记,很值得初学者学习,javsse是java技术得基础,只有将此掌握好,才能更深入得了解...
张龙的Java SE课程笔记涵盖了这个领域的许多关键知识点。 1. **Java环境搭建**:首先,学习Java SE需要安装Java Development Kit (JDK),设置好环境变量`JAVA_HOME`、`PATH`和`CLASSPATH`,以便于编译和运行Java...
### 张龙 SAX 解析课堂笔记详解 #### 一、SAX 概念与特点 **SAX**(Simple API for XML)是一种用于解析XML文档的技术。与DOM(Document Object Model)不同,SAX提供了顺序访问模式,适用于快速读取XML数据。在...
张龙老师的Java SE课程笔记是学习这一关键领域的宝贵资源,旨在帮助学员深入理解Java编程语言的基本概念和技术。 笔记内容可能涵盖了以下几个核心知识点: 1. **Java语言基础**:包括基本数据类型、变量、运算符、...
在张龙老师的课堂笔记中,我们可以看到涵盖了不同阶段的学习内容,从基础到进阶,帮助学生逐步理解JavaWeb开发的核心概念和技术: - **Lesson 1-4**:通常会介绍Web开发的基础知识,包括HTTP协议、Servlet的基本...
通过张龙老师的Java SE课堂笔记,学习者不仅可以理解Java语言的基本语法,还能掌握面向对象设计原则和实战技巧,为后续的Java EE(企业版)和Android开发打下坚实的基础。同时,笔记中的实例和练习将帮助巩固理论...
圣思源张龙老师的jQuery学习笔记,深入浅出地剖析了这个库的核心概念和实用技巧,对于想要深入理解jQuery或提升前端技能的开发者来说,无疑是一份宝贵的学习资源。 首先,jQuery的核心理念是"Write Less, Do More...
在"风中叶之 Struts2学习笔记"中,我们可以探索以下关键知识点: 1. **Struts2架构**:Struts2的核心是Action类,它是业务逻辑处理的中心。通过配置文件或注解,我们可以定义Action与URL的映射关系,实现请求的分发...
张龙 MongoDB实战张龙 MongoDB实战
张龙老师的Java Web学习文档可能涵盖了以上这些知识点,通过课堂笔记和实例讲解,帮助学习者系统地掌握Java Web开发的基础和进阶技巧。学习Java Web不仅涉及技术层面,还包括如何组织代码、优化性能以及遵循最佳实践...
这份“java圣思园学笔记+文档(张龙)”的压缩包文件,很可能包含了张龙老师在圣思园教学过程中的详细笔记和相关文档,这些资料对于正在学习或复习Java编程的学员来说是宝贵的资源。通过这份笔记,你可以系统地学习...
张龙老师的JavaSE课程涵盖了从基础到进阶的重要知识点,旨在帮助学习者掌握Java编程语言的基础和核心概念。以下是根据提供的压缩包文件名称所涵盖的知识点的详细解释: 1. **Java SE入门、JDK的下载与安装**: - *...
### 北京圣思园XML学习笔记核心知识点详解 #### XML概述 - **XML全称**:eXtensible Markup Language(可扩展标记语言) - **学习XML的原因**: - 数据交换的需求日益增长,XML成为了电子商务的重要基础之一。 - ...
### Java SE 基础知识点总结 #### 类与对象 - **概念理解**:类是对一组具有相同属性和行为的对象...通过以上知识点的学习,可以更好地理解和掌握Java SE的基础概念和技术,为进一步学习更高级的主题打下坚实的基础。