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

什么是异常及异常的分类请看这篇文章:一张图搞清楚 Java 异常机制。

今天,栈长来列一下 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 static <T> Class<T> getExistingClass(ClassLoader classLoader, String className) {try {return (Class<T>) 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 中最常见的基本异常,另外,栈长已经整理了 Java 系列核心知识点文章,关注Java技术栈微信公众号,在后台回复关键字:java,即可获取。

话说你遇到的最多的是哪个呢?欢迎留言分享。

本文原创首发于微信公众号:Java技术栈(id:javastack),关注公众号在后台回复 "java" 可获取更多,转载请原样保留本信息。

10 个深恶痛绝的 Java 异常。。相关推荐

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

    2019独角兽企业重金招聘Python工程师标准>>> 异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定 ...

  2. java报错空指针异常_夯实基础:认识一下这10 个深恶痛绝的 Java 异常

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

  3. java抛出自定义异常_10 个深恶痛绝的 Java 异常。。

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

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

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

  5. java异常 说服力_异常常见面试题目

    1) Java中什么是Exception? 这个问题经常在第一次问有关异常的时候或者是面试菜鸟的时候问.我从来没见过面高级或者资深工程师的 时候有人问这玩意,但是对于菜鸟,是很愿意问这个的.简单来说, ...

  6. java 异常 最佳实践_处理Java异常的10种最佳实践

    java 异常 最佳实践 在本文中,我们将看到处理Java异常的最佳实践. 用Java处理异常不是一件容易的事,因为新手很难理解,甚至专业的开发人员也可能浪费时间讨论应该抛出或处理哪些Java异常. ...

  7. 处理Java异常的10种最佳实践

    在本文中,我们将看到处理Java异常的最佳实践. 用Java处理异常不是一件容易的事,因为新手很难理解,甚至专家级开发人员也可能浪费时间讨论应该抛出或处理哪些Java异常. 因此,最大的开发公司对如何 ...

  8. 最常见的10种Java异常问题!

    封面:洛小汐 译者:潘潘 前言 本文总结了有关Java异常的十大常见问题. 目录 检查型异常(checked) vs. 非检查型异常(Unchecked) 异常管理的最佳实践箴言 为什么在try代码块 ...

  9. numberformatexception是什么异常_译文《最常见的10种Java异常问题》

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

最新文章

  1. android weex跳转闪退,关于weex页面在android端跳转的问题
  2. Linux下git的使用——将已有项目放到github上
  3. Android之项目中调用已有.so库
  4. 自然语言处理 —— 2.3 词嵌入的特性
  5. Must be between v0 and v15, inclusive解决办法
  6. python爬虫06
  7. UIView用户事件响应
  8. ajax上传图片 java_Java+ajax+图片上传
  9. 论PMP和PRINCE2的价值?
  10. WPS Office常用快捷键大全
  11. 计算机提示应用程序无法启动,电脑应用程序无法正常启动提示0x000007b怎么办?...
  12. 为什么现在很多人不看好商汤科技?
  13. c语言程序常用的数学函数,C语言函数——常用数学函数
  14. access 套用表格_Word表格编辑技巧:在Word中使用Access的数据-word技巧-电脑技巧收藏家...
  15. 给html网页加背景图
  16. 拉普拉斯变换的物理意义是什么
  17. firebug “阻挡”
  18. 【职场进阶】做好项目管理,先从明确职责开始
  19. 投资者选择量化基金的四个指标
  20. 计算机毕业生工作收入调查,大学毕业生收入调查:最高薪的工作是它

热门文章

  1. debug运行可以,release运行报错的原因及修改方法
  2. 人工智能和机器学习领域有哪些有趣的开源项目
  3. codecheck_use_record
  4. SVO 半直接视觉里程计
  5. C#实现光盘做启动盘
  6. GDAL中GDALDataset::RasterIO分块读取的实现
  7. 【数据库】适用于SQLite的SQL语句(三)
  8. 微信小程序万里目_微信小程序学习用推荐:破音万里:音频播放,音乐列表
  9. python 区域和检索_304. 二维区域和检索(Python)
  10. android wear无法启用,android-wear – 无法创建Android虚拟设备,“没有为此目标安装系统映像”...