异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题。

  今天,来列一下 Java 中经常遇到的前 10 个异常,排名不分先后。

  1、NullPointerException

  空指针异常,操作一个 null 对象的方法或属性时会抛出这个异常。具体看这篇文章:Java 避免空指针的 5 个案例。

  2、OutOfMemoryError

  内存异常异常,这不是程序能控制的,是指要分配的对象的内存超出了当前最大的堆内存,需要调整堆内存大小(-Xmx)以及优化程序。

  3、IOException

  IO,即:input, output,我们在读写磁盘文件、网络内容的时候经常会生的一种异常,这种异常是受检查异常,需要进行手工捕获。

  如文件读写会抛出 IOException:

  public int read() throws IOException

  public void write(int b) throws IOException

  4、FileNotFoundException

  文件找不到异常,如果文件不存在就会抛出这种异常。

  如定义输入输出文件流,文件不存在会报错:

  public FileInputStream(File file) throws FileNotFoundException

  public FileOutputStream(File file) throws FileNotFoundException

  FileNotFoundException 其实是 IOException 的子类,同样是受检查异常,需要进行手工捕获。

  5、ClassNotFoundException

  类找不到异常,Java开发中经常遇到,是不是很绝望?这是在加载类的时候抛出来的,即在类路径下不能加载指定的类。

  看一个示例:

  public staticClassgetExistingClass(ClassLoader classLoader, String className) {

  try {

  return (Class) Class.forName(className, true, classLoader);

  }

  catch (ClassNotFoundException e) {

  return null;

  }

  }

  预览

  它是受检查异常,需要进行手工捕获。

  6、ClassCastException

  类转换异常,将一个不是该类的实例转换成这个类就会抛出这个异常。

  如将一个数字强制转换成字符串就会报这个异常:

  Object x = new Integer(0);

  System.out.println((String)x);

  预览

  这是运行时异常,不需要手工捕获。

  7、NoSuchMethodException

  没有这个方法异常,一般发生在反射调用方法的时候,如:

  public Method getMethod(String name, Class... parameterTypes)

  throws NoSuchMethodException, SecurityException {

  checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);

  Method method = getMethod0(name, parameterTypes, true);

  if (method == null) {

  throw new NoSuchMethodException(getName() + . + name + argumentTypesToString(parameterTypes));

  }

  return method;

  }

  预览

  它是受检查异常,需要进行手工捕获。

  8、IndexOutOfBoundsException

  索引越界异常,当操作一个字符串或者数组的时候经常遇到的异常。

  

  如图所示,它是运行时异常,不需要手工捕获。

  9、ArithmeticException

  算术异常,发生在数字的算术运算时的异常,如一个数字除以 0 就会报这个错。

  double n = 3 / 0;

  这个异常虽然是运行时异常,可以手工捕获抛出自定义的异常,如:

  public static Timestamp from(Instant instant) {

  try {

  Timestamp stamp = new Timestamp(instant.getEpochSecond() * MILLIS_PER_SECOND);

  stamp.nanos = instant.getNano();

  return stamp;

  } catch (ArithmeticException ex) {

  throw new IllegalArgumentException(ex);

  }

  }

  10、SQLException

  SQL异常,发生在操作数据库时的异常。

  如下面的获取连接:

  public Connection getConnection() throws SQLException {

  if (getUser() == null) {

  return DriverManager.getConnection(url);

  } else {

  return DriverManager.getConnection(url, getUser(), getPassword());

  }

  }

  又或者是获取下一条记录的时候:

  boolean next() throws SQLException;

  预览

  它是受检查异常,需要进行手工捕获。

  栈长这里只列举了 10 个 Java 中最常见的基本异常,

10 个深恶痛绝的 Java 异常的更多相关文章

  1. 10 个深恶痛绝的 Java 异常。。

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 什么是异常及异常的分类请看这篇文章:一张图搞清楚 Java ...

  2. Java基础10:全面解读Java异常

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  3. 10个关于Java异常的常见问题

    这篇文章总结了十个经常被问到的JAVA异常问题: 1.检查型异常VS非检查型异常 简单的说,检查型异常是指需要在方法中自己捕获异常处理或者声明抛出异常由调用者去捕获处理: 非检查型异常指那些不能解决的 ...

  4. 夯实Java基础系列10:深入理解Java中的异常体系

    目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...

  5. Java异常的10个关键知识点

    前言 总结了Java异常十个关键知识点,面试或者工作中都有用哦,加油. 一. 异常是什么 异常是指阻止当前方法或作用域继续执行的问题.比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异 ...

  6. 译文《最常见的10种Java异常问题》

    封面:洛小汐 译者:潘潘 知彼知己,方能百战不殆. 前言 本文总结了有关Java异常的十大常见问题. 目录 检查型异常(checked) vs. 非检查型异常(Unchecked) 异常管理的最佳实践 ...

  7. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  8. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  9. 第11章 Java异常与异常处理

    1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...

随机推荐

  1. java反射——方法

    大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现.那么什么是反射呢?JAVA反射机制是在运行状 ...

  2. 巨蟒python全栈开发-第13天 内置函数 匿名函数lambda

    一.今日内容总览 1.内置函数(1):并不是每一个内置函数都是那么常用 上菜:内置函数部分//思维导图:https://www.processon.com/view/link/5b4ee15be4b0 ...

  3. Python2 显示 unicode

    用户想要看的是 u'中文' 而不是 u'\u4e2d\u6587',但是在 Python2 中有时并不能实现. 转译 转义字符是这样一个字符,标志着在一个字符序列中出现在它之后的后续几个字符采取一种替 ...

  4. Css选择器定位详解

    1.使用 class 属性来定位元素,方法如下: driver.findElement(By.cssSelector("input.login")); 即可以先指定一个 HTML的 ...

  5. rest_framework 响应器

    一 作用 根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件.用户请求URL:    http://127.0.0.1:8000/test/?format=json    http:/ ...

  6. Hibernate框架ORM的实现原理

    1. 什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库 ...

  7. Django基础(ORM)

    数据库与ORM 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlite ...

  8. Django基础一

    Django基础一 Web框架本质 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演 ...

  9. LINQ 获取当前数组中出现次数最多的元素

    LINQ 获取当前数组中出现次数最多的元素 1  List<string> a = new List<string>();              a.Add(        ...

  10. cdojQ - 昊昊爱运动 II

    地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) ...