java 异常(上)

之前我们介绍的类,接口,枚举都是在表示和操作数据,操作的过程中可能有很多出错的情况,出错的原因是多方面的,有的是不可控的内部原因,比如磁盘满了,内存不足,有些是不可控的外部原因,比如网络连接中断,更多的可能是程序编写错误,比如引用变量未初始化就直接调用实例方法。

public static void main(String[] args) { String s = null; s.indexOf("a"); System.out.println("end"); }

java 系统执行到s.indexOf("a") 发现s的值为null,没有办法继续往下执行了,这时就启用异常机制,首先创建一个异常对象,这里是类NullPointerException,然后查找谁能处理这个异常,在代码中,没有代码能处理这个异常,java启用默认处理机制,那就是打印异常栈信息到屏幕,并退出程序。

java默认异常处理机制是退出程序,所以后面的打印end不会执行,

throw关键字可以与return 关键字进行对比,return 代表正常退出,throw代表异常退出,return的返回位置是确定的,就是上一层调用者,而throw位置则是不确定的,由异常处理机制动态确定,异常处理机制会从当前函数开始查找,看谁捕获了这个异常,当前函数没有就看上一层,直到主函数,如果主函数也没有,则就使用默认机制,即输出异常栈信息并退出,这就是我们在屏幕中看到的,对于屏幕中的异常信息,用户看不明白,所以就需要给用户一个更友好的信息。

例:

public static void main(String[] args)
  {
  if (args.length < 1)
  {
   System.out.print("请输入数字");
  }
 
  try
  {
   int num = Integer.parseInt(args[0]);
   System.out.println(num);
  }
  catch(NumberFormatException e)
  {
   System.err.println("参数" + args[0] + "不是有效的数字,请输入数字");
  }
 
  System.out.print("继续执行");

  }

结果:

参数abc不是有效的数字,请输入数字
继续执行

捕获异常后,程序不会异常退出,程序会继续执行异常外的代码。

异常类体系

1. 以Throwable 为根,java API定义了非常多的异常类,表示各种类型的异常,Exception 分为运行时异常和编译行异常,编译性异常类似IOEXCEPTION ,在编译时就必须处理,否则程序编译失败,Error 由java系统自己调用,应用程序不应抛出和处理。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值