异常是 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. 《挑战程序设计竞赛》2.3 动态规划-基础 POJ3176 2229 2385 3616 3280

    POJ3176 Cow Bowling 题意 输入一个n层的三角形,第i层有i个数,求从第1层到第n层的所有路线中,权值之和最大的路线. 规定:第i层的某个数只能连线走到第i+1层中与它位置相邻的两个 ...

  2. As of Flume 1.4.0, Avro is the default RPC protocol.

    Flume 1.8.0 Developer Guide — Apache Flume http://flume.apache.org/FlumeDeveloperGuide.html The remo ...

  3. Storm-源码分析汇总

    Storm Features Storm 简介 Storm Topology的并发度 Storm - Guaranteeing message processing Storm - Transacti ...

  4. <2014 04 15> C++语言回顾精要(原创By Andrew)

    C++语言回顾精要 <Visual C++程序设计>张岳新,这本书是很多学校的本科生C++教学用书,今天重新拿来翻了一遍.跟很多国人写的技术书籍一样,写书并不是为了让初学者看懂入门,而是为 ...

  5. java基础09 数组的使用

    /** * 求数组中的最大值 */ @Test public void test14(){ //定义一个数组 参赛的选手 int [] nums={50,20,30,80,100,90}; //定义一 ...

  6. java URL 利用网址api 查出手机号归属地

    手机号码归属地查询api接口 1.淘宝网API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=手机号码参数:tel:手机号码返 ...

  7. Sum---poj1844(数学题)

    题目链接:http://poj.org/problem?id=1844 题意:给一个整数n,求当n由1到k的连续整数加或减组成时的最小的k. 如果n全部由加法组成,那么k可以组成k(k+1)/2,设减 ...

  8. 001-spring结合quartz使用

    一.添加pom 二.定义业务类 public class TestJobTask{ /** *业务逻辑处理 */ public void service(){ /**业务逻辑*/ .. } } 二.配 ...

  9. Centos学习笔记1-基本部分

    1:查看系统的使用状态: 谁在线:who 网络连接状态:netstat  –a 后台执行程序:ps –aux 2:关机 关机:shutdown   或者 shutdown –h now 重启:rebo ...

  10. POJ - 2763 Housewife Wind (树链剖分/ LCA+RMQ+树状数组)

    题意:有一棵树,每条边给定初始权值.一个人从s点出发.支持两种操作:修改一条边的权值:求从当前位置到点u的最短路径. 分析:就是在边可以修改的情况下求树上最短路.如果不带修改的话,用RMQ预处理LCA ...