Java基础——异常的捕获与抛出

‘ 

前言:

  1. Error类(错误)和Exception类(异常)是Throwable类的子类。
  2. 异常分为CheckedException类(编译时异常)和RuntimeException类(运行时异常)。
  3. CheckedException类(编译时异常)必须提前处理。
  4. RuntimeException类(运行时异常)可选择性处理

一、捕获异常;


规则:

  1. try()里的代码A或代码B只要有一个出现异常就会运行catch()里的代码C。
  2. 无论是否有异常都会运行finally里的代码D。
  3. 假如要捕获多个异常,要从小到大。

格式:

try
{
待捕获代码A
待捕获代码B
}
catch(想要捕获的异常类型 对象名)
{
异常被捕获时的输出代码C
}
finally
{
代码D
}
后续代码

例如:

int m=2, n=0;
try
{
System.out.println(m/n);
}
catch(Exception e)
{
System.out.println("除数不能为0");
}
catch(Throwable t)
{
System.out.println("Throwable");
}
finally
{
System.out.println("finally");
}

编译结果:

除数不能为0
finally

二、抛出异常;


规则:

  1. 当判断方法存在异常时先通过关键字throws抛出方法异常。
  2. 然后可以选择在主函数中选择捕获异常或继续抛出异常。

例一:捕获异常

public static void main(String[] args)
{
try
{
int a=num(4,0);
System.out.println(a);
}
catch(Exception e)
{
e.printStackTrace(); //在命令行打印异常信息在程序中出错的位置及原因。
System.out.println("除数不能为0");
}
}
public static int num(int x,int y)throws Exception
{
int result = x/y;
return result;
}

编译结果:

java.lang.ArithmeticException: / by zero
at 源代码.Example.num(Example.java:22)
at 源代码.Example.main(Example.java:10)
除数不能为0

例二:双重抛出异常

public static void main(String[] args)throws Exception
{
num();
}
public static void num()throws Exception
{
int x=4, y=0;
int m=x/y;
System.out.println(m);
}

编译结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero

例三:主动双重抛出异常

public static void main(String[] args)throws Exception
{
num();
}
public static void num()throws Exception
{
int x=4, y=0;
if(y==0)
{
throw new Exception("除数不能为0");
}
int m=x/y;
System.out.println(m);
}

编译结果:

Exception in thread "main" java.lang.Exception: 除数不能为0

三、自定义异常;


规则:

  1. 定义自定义异常类,继承至Exception类,重写其中的两个构造方法。
  2. 在异常所在方法的后面添加throws 语句,表示该方法有一个自定义异常类型的异常信息需要处理。
  3. 通过if语句设置条件,确定需要抛出异常的位置,使用throw 语句抛出自定义异常类的实例。

格式:

class 自定义异常名 extends Exception
{
public 自定义异常名()
{ }
public 自定义异常名(String msg)
{
super(msg);
}
}

例如:

public class Student
{
public static void main(String[] args)throws MyException
{
String username ="巴提";
if(username.length()<3)
{
throw new MyException("用户名小于三位");
}
System.out.println("用户名格式正确");
}
}
class MyException extends Exception
{
public MyException()
{ }
public MyException(String msg)
{
super(msg);
}
}

编译结果:

源代码.MyException: 用户名小于三位

最新文章

  1. 对oracle数据库Blob字段的操作
  2. Java --ClassLoader创建、加载class、卸载class
  3. 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
  4. BZOJ 3036 绿豆蛙的归宿
  5. 使用RecyclerView写树形结构的TreeRecyclerView
  6. 纯CSS的颜色渐变效果
  7. HW5.20
  8. Linux之sed详解
  9. Linux Mono OpenShift Cloud9 rhc
  10. 14.3.4 Phantom Rows 幻影行
  11. IOS ARC和非ARC文件混用
  12. jQuery的动态绑定事件的应用
  13. JAVAEE规范基础知识
  14. C# 曲线上的点(一) 获取指定横坐标对应的纵坐标值
  15. ipv4转化为ipv6
  16. 《剑指offer》总结二 之二叉树
  17. LeetCode之Add Two Numbers
  18. 4.3 if-else语句使用
  19. php 直接获取url参数赋值成变量。省去繁琐的获取参数,再一个个赋值
  20. zookeeper 安装 配置集群

热门文章

  1. C4C UI Design背景色
  2. multiset 用法复习
  3. lerna源码阅读
  4. P1494 小Z的袜子 莫队
  5. 手把手教你在netty中使用TCP协议请求DNS服务器
  6. 暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案
  7. 基于图的深度优先搜索策略(耿7.10)--------西工大noj
  8. nginx反向代理缓存配置
  9. Go语言基础一:环境配置与基础语法
  10. 发布自己的npm组件库