Java学习笔记之异常处理
一.异常的分类
1.由Java虚拟机抛出的异常(Error):程序无法处理的问题,用户不用去进行处理(虚拟机错误丶内存溢出错误丶线程死锁)
2.Exception异常:程序本身可以进行处理的异常
1.非检查异常(Unchecked Exception):编译器不需要强制处理的异常(空指针异常丶数组下标越界异常丶算数异常丶类型转换异常)
2.检查异常(checked Exception):编译器需要强制处理的异常(IOException丶SQLException)
二.异常处理的两种方法
1.通过try丶catch和finally关键字在当前位置进行异常处理
public static void main(String[] a){
int sum = 0;
while(true){
try { //以两数相除除数不能为0进行举例
System.out.println("请依次输入两个数值进行除法操作:");
Scanner scanner = new Scanner(System.in);
int one =scanner.nextInt();
int two =scanner.nextInt();
sum = one/two;
System.out.println("最终结果为:"+sum);
} catch (Exception e) { //用catch将错误进行捕捉,这里可以使用多重catch,对于不同的错误进行捕捉,但最后的catch建议为Exception。
// TODO Auto-generated catch block //显示错误堆栈信息
e.printStackTrace();
}finally{
System.out.print("无论有没有错误我都会执行");
}
}
}
}
输出:

2.通过try丶catch丶finally丶throw和throws抛出异常给函数调用者进行处理
public class Try {
public static void main(String[] a){
try{
Function(); //在函数调用者处对异常进行处理
}catch(Exception e)
{
e.printStackTrace();
}
}
static void Function() throws Exception{ //通过throws将异常进行抛出
System.out.println("请输入一个数值进行判断:");
Scanner scanner = new Scanner(System.in);
int one =scanner.nextInt();
if(one<100)
{
throw new Exception(); //若输入的数值小于100则抛出异常
}
}
}
输出:

3.自定义异常进行处理
class MyException extends Exception{ //自定义异常,通过super方法传递异常信息给父级
public MyException(){
super("这是我自定义的异常");
}
}
public class Try {
public static void main(String[] a){
try{
Function();
}catch(MyException e)
{
e.printStackTrace();
}
}
static void Function() throws MyException{
System.out.println("请输入一个数值进行判断:");
Scanner scanner = new Scanner(System.in);
int one =scanner.nextInt();
if(one<100)
{
throw new MyException(); //将自定义异常进行抛出
}
}
}
输出:

三.异常链
有的时候我们会在处理一个异常的时候抛出一个新的异常,也就是异常的嵌套,但是最后我们得到的异常信息却只有一个。
示例:
public class Try {
public static void main(String[] a){
try{
Function1();
}catch(Exception e)
{
e.printStackTrace();
}
}
static void Function1() throws Exception{
try{
Function2();
}catch(Exception e){
throw new Exception();
}
}
static void Function2() throws Exception{
try{
Function3();
}catch(Exception e){
throw new Exception();
}
}
static void Function3() throws Exception{
throw new Exception();
}
}
输入结果:

这样的话显示出的异常就只有一个了,那我们如果想让这条异常链中的所有异常信息全部输出该怎么办呢?方法很简单,我们在抛出异常的时候将异常对象也当作参数进行抛出就行了。
示例:
public class Try {
public static void main(String[] a){
try{
Function1();
}catch(Exception e)
{
e.printStackTrace();
}
}
static void Function1() throws Exception{
try{
Function2();
}catch(Exception e){
throw new Exception("异常2",e);
}
}
static void Function2() throws Exception{
try{
Function3();
}catch(Exception e){
throw new Exception("异常2",e);
}
}
static void Function3() throws Exception{
throw new Exception("异常3");
}
}
运行结果:

到此,我们Java中的异常便是描述完了。
Java学习笔记之异常处理的更多相关文章
- Java 学习笔记(11)——异常处理
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用System.ou ...
- Java学习笔记之——异常处理
1.异常: 在程序运行时,发生了一些错误导致程序不能正常结束或者中断 2.异常导致的后果 Java程序的执行过程中如果出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将其被提交 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 20145330第五周《Java学习笔记》
20145330第五周<Java学习笔记> 这一周又是紧张的一周. 语法与继承架构 Java中所有错误都会打包为对象可以尝试try.catch代表错误的对象后做一些处理. 使用try.ca ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- java学习笔记12--异常处理
java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...
- java学习笔记5--类的方法
接着前面的学习: java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址 ...
- 20145230《java学习笔记》第九周学习总结
20145230 <Java程序设计>第9周学习总结 教材学习内容 JDBC JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作, ...
随机推荐
- Googel 浏览器 模拟发送请求工具--Advanced REST Client
Advanced REST Client是 Chrome 浏览器下的一个插件,通过它可以发送 http.https.WebSocket 请求.在 Chrome 商店下搜索 Advanced REST ...
- 静态编译 Qt5.7.0 (含 openssl 支持)
关于Qt静态便宜的环境等,请先参见 Win10 + VS2015 下编译 Qt5.6.0 . 首先编译 openssl .我这里用的版本是 openssl 1.0.2j (新的1.1版本的便宜稍有不同 ...
- Android学习总结——INSTALL_FAILED_CONFLICTING_PROVIDER
在写个小demo的时候出现了这个问题: 排除手机内存不足.以及没用安装过这个应用的问题之后,发现是android:authorities="..."出了问题,可能还有其他应用程序和 ...
- 到网上收集了一个“高大上”的CSS3登入表单和大家分享一下
要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识. 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到演示地址哦): 制作步骤: 一 ...
- Tensorflow运用RNN注意事项
一.学习单步的RNN:RNNCell 如果要学习TensorFlow中的RNN,第一站应该就是去了解“RNNCell”,它是TensorFlow中实现RNN的基本单元,每个RNNCell都有一个cal ...
- tomcat 虚拟目录
在webapps同级目录 下建立一个webapps_abc的目录,将网站根目录abc文件夹放入webapps_abc目录下: 找到conf目录下的,server.xml文件,在service节点下添加 ...
- [Golang] GOROOT、GOPATH和Project目录说明
go env环境查看 用go env 可查看当前go环境变量. $ go env GOARCH="amd64" GOBIN="" GOEXE="&qu ...
- 局域网使用visual studio配合iis调试手机app
描述:开发一款手机应用程序,服务器配置在iis,当局域网中即只有路由器无外网如何设置实时调试手机应用程序? vs配合iis调试程序的两种方式? 使用vs的debug(f5)调试网站比较常见,然而当网站 ...
- mongodb索引--1亿条记录的查询从55.7秒到毫秒级别<补充版>
从头开始,验证mongodb的索引的好处.(window7环境下) 下载mongodb服务器,并解压到d盘,并使用以下命令启动 mongod --dbpath D:\mongodb\data mong ...
- ruby中字符串转换为类
最近有个需求,需要根据一个字符串当作一个类来使用,例如: 有一个字符串 “ChinaMag”,根据这个字符串调用 类 ChinaMag下的方法. 解决办法: 1. rails可以使用 constant ...