一、异常

  异常是指程序在运行过程产生的不正常情况。语法错误不算异常。

1、异常体系

  Throwable:Java语言中所有错误或异常的超类;Throwable 类的子类有两个:1、Error;2、Exception。

1、所有的异常类都是 java.lang.Exception 的子类,Exception相对来说,可以控制,可以处理

2、Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。例如:JVM 内存溢出。

3、Error 用来指示运行时环境发生的错误。

4、通过看子类是Exception结尾还是Error结尾,来判断是Exception体系还是Error体系。

异常分类

运行时异常:RuntimeException 以及它子类的类型。

如果没有处理(抛出或者try-catch),编译不会报错

非运行时异常:Exception 以及它的子类,但是除去RuntimeException和它的子类。

如果没有处理(抛出或者try-catch),编译的时候报错

2、异常处理

  异常处理有两种方式:

1、自己处理try -catch

  写在可能发生异常代码的地方,如果出现异常,产生异常,就会被捕捉到,捕捉的异常信息放到异常类型的变量里面去;这样就可以进行处理这个异常。

  如果没有异常出现,就不捕捉,就往下面继续执行走。

语法结构:

    try{
//可能出现异常
}catch(异常类型 变量名){
//处理异常代码
}

处理异常代码:

1、把错误提示给用户。直接调用 printStackTract方法就打印异常信息。

2、把异常信息,保存到日志文件,便于查看。

2、自己不处理,向外抛出

  抛出到JVM,还可能在实际开发过程,遇到方法调用方法,调用很多层,那种抛出,就像上一层调用者进行抛出。

throws 和 throw的区别:

throws 表示向外抛出异常,位置:方法的(){}之间,特点:后面跟多个异常。

throw 产生一个异常对象,位置:方法里面。特点: 后面跟一个异常对象,相等于return的效果。

 public class ThrowsDemo {
/**
* 计算两个整数相除
* @param a
* @param b
* @throws Exception
*/
public void div(int a, int b) throws Exception { // 抛出异常
System.out.println(a / b);
} /**
* 测试div
*/
@Test
public void testDiv() throws Exception {
div(1, 0); //打印异常:java.lang.ArithmeticException: / by zero
}
}

3、多异常处理

语句结构:

     try{
//可能出现异常的代码。。。
}catch(异常类型 变量名){
// 处理异常的代码
}catch(异常类型 变量名){
// 处理异常的代码
}catch(异常类型 变量名){
// 处理异常的代码
}

3、异常finally语句

除了上面两种扑捉异常结构以外,还有其他的结构,可以在最后面添加一个finally

语法结构:

    try{
//可能出现异常的代码
}catch(异常类型 e){
//处理异常:
//1 打印到控制台
//2 保存到文件
//3 还可能向外抛出新的异常
}finally{
}

finally单词什么含义,表示最终的意思。

1、关闭流资源或者释放锁--线程。

2、如果在finally前面没有执行系统退出(system.exit(0))的语句,此处的代码始终都会执行。

3、不要在此处放return语句来返回一个数据。

 public class ExceptionTest {
/**
* 测试出现异常时,程序的执行顺序
*/
@Test
public void test1(){
try {
System.out.println("------执行1------");
System.out.println("------执行2------");
System.out.println("------num------" + (1/0)); //出现异常之后,不执行后面代码,即不打印------执行3------
System.out.println("------执行3------");
} catch ( ArithmeticException e) {
System.out.println("------catch1------");
System.out.println("------catch2------");
e.printStackTrace(); //打印异常信息 java.lang.ArithmeticException: / by zero
System.out.println("------catch3------");
} finally { //不管是否有异常都要执行
System.out.println("------finally1------");
System.out.println("------finally2------");
System.out.println("------finally3------");
}
}
}

4、自定义异常

  创建了一个异常类,需要模拟产生自定义异常的场景:

1、自定义一个异常类型,需要创建一个类继承Exception或者RuntimeException,覆写里面的两个构造方法

2、模拟一种场景,创建一种自定义异常的对象,通过throw创建异常对象。

3、使用上面场景,抛出或者处理

1、自定义一个异常类型。

 /**
* 自己定义异常对象
*/
public class LoginUserException extends RuntimeException{
public LoginUserException() { //覆写构造方法
super();
} public LoginUserException(String message) { //覆写构造方法
super(message);
}
} 

2、使用throw产生异常对象LoginUserException。

 public class LoginUserTest {
public String checkLogin(String username, String password){
if (!(Objects.equals(username, "user"))){
System.out.println("------执行1------");
System.out.println("------执行2------");
System.out.println("------执行3------");
throw new LoginUserException("name is wrong"); //自定义异常信息,throw的用法,产生一个异常对象LoginUserException
}
return "返回结果";
} }

3、测试异常:

 public class ExceptionTest {
/**
* 测试自定义异常
*/
@Test
public void testCheckLogin(){
LoginUserTest loginUserTest = new LoginUserTest();
String s = loginUserTest.checkLogin("user1", "");
System.out.println("----s:" + s); //打印异常:exception.LoginUserException: name is wrong
}
}

Java基础(八)异常处理的更多相关文章

  1. Java基础八--构造函数

    Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...

  2. 【Java基础】异常处理

    异常处理 异常概述 在 Java 语言中,将程序执行中发生的不正常情况称为"异常",但是开发过程中的语法错误和逻辑错误不是异常. 在执行过程中所发生的异常事件可分为两类: Erro ...

  3. 黑马程序员——JAVA基础之异常处理机制

    ------- android培训.java培训.期待与您交流! ---------- 异常:就是程序在运行时出现不正常情况. 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式 ...

  4. 一天一个Java基础——通过异常处理错误

    <Thinking in Java>上对这章的讲解不少,可见重要性,学习和总结一些主要的记录下来. 一.创建自定义异常 package Exception; class SimpleExc ...

  5. Java基础总结--异常处理机制

    ----异常的概述-----1.异常,就是不正常的现象,可能发生在编译期间也可能发生在运行期间2.可能会出现不同的异常,进而在Java中对其描述封装为类--在这些异常类中抽取其共性的东西(异常发生的位 ...

  6. Java基础(四)-异常处理机制及其设计

    本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就 ...

  7. java基础篇---异常处理

    认识异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序 ...

  8. Java基础之异常处理机制

    在Java中,异常分为编译时异常和运行时异常. 编译时异常又叫编译时被监测的异常:在程序编译过程中监测到非运行时异常的异常,出现该异常要么向上抛出,要么捕获处理.运行时异常(runtimeExcept ...

  9. Java基础(八)--String(源码)、StringBuffer、StringBuilder

    String源码:基于jdk1.8 public final class String implements Serializable, Comparable<String>, CharS ...

  10. Java基础教程——异常处理详解

    异常处理 好程序的特性 可重用性 可维护性 可扩展性 鲁棒性 |--|--Robust的音译 |--|--健壮.强壮之意 |--|--指在异常和危险情况下系统依然能运行,不崩溃 Java中,写下如下代 ...

随机推荐

  1. 用xpath来爬图

    # xpath语法可参考http://www.w3school.com.cn/xpath/xpath_syntax.asp# 本博客引用于https://zhuanlan.zhihu.com/some ...

  2. Postman使用手册3——环境变量

    一.环境变量 当使用API的时候,你可能经常需要使用不同的设置.环境设置可以让你使用变量自定义request.这个方法可以让你轻松的在不同的设置之间改变而不用改变你的request.你不需要担心要记住 ...

  3. Postman使用手册2——管理收藏

    一.开始使用收藏夹 收藏夹会使你的工作效率更上一层楼 收藏夹可以让单个的request分组在一起,这些request可以被进一步的管理到文件夹来更准确的反应你的API.request也可以在保存到收藏 ...

  4. C#-WinForm-★★★★★跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口★★★★★

    构造函数可以传任意类型的值,并可以同时传多个值 结构函数传值的初步应用——简单的登陆式界面 现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的 ...

  5. JavaScript DOM编程艺术 笔记(二)语句操作

    操作 var total = (1+4)*5; year = year +1; year++; var message = "i am" + "girl"; 是 ...

  6. Kettle 解决数据锁的问题(事务(进程 ID 51)与另一个进程被死锁在 锁 资源上)

    1.Kettle做了一个作业, 执行的时候问题发生在步骤2和步骤3之间,也就是步骤2还未完全执行完的时候,步骤3就要更新步骤2插入的数据,造成死锁.(我的理解是既然都分开作业了,那么每个作业都是一个单 ...

  7. vue-devtools 必备开发工具

    转载自:http://blog.csdn.net/sinat_17775997/article/details/70224280 最近在研究vue单页面应用,一步一步用上全家桶,开发避免不了的就是调试 ...

  8. BZOJ 2457 双端队列

           Sherry 现在碰到了一个棘手的问题,有N个整数需要排序.        Sherry 手头能用的工具就是若干个双端队列.        她需要依次处理这 N 个数,对于每个数, Sh ...

  9. Jenkins添加maven插件

    1.1.1 安装Maven插件 我们要使用Jenkins+Maven对Java项目进行构建,需要安装Maven Project Plugin,具体安装过程请参考插件管理部分 1.1.2 3.Linux ...

  10. 使用try-with-resource遇到的问题

    JDK1.7增加了try-with-source语法.在try中声明一个或者多个资源,在try块代码执行完成后自动关闭流,不用再写close()进行手动关闭. try(Resource res = x ...