一、异常处理

1.结构

java.lang.Object

|-----java.lang.Throwable

|-----java.lang.Error:错误,java程序对此无能为力,不显式处理

|-----java.lang.Exception:异常,需要进行处理

|-----RuntimeException:运行时异常,较常见,可以不显式处理

|-----ArrayIndexOutOfBoundsException/NullPointerException/ArithmeticException/ClassCastException

|-----非RuntimeException:编译时异常,必须显式处理

2.处理方法——“抓抛模型”

(1)抛throw:当执行代码出现异常时,就在出现异常的代码处生成一个对应的异常类型的对象,并将其抛出(自动抛出/手动抛出),抛出后程序终止运行

(2)抓catch:抓住抛出的异常类的对象,准备对其进行处理

(3)处理方法一:

try{//可能出现异常的代码

}catch(Exception1 e){//对Exception1类型的异常的处理方式  e.getMessage();//获取异常信息

e.toString();//获取异常的名字加信息

e.printStackTrace();//打印异常在堆栈中的信息:异常名称+异常信息+异常位置

}catch(Exception2 e){//对Exception2类型的异常的处理方式

}finally{//一定要执行的代码

}

注意事项:

A:try内声明的变量相当于局部变量,出了try{}语句就不能被调用

B:finally是可选的

C:多个catch语句时,抛出的异常从上往下匹配catch中的异常类型,满足就执行该catch内的代码,执行完跳过其他catch语句

D:异常处理完毕,其后的代码继续执行。

E:若catch中多个异常类型是包含的关系,必须把子类的catch语句放在父类的上面,否则报错。

F:finally语句的代码无论如何都会执行,除了System.exit(0);,即退出jvm。

(4)处理方法二:在方法的声明处,显式的抛出该异常对象的类型。

public voidTest{public static void main(String[] args) throws FileNotFoundException,IOException{//继续将异常往上抛,交给虚拟机处理

method2();

}//public static void main(String[] args){//不往上抛了,直接对异常进行处理//try{//method2();//}catch(Exception e){//System.out,println(e.getMessage());//}//}

public static method2() throws FileNotFoundException,IOException{//继续往上抛,交给调用者main处理

method1();

}public static method1() throws FileNotFoundException,IOException{//异常往上抛,交给调用者method2处理

FileInputStream fis = new FileInputStream(new File("hello.txt"));intb;while((b = fis.read()) != -1){

System.out.println((char)b);

}

fis.close();

}

}

A:格式:throws 异常类型

B:当一个方法可能生成某种异常,但不能确定如何处理这种异常,则此方法应显式的声明抛出异常,表明该方法不对该异常进行处理,由该方法的调用者负责处理。

C:异常的对象可以逐层往上抛,直到mian。在抛的过程中,可以通过try-catch-finally进行处理。

3.手动抛出异常:throw+异常对象

A:格式:throw new Exception1(参数);

4.自定义异常

(1)代码:

public classMyException extends RuntimeException{static final long serialVersionUID = -70348975766939L;publicMyException(){

}publicMyException(String msg){

super(msg);

}

}

(2)特点:

A:自定义的异常类要继承现有的异常类,如RuntimeException、Exception,让类具有可抛性。

B:提供一个序列号,用于唯一确定一个异常类。

C:提供几个重载的构造器。

5.抛出异常的方法的重写规则

(1)子类重写父类的方法,其抛出的异常类型只能是父类方法的异常类的子类或异常类型一样。

(2)代码:

public classTestOverride{public static voidmain(String[] args){//调用method1时,编译时认为a是A类型的,应该抛出IOException,//而实际运行时a是B类型的,如果重写的method1抛出异常比父类方法的异常类型大,就会报错

A a = newB();try{

a.method1();

}catch(IOException e){//e.printStackTrace();

}

}

}classA{public voidmethod1() throws IOException{

}

}classB exrends A{public voidmethod1() throws FileNotFoundException{

}

}

6.题目:下面代码的输出结果。

publicTest{static voidmethodA(){try{

System.out.println("进入方法A");throw new RuntimeException("手动制造异常");

}finally{

System.out.println("方法A的finally");

}

}static intmethodB(){try{

System.out.println("进入方法B");return 1;//有finally不能return

}finally{

System.out.println("方法B的finally");return 2;

}

}public static voidmain(String[] args){try{

methodA();

}catch(Exception e){

System.out.println(e.getMessage());

}

int i = methodB();//上面异常处理完,接着执行methodB

System.out.println(i);//输出2

}

}

结果:

进入方法A

方法A的finally

手动制造异常

进入方法B

方法B的finally

2

java eight,Java语法基础学习DayEight相关推荐

  1. java 注解 对象_Java基础-学习使用Annotation注解对象

    Java基础-学习使用Annotation注解对象 注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某 个时刻非常方便地使用这些数据 1-1:基本语法 Java S ...

  2. java教学入门零基础学习网站,22年最新

    零基础自学JAVA,我首推这个网站只要你有一颗敢于学习的心,当然工欲善其事必先利其器,有了便利的工具,当然做什么都事半功倍.当下程序员就是高收入的代名词之一,说到编程,不得不提一下国外这个网站http ...

  3. Java网络编程socket基础学习

    文章目录 InetAddress类 URL类 URLConnection类 使用URLConnection发送post请求 Socket类 DatagramSocket MulticastSocket ...

  4. java四舍五入方法的基础学习

    以下均为自己的学习复习资料,如有不对的地方请发在评论区中,我会仔细思考并作出修改,大家共同学习,谢谢! 主要资料可以从java.base (Java SE 17 & JDK 17) (orac ...

  5. java冰法_Java基础学习笔记二 Java基础语法

    注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /*这是 * 一段注释, * 它跨越了多个行*/ public void ...

  6. Java语法基础学习笔记05-1-循环案例+嵌套for-重点

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.单层for循环案例代码 二.for循环嵌套 1.图形打印 1.1**矩形 1.2**直角三角形 1.3**倒直角三 ...

  7. java 方法泛型_Java基础学习,什么是泛型概念,使用泛型有哪些好处?

    一般的类和方法,只能使用具体的类型,要么是基础数据类型,要么是自定义类. 如果要编写可以应用与多种类型的代码,这种刻板的限制对代码的束缚就会很大. 泛型的字面概念: 适合用于许多类型. 在面向对象中, ...

  8. JAVA并发编程JUC基础学习(简介)

    2019独角兽企业重金招聘Python工程师标准>>> 之前写过一篇并发编程的简单实例应用,Future快速实现并发编程,可以很快的在自己的项目中应用,但并不系统,之前说过总结一篇( ...

  9. java计算5 5_Java基础学习笔记 -- 5(运算符)

    运算符(赋值.算术.关系.逻辑.+连接.三目) 1)赋值运算符 = 在Java里面,采用等号(=)进行赋值运算,即把右边的值赋给左边的变量. 例如:    int a = 10;String str ...

最新文章

  1. Python 3/前端 画图工具:Matplotlib,canvajs,pyecharts
  2. 查询linux大于200M的文件
  3. 梳理各算法基础应用及场景
  4. 网易云信 — 陪你打怪让你飞!
  5. 英语c开头语言,字母c开头的英语短语
  6. 第00次博文——我对Python的期待与思考
  7. java生命游戏_大神们 急求一个生命游戏的java代码 谢谢各路大神!
  8. AIX系统常用命令总结
  9. Ubuntu 18.04 语言学相关软件的安装
  10. 软件项目设计文档分类
  11. linux系统安装步骤
  12. 如何在PowerPoint中添加幻灯片编号
  13. hexo d错误:fatal: unable to auto-detect email address
  14. 八爪鱼采集ajax表格,怎么采集八爪鱼采集器单网页表格信息
  15. 开源定时任务管理系统gocron解析,轻松做好定时任务调度处理
  16. DIY装机的看过来了! 一份实用的台式机硬件选取流程
  17. 【历史上的今天】5 月 23 日:Java 正式发布;晶体管的共同发明者出生
  18. 医院影像图像科室工作站PACS系统 DICOM 三维图像后处理与重建
  19. 抖音小店另类起店方法
  20. ikbc机械键盘打字出现重复_机械键盘按键 按一次触发多次

热门文章

  1. 第二次冲刺个人博客02
  2. 将centos字符编码换成utf-8
  3. [CLR via C#]1.6 Framework类库~1.9与非托管代码的互操作性
  4. [转载] 七龙珠第一部——第029话 冒险再度开始
  5. nginx代理tomcat,https
  6. Linux 大文件快速处理小的办法
  7. BAJT 中高级 Java 面试题答案
  8. Eclipse中如何更改工作空间(之前一直不知道,几天终于知道了!)。
  9. Spark2.2出现异常:ERROR SparkUI: Failed to bind SparkUI
  10. 【vim环境配置】解决ubuntu上 由YouCompleteMe插件配置不当引起的 自动补全失效的问题