Java异常

1、异常初见

System.out.println(1/0); 

运行上面语句之后打印出:
Exception in thread "main" java.lang.ArithmeticException: / by zero 程序运行之后,在控制台会打印一串信息;这段信息,在Java中叫做异常。

2、什么是异常?

Java程序中异常:程序在运行过程产生的不正常情况;
编译没有问题,到运行的时候,出现错误. 这种现象叫异常。

3、常见异常

1.java.lang.NullPointerException

int a [] = null;
System.out.println(a.length);

2.java.lang.ArrayIndexOutOfBoundsException

int a [] = {};
a[0] = 10;

4、异常体系

ArithmeticException,
NullPointerException,
ArrayIndexOutOfBoundsException, 从上面的3个异常可以看出,在Java中使用不同的类来描述不同的异常。

从图中可以看出:

1、Throwable:Java语言中所有错误或异常的超类;
2、下面有两个子类,一个 Error(错误),一个Exception(异常)

4.1 Error 和 Exception的区别是什么?

其实这两个泛指都是异常.

Throwable
|---- Error 系统程序中,不能处理的错误,比如内存溢出.
|---- Exception 可以进行处理的.

5、异常处理

如果我们想让	System.out.println(1/0); 执行,该怎么办?
try {
System.out.println(1/0);
} catch (Exception e) {
System.out.println("异常所属类:" + e.getClass()); //获取抛出的异常类的类名
System.out.println("异常的原因:" + e.getMessage()); //获取具体的异常原因
}

5.1 能不能同时捕获到多个异常?

6、finally 语句

语法结构:
try{
可能出现异常的代码
}catch(异常类型 e){
处理异常:
1 打印到控制台
2 保存到文件
3 还可能向外抛出新的异常
}finally{
} 注意:finally后面没有小括号;
6.1 finaly 单词什么含义,表示最终的意思,那里面做什么事情?
1.关闭流资源(IO流部分讲解)或者 释放锁--线程(以后课程学习)

简单说明一下: 这里的流,类似于水流的意思,比如一个水龙头打开,流出水,突然发生地震了(产生异常),没有关闭水龙头,那水就一直流着,然后可能导致短路,电路中断,然后就可能引起火灾;所以希望中途不管发生什么异常情况,最终都应该关闭水龙头。这样就可以把关闭的代码写在finally里面;

2.释放锁 比如上厕所需要上锁,然后完事了之后,最后在开锁出来。
特点:如果在finally前面没有执行系统退出(system.exit(0))的语句,此处的代码始终都会执行。 3.不建议此处放return语句来返回一个数据(让程序难以理解,并且这里也不应该放return) 对于上面的结构,也有变种,比如:
try{
}finally{
}
只有try-finally,没有catch,这种结构在讲线程,释放锁学习

7、异常 throw 与 throws

练习:计算两个整数相除。

8、自定义异常

在Java异常体系已经包含了很多异常类,但是还是不能满足开发的日常情况那应该怎么办?

如何自定义异常?

场景:
1。假设用户注册过程中,发现用户名重复了,把这种情况定义为异常类型;
2。设计一个用户注册的方法,方法里面判断用户注册的用户名是否重复,如果重复,就产生一个异常对象;
3。调用注册方法来注册一个账号,就会产生一个异常。产生异常之后,就选择是抛出还是处理.

1.定义一个异常类(用户名重复异常)

package com.rimi.exception;

public class NameRepeatException extends Exception {
public NameRepeatException(){
super();
}
public NameRepeatException(String msg){
super(msg);
} }

2.写个测试类

package com.rimi.exception;

public class Test {
public static void main(String[] args) { String[] names = { "张三", "李四", "王二", "麻子", };
try {
login("张三", names);
} catch (Exception e) {
// TODO: handle exception
System.out.println("异常抛出:" + e.getMessage());
} } public static void login(String name, String[] names) throws NameRepeatException {
for (String string : names) {
if (string.equals(name)) {
throw new NameRepeatException("名字重复了");
}
}
} }

java9 - 异常处理的更多相关文章

  1. java-9 异常处理

    1.异常处理的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如 ...

  2. Java基础教程——字节流

    IO流 水流 特点 连续性 逝者如斯夫,不舍昼夜: 方向性 一江春水向东流.水往低处流.百川东到海,何时复西归?少壮不努力,老大徒伤悲! 源头尽头 唯有源头活水来:覆水难收 Java里的IO也有这样的 ...

  3. Java9 新特性 详解

    作者:木九天   <   Java9 新特性 详解  > Java9 新特性 详解 摘要: 1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方 ...

  4. 什么?Java9这些史诗级更新你都不知道?Java9特性一文打尽!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  5. 关于.NET异常处理的思考

    年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...

  6. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  7. 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...

  8. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  9. IL异常处理

    异常处理在程序中也算是比较重要的一部分了,IL异常处理在C#里面实现会用到一些新的方法 1.BeginExceptionBlock:异常块代码开始,相当于try,但是感觉又不太像 2.EndExcep ...

随机推荐

  1. TCP三次握手机制中的seq和ack

    TCP连接的三次握手:第一次(A--->B),SYN=1,seq=x第二次(B--->A),SYN=1,ACK=1,seq=y,ack=x+1 第三次(A--->B),ACK=1,s ...

  2. linux pagecache限制与查看

    在linux服务器使用过程中,由于linux对内存的使用原则是能cache就尽量cache,所以会出现pagecache占用很多的情况. suse的版本有一个pagecachelimit的功能,cen ...

  3. Java并发编程的艺术读书笔记(2)-并发编程模型

    title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...

  4. 转-CSS padding margin border属性详解

    原文链接:http://www.cnblogs.com/linjiqin/p/3556497.html 图解CSS padding.margin.border属性W3C组织建议把所有网页上的对像都放在 ...

  5. U盘安装CentOS 7问题解决

    1 使用U盘安装最新版Centos时报错(CentOS-7-x86_64-DVD-1503-01): 错误提示:"Warning:could not boot;Warning: /dev/r ...

  6. Mysql基本命令二

    删除id>10的记录:delete from user where id>10; 设置user表的自增字段起始值为10:alter table user anto_increment=10 ...

  7. 【转】Linux查找本机默认网关

    ip route show | grep 'default' | awk '{print $3}' #vim getgw.sh #!/bin/shdefault_gateway_ip=`ip rout ...

  8. ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线

    在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容.下面的类图描述了我们已经实现的组件及其之间的关系,貌似系统已经变得越来越复杂了. 其 ...

  9. iOS9 适配网络请求,适配分享失败,适配无法正常跳转到客户端

    问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据.对ShareSDK来说,具体表现可能是,无法授权.分享.获取用户信息等. 还可能造成我们的编辑界面里 ...

  10. C语言对函数操作的结果声明

    可以用来返回给调用者函数操作的状态值. /* 这是一份关于函数返回值定义的头文件. */ #ifndef _STATUS_H_ #define _STATUS_H_ #define STATUS in ...