java9 - 异常处理
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 - 异常处理的更多相关文章
- java-9 异常处理
1.异常处理的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如 ...
- Java基础教程——字节流
IO流 水流 特点 连续性 逝者如斯夫,不舍昼夜: 方向性 一江春水向东流.水往低处流.百川东到海,何时复西归?少壮不努力,老大徒伤悲! 源头尽头 唯有源头活水来:覆水难收 Java里的IO也有这样的 ...
- Java9 新特性 详解
作者:木九天 < Java9 新特性 详解 > Java9 新特性 详解 摘要: 1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方 ...
- 什么?Java9这些史诗级更新你都不知道?Java9特性一文打尽!
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 关于.NET异常处理的思考
年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- 异常处理汇总 ~ 修正果带着你的Net飞奔吧!
经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- IL异常处理
异常处理在程序中也算是比较重要的一部分了,IL异常处理在C#里面实现会用到一些新的方法 1.BeginExceptionBlock:异常块代码开始,相当于try,但是感觉又不太像 2.EndExcep ...
随机推荐
- Activity内切换fragment实现底部菜单切换遇到的坑
1.一般说来,app底部导航都会设计为5个菜单,可以使用textView,也可使用radioButton,这里我选择用radioButton,给radioButton直接设置selector就可以实现 ...
- CentOS7中使用iptables
原文地址:http://blog.csdn.net/u012486840/article/details/53161555 1.关闭firewall: systemctl stop firewalld ...
- python_缩进_格式化代码
pycharm如何格式化代码? ctrl + alt + l pycharm如何缩进代码? tab 向右缩进4格 shift + tab 向左缩进4格
- SQLSERVER存储过程语法详解
CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...
- Servlet--Servlet接口
servlet主要数据结构 Servlet 接口:主要定义了servlet的生命周期方法 ServletConfig接口:为servlet提供了使用容器服务的若干重要对象和方法. ServletCon ...
- 网站静态化处理—web前端优化—上(11)
网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...
- 【转】centos安装vim7.4
centos安装vim7.4 系统版本centos6.4; root权限 su - root 卸载 $ rpm -qa | grep vim $ yum remove vim vim-en ...
- python之作业--------购物车优化
Read Me:继上次简单购物车的实现,有再一次的升级优化了下,现实现以下几个功能: 1.有客户操作和商家操作,实现,客户可以买东西,当金额不足提醒,最后按q退出,打印购物车列表 2.商家可以添加操作 ...
- 官方新出的 Kotlin 扩赞库 KTX,到底帮你干了什么?
Kotlin KTX 2月5号的时候,Google 发布了一款 Kotlin 的扩展库,叫 Android KTX,不过现在还处于预览版的状态.它能使 Android 上的 Kotlin 代码更简洁, ...
- 创建分模块的maven项目
折腾了我2天的maven,整理一下,以后做个参考 一.什么是maven项目: Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven ...