关键字:
try:执行可能产生异常的代码
catch:捕获异常
finally:无论是否发生异常代码总能执行
throws:声明方法可能要抛出的各种异常
throw:手动抛出自定义异常
用 try-catch-finally 异常处理:
情况一(正常运行,无异常):
执行try,执行finally,执行finally块后的语句
情况二(try中出现异常)
执行到异常语句时(不执行try中异常语句之后的语句),直接跳到catch块,然后执行finally,再执行finally之后的语句
public class Test2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入被除数:");
try { // 将开始可能异常的代码放入try
int num1 = in.nextInt();
System.out.println("接受除数");
int num2 = in.nextInt();
System.out.println(num1+"/"+num2+"="+num1/num2);
//return;
//异常块:catch和finally必须至少出现一个,try块必须有
}catch (InputMismatchException e){//try中有匹配的异常,异常后的语句均不执行,直接调用catch,然后执行catch块之后的程序,若有异常但不匹配,不执行catch块,程序直接结束
System.out.println("出现错误,被除数和除数必须为整数");
//e.printStackTrace();//输出异常堆栈信息,打印错误序列,调用过程
e.getMessage();
//System.exit(1);
return;
}catch (ArithmeticException e){
System.out.println("被除数不可为0");
e.printStackTrace();
}finally {//无论是否发生异常,异常是否匹配,都会执行finally,若catch调用System.exit(1);finally与finally之后语句均不执行
System.out.println("感谢使用");
}
System.out.println("finally之后语句");
特殊情况之try中含有return:
a.无异常(执行顺序):
1.return之前的代码 2.finally 3.return语句 4.执行完成(不会执行return之后语句,也不会执行finally块之后的语句)
b.有异常(执行顺序):
1.异常之前与异常代码 2.catch语句 3.finally块 4.finally块之后语句 5.执行完毕(因为异常直接跳到catch块,所以try中return不会执行)
 
特殊情况之catch中含有return
a.无异常(执行顺序):
1.执行try代码块 2.执行finally块 3.执行finally之后的语句 4.退出(无异常,所以不执行catch,直接执行finally)
b.有异常(执行顺序):
这里有两种情况
情况一(异常匹配到的代码块中有return):
1.执行try块(异常语句后的try语句均不执行)2.执行catch块return之前的语句 3.执行finally块 4.执行catch中的return语句 5.退出
情况二(异常匹配到的代码块无有return,catch在其他chtch块中)
执行到异常语句时(不执行try中异常语句之后的语句),直接跳到catch块,然后执行finally,再执行finally之后的语句
catch块的执行原理:
对于异常的捕获,可以有多个catch,对于try发生的异常,他会根据发生的异常和catch里面的异常类型进行匹配(按照catch块从上往下匹配,但并不会执行不匹配的catch块语句),当他匹配到某个catch块时,他就直接进入这个catch块内,忽略这个catch块后面的所有catch块,所以,一般将catch(Exception e)放在最后,catch块承先子类后父类排列。
 
注意:无论是否发生异常,异常是否匹配,均会执行finally块,阻止finally执行的唯一方法是在catch块中调用 System.exit(1) 语句(System.exit(1)表示非正常退出程序)。
 
 
用 throw 进行异常处理:
开发方法遇到异常时,开发人员不一定要一定去处理这个异常,可以用throws向上继续抛出这个异常(异常可以抛出多个,每个用逗号隔开),强制调用者处理这个异常,调用者可以用try-catch处理,也可以继续向上声明,若在main方法处继续向上声明,就会让jvm去处理这个异常。
自定义异常:
第一步:若需要自定义异常名字,需新建一个类MyException,并让它继承Exception;重写构造方法,
若不需要自定义异常名字,则可以略过第一步,在第二步直接书写 throw new Exception("");
public class MyEcxeption extends Exception {
public MyEcxeption(String message) {
super(message);
}
}
第二步:在你需要的类中引用他(需要用关键字throw),注意,在引用类必须抛出这个异常
public void setSex(String sex) throws MyException{
if (sex.equals("男") || sex.equals("女") ){
this.sex = sex;
}else {
throw new MyException("性别必须为男或女");
} }
throw与throws的区别:
throw自行定义并抛出异常,位于方法体内部,只可以跟一个异常对象
throws抛出异常,位于方法参数列表后,可以跟多个异常类
 

java实训 :异常(try-catch执行顺序与自定义异常)的更多相关文章

  1. Java实训:实训一 ——长春职业技术学院 16级网络工程

    Java实训:实训一 本文会解释一些设计思路. 想看具体过程,请转:https://www.cnblogs.com/lxwlxw/p/10114187.html 笑维的码云项目命名不太对,所以我来:h ...

  2. 2018 java实训总结(时间戳&&主键)

    java实训题目:源管理系统. 答辩的时候被老师怼了以下几个的地方: 1.主键改变了 2.没时间戳却说自己的程序里有先后(这就是老师迂腐了,主键自增可以间接反馈出他加入的早晚,即使主键做出了改变但只是 ...

  3. java中子类继承父类程序执行顺序

    java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...

  4. Java学习笔记__异常机制_try_catch_finally_return执行顺序

    package cn.xiaocangtian.Exception; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

  5. java中return与finally的执行顺序

    可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定 ...

  6. 理清Java中try-catch-finally带return的执行顺序

    前言:try-catch-finally带return和异常时,它们之间执行顺序问题是留下来的一个小疑问,今天搞清楚它们 第一种情况:无异常 //1.try-catch-finally都带有retur ...

  7. java类的初始化块/执行顺序,实例化对象数据赋值

    java里初始化一个类的对象,通过初始化快或者构造方法进行数据赋值.与其相关的执行代码有这么几种: 静态初始化块 初始化块 构造方法 静态初始化块 静态初始化块只在类加载时执行一次,同时静态初始化块只 ...

  8. Java中的异常-Throwable-Error-Exception-RuntimeExcetpion-throw-throws-try catch

    今天在做一个将String转换为Integer的功能时,发现Integer.parseInte()会抛出异常NumberFormatException. 函数Integer.parseInt(Stri ...

  9. 【转】java静态代码块和构造方法执行顺序

    先看看下面几个类,然后判断它们的输出public class A { static{System.out.print(1);}public A(){System.out.print(2);}} pub ...

随机推荐

  1. Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor

    Webservice WCF WebApi   注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...

  2. Simple calculations

    Description 有一个包括n+2个元素的数列a0, a1, ..., an+1 (n <= 3000, -1000 <= ai <=1000).它们之间满足ai = (ai- ...

  3. OpenStack源码系列---nova-compute

    nova-compute运行的节点为计算节点,虚拟机运行于计算节点上.例如对于创建虚拟机请求,nova-api接收到客户端请求后,经过nova-scheduler调度器调度,再将请求发送给某个选定的n ...

  4. 李洪强iOS开发之 - 指定刷新tableview的某一组

    李洪强iOS开发之 - 指定刷新tableview的某一组

  5. openwrt hotplug

    由内核发出 event 事件. kobject_uevent() 产生 uevent 事件(lib/kobject_uevent.c 中), 产生的 uevent 先由 netlink_broadca ...

  6. attribute constructor&destructor

    attribute constructor&destructor 在看openwrt里libnl-tiny这个库的时候,遇到了C里面的构造函数这个概念. static void __init ...

  7. Linux主要命令

    pwd  查看当前路径 cd ..    表示后一级目录级 cd .   表示当前目录 cd ../..   后退两级 cd  表示进入当前家目录 date 返回当前的一个具体时间    -s  修改 ...

  8. Session 钝化机制

  9. String bulit-in function

    tip: 和tuple一样,字符串也是不可变的类型,字符串的内建函数有非常多,我们一一举例来看看他们的作用 下面是用dir(str) 输出的内容: ['__add__', '__class__', ' ...

  10. codeforces 451C. Predict Outcome of the Game 解题报告

    题目链接:http://codeforces.com/problemset/problem/451/C 题目意思:有3支球队(假设编号为1.2.3),总共要打 n 场比赛,已知已经错过这n场比赛中的 ...