JAVASE基础 Item -- 异常处理Exception_java版本item不能使用

*/
public class ExceptionDemo {
public static void main(String[] args) {
// 第一阶段
int a = 10;
// int b = 2;
int b = 0;

    try {
        System.out.println(a / b);
    } catch (ArithmeticException ae) {
        System.out.println("除数不能为0");
    }

    // 第二阶段
    System.out.println("over");
}

}


### 二、try…catch处理方式


##### **2.1 一个异常的情况**(见上例)


##### **2.2 多个异常的情况**(平级情况以及存在上下级的情况)



package cn.itcast_02;

/*
* A:一个异常
* B:二个异常的处理
* a:每一个写一个try…catch
* b:写一个try,多个catch
* try{
* …
* }catch(异常类名 变量名) {
* …
* }
* catch(异常类名 变量名) {
* …
* }
* …
*
* 注意事项:
* 1:能明确的尽量明确,不要用大的来处理。
* 2:平级关系的异常谁前谁后无所谓,如果出现了子父关系,父必须在后面。
*
* 注意:
* 一旦try里面出了问题,就会在这里把问题给抛出去,然后和catch里面的问题进行匹配,
* 一旦有匹配的,就执行catch里面的处理,然后结束了try…catch
* 继续执行后面的语句。
*/
public class ExceptionDemo2 {
public static void main(String[] args) {
// method1();

    // method2();

    // method3();

    method4();
}

public static void method4() {
    int a = 10;
    int b = 0;
    int[] arr = { 1, 2, 3 };

    // 爷爷在最后
    try {
        System.out.println(a / b);
        System.out.println(arr[3]);
        System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?");
    } catch (ArithmeticException e) {
        System.out.println("除数不能为0");
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("你访问了不该的访问的索引");
    } catch (Exception e) {
        System.out.println("出问题了");
    }

    // 爷爷在前面是不可以的
    // try {
    // System.out.println(a / b);
    // System.out.println(arr[3]);
    // System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?");
    // } catch (Exception e) {
    // System.out.println("出问题了");
    // } catch (ArithmeticException e) {
    // System.out.println("除数不能为0");
    // } catch (ArrayIndexOutOfBoundsException e) {
    // System.out.println("你访问了不该的访问的索引");
    // }

    System.out.println("over");
}

// 两个异常的处理
public static void method3() {
    int a = 10;
    int b = 0;
    int[] arr = { 1, 2, 3 };

    try {
        System.out.println(arr[3]);
        System.out.println(a / b);
        // System.out.println(arr[3]);
    } catch (ArithmeticException e) {
        System.out.println("除数不能为0");
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("你访问了不该的访问的索引");
    }

    System.out.println("over");
}

// 两个异常
public static void method2() {
    int a = 10;
    int b = 0;
    try {
        System.out.println(a / b);
    } catch (ArithmeticException e) {
        System.out.println("除数不能为0");
    }

    int[] arr = { 1, 2, 3 };
    try {
        System.out.println(arr[3]);
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("你访问了不该的访问的索引");
    }

    System.out.println("over");
}

// 一个异常
public static void method1() {
    // 第一阶段
    int a = 10;
    // int b = 2;
    int b = 0;

    try {
        System.out.println(a / b);
    } catch (ArithmeticException ae) {
        System.out.println("除数不能为0");
    }

    // 第二阶段
    System.out.println("over");
}

}


##### **2.3 JDK7的新特性及注意事项**



package cn.itcast_02;

/*
* JDK7出现了一个新的异常处理方案:
* try{
*
* }catch(异常名1 | 异常名2 | … 变量 ) {
* …
* }
*
* 注意:这个方法虽然简洁,但是也不够好。
* A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
* B:多个异常间必须是平级关系。
*/
public class ExceptionDemo3 {
public static void main(String[] args) {
method();
}

public static void method() {
    int a = 10;
    int b = 0;
    int[] arr = { 1, 2, 3 };

    // try {
    // System.out.println(a / b);
    // System.out.println(arr[3]);
    // System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?");
    // } catch (ArithmeticException e) {
    // System.out.println("除数不能为0");
    // } catch (ArrayIndexOutOfBoundsException e) {
    // System.out.println("你访问了不该的访问的索引");
    // } catch (Exception e) {
    // System.out.println("出问题了");
    // }

    // JDK7的处理方案
    try {
        System.out.println(a / b);
        System.out.println(arr[3]);
    } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
        System.out.println("出问题了");
    }

    System.out.println("over");
}

}


##### **2.4 编译时异常和运行时异常的区别**


Java中的异常被分为两大类:编译时异常和运行时异常。所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异

**真题解析、进阶学习笔记、最新讲解视频、实战项目源码、学习路线大纲**
**详情关注公中号【编程进阶路】**

常就是编译时异常


* 编译时异常   
 Java程序必须显示处理,否则程序就会发生错误,无法通过编译
* 运行时异常   
 无需显示处理,也可以和编译时异常一样处理


##### **2.5 Throwable中的方法**


* getMessage()   
 获取异常信息,返回字符串。
* toString()   
 获取异常类名和异常信息,返回字符串。
* printStackTrace()   
 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
* printStackTrace(PrintStream s)   
 通常用该方法将异常内容保存在日志文件中,以便查阅。



package cn.itcast_04;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
* 在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个对象抛出,和catch里面的类进行匹配。
* 如果该对象是某个类型的,就会执行该catch里面的处理信息。
*
* 异常中要了解的几个方法:
* public String getMessage():异常的消息字符串
* public String toString():返回异常的简单信息描述
* 此对象的类的 name(全路径名)
* ": "(冒号和一个空格)
* 调用此对象 getLocalizedMessage()方法的结果 (默认返回的是getMessage()的内容)
* printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。把信息输出在控制台。
*/
public class ExceptionDemo {
public static void main(String[] args) {
String s = “2014-11-20”;
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
try {
Date d = sdf.parse(s); // 创建了一个ParseException对象,然后抛出去,和catch里面进行匹配
System.out.println(d);
} catch (ParseException e) { // ParseException e = new ParseException();
// ParseException
// e.printStackTrace();

        // getMessage()
        // System.out.println(e.getMessage());
        // Unparseable date: "2014-11-20"

        // toString()
        // System.out.println(e.toString());
        // java.text.ParseException: Unparseable date: "2014-11-20"

        e.printStackTrace();
        //跳转到某个指定的页面(index.html)
    }

    System.out.println("over");
}

}


### 三 、 throws


定义功能方法时,需要把出现的问题暴露出来让调用者去处理。那么就通过throws在方法上标识。



package cn.itcast_05;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
* 有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限去处理某个异常。
* 或者说,我处理不了,我就不处理了。
* 为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出。
*
* 格式:
* throws 异常类名
* 注意:这个格式必须跟在方法的括号后面。
*
* 注意:
* 尽量不要在main方法上抛出异常。
*
* 小结:
* 编译期异常抛出,将来调用者必须处理。
* 运行期异常抛出,将来调用可以不用处理。
*/
public class ExceptionDemo {
public static void main(String[] args) {
System.out.println(“今天天气很好”);
try {
method();
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(“但是就是不该有雾霾”);

    method2();
}

// 运行期异常的抛出
public static void method2() throws ArithmeticException {
    int a = 10;
    int b = 0;
    System.out.println(a / b);
}

// 编译期异常的抛出
// 在方法声明上抛出,是为了告诉调用者,你注意了,我有问题。
public static void method() throws ParseException {
    String s = "2014-11-20";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d = sdf.parse(s);
    System.out.println(d);
}

}


##### **3.1 throws和throw的区别**


* **throws**   
 用在方法声明后面,跟的是异常类名   
 可以跟多个异常类名,用逗号隔开   
 表示抛出异常,由该方法的调用者来处理   
 throws表示出现异常的一种可能性,并不一定会发生这些异常
* **throw**   
 用在方法体内,跟的是异常对象名   
 只能抛出一个异常对象名   
 表示抛出异常,由方法体内的语句处理   
 throw则是抛出了异常,执行throw则一定抛出了某种异常



package cn.itcast_06;

/*
* throw:如果出现了异常情况,我们可以把该异常抛出,这个时候的抛出的应该是异常的对象。
*
* throws和throw的区别(面试题)
throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
*/
public class ExceptionDemo {
public static void main(String[] args) {
// method();

    try {
        method2();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void method() {
    int a = 10;
    int b = 0;
    if (b == 0) {
        throw new ArithmeticException();
    } else {
        System.out.println(a / b);
    }
}

public static void method2() throws Exception {
    int a = 10;
    int b = 0;
    if (b == 0) {
        throw new Exception();
    } else {
        System.out.println(a / b);
    }
}

}


##### **3.2 如何处理异常**


原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws


* 区别:   
 后续程序需要继续运行就try   
 后续程序不需要继续运行就throws
* 举例:   
 感冒了就自己吃点药就好了,try   
 吃了好几天药都没好结果得了H7N9,那就的得throws到医院   
 如果医院没有特效药就变成Error了


### 四、finally的特点作用


##### **4.1 finally的特点**


被finally控制的语句体一定会执行   
 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))


##### **4.2 finally的特点**


被finally控制的语句体一定会执行   
 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0))



package cn.itcast_07;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
* finally:被finally控制的语句体一定会执行
* 注意:如果在执行到finally之前jvm退出了,就不能执行了。
*
* A:格式
* try…catch…finally…
* B:用于释放资源,在IO流操作和数据库操作中会见到
*/
public class FinallyDemo {
public static void main(String[] args) {
String s = “2014-11-20”;
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

    Date d = null;
    try {
        // System.out.println(10 / 0);
        d = sdf.parse(s);
    } catch (ParseException e) {
        e.printStackTrace();

总结

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。

* B:用于释放资源,在IO流操作和数据库操作中会见到
*/
public class FinallyDemo {
public static void main(String[] args) {
String s = “2014-11-20”;
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

    Date d = null;
    try {
        // System.out.println(10 / 0);
        d = sdf.parse(s);
    } catch (ParseException e) {
        e.printStackTrace();

总结

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【完整课程列表】 资源汇总下载地址:https://download.csdn.net/download/qq_27595745/55418618 Java SE编程入门教程 collection与collections(共7页).pptx Java SE编程入门教程 java GC(共6页).pptx Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE编程入门教程 java Math(共11页).pptx Java SE编程入门教程 java object(共9页).pptx Java SE编程入门教程 java static final(共24页).pptx Java SE编程入门教程 java this和super(共10页).pptx Java SE编程入门教程 java 常用API(共22页).pptx Java SE编程入门教程 javaGUI编程快速入门(1)(共82页).pptx Java SE编程入门教程 java包装器(共9页).pptx Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断循环(共79页).ppt Java SE编程入门教程 java入门以及变量debug(共63页).pptx Java SE编程入门教程 java设计模式(共17页).pptx Java SE编程入门教程 java数组(共33页).pptx Java SE编程入门教程 java网络编程(共29页).pptx Java SE编程入门教程 java线程(共61页).pptx Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 String字符串(共27页).pptx Java 位运算.docx java正则表达式例子大全 共10页.doc JAVA正则表达式实例教程 共17页.docx JAVA正则表达式实例教程 共17页.pdf 递归算法.docx 堆和栈.wps

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值