在Java中,根据错误性质将运行错误分为两类:错误和异常。
在Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。生成的异常对象将传递Java运行时系统,这一异常的产生和提交过程称为抛弃(throw)异常。
当Java运行时系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这类异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。

1.Throwable类是 Java 语言中所有错误或异常的超类。它的两个子类是Error和Exception;

2.Error是Throwable
的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然   ThreadDeath
错误是一个“正规”的条件,但它也是 Error 的子类,因为大多数应用程序都不应该试图捕获它。在执行该方法期间,无需在其 throws
子句中声明可能抛出但是未能捕获的 Error 的任何子类,因为这些错误可能是再也不会发生的异常条件。

Error类包括一些严重的程序不能处理的系统错误类,如内存溢出、虚拟机错误、栈溢出等。这类错误一般与硬件有关,与程序本身无关,通常由系统进行处理,程序本身无法捕获和处理。

1)OutOfMemoryError内存溢出一般是出现在申请了较多的内存空间没有释放的情形。

  1. //java.lang.OutOfMemoryError -Xmx150m
  2. try {
  3. byte[] b = new byte[1024*1024*600];
  4. } catch (OutOfMemoryError e) {
  5. e.printStackTrace();
  6. }

运行时,设置jvm最大的heap内存150m,此时申请600m的内存,因此会报error

java.lang.OutOfMemoryError: Java heap space

2)java.lang.StackOverflowError
堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。

  1. public static void main(String[] args) {
  2. method();
  3. }
  4.  
  5. public static void method() {
  6. while (true) {
  7. method();
  8. }
  9. }

无限次的递归调用出现

Exception in thread "main" java.lang.StackOverflowError

3.Exception类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。
有些异常在编写程序时无法预料的,如中断异常、非法存取异常等。为了保证程序的健壮性,Java要求必须对这些可能出现的异常进行捕获,并对其进行处理。

4.RuntimeException类是Exception类的子类。RuntimeException是那些可能在
Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的RuntimeException 的任何子类都无需在
throws 子句中进行声明。它是Exception的子类。

常见的运行时异常:

  1. try {
  2. String str = new String("AA");
  3. str = null;
  4. System.out.println(str.length());
  5. } catch (NullPointerException e) {
  6. e.printStackTrace();
  7. System.out.println("出现空指针的异常了");
  8. }
  9.  
  10.  
  11. try {
  12. Object obj = new Date();
  13. String str = (String) obj;
  14. } catch (ClassCastException e) {
  15. System.out.println("出现类型转换的异常了");
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. } finally {
  19. System.out.println("处理完异常后的逻辑");
  20. }
  21.  
  22.  
  23. try {
  24. int i = 10;
  25. System.out.println(i / 0);
  26. } catch (ArithmeticException e) {
  27. System.out.println("算术异常"+e.getMessage());
  28. }
  29.  
  30.  
  31.  
  32. try {
  33. int[] i = new int[10];
  34. System.out.println(i[-10]);
  35. } catch (ArrayIndexOutOfBoundsException e) {
  36. System.out.println("数组下标越界的异常!");
  37. }

5. IOExeption类是Exception类的子类。
从一个不存在的文件中读取数据
越过文件结尾继续读取

连接一个不存在的URL

    1. FileInputStream fis = null;
    2. try {
    3. fis = new FileInputStream(new File("hello1.txt"));
    4. int b;
    5. while ((b = fis.read()) != -1) {
    6. System.out.print((char) b);
    7. }
    8.  
    9. } catch (FileNotFoundException e1) {
    10. System.out.println("文件找不到了!");
    11. } catch (IOException e1) {
    12. System.out.println(e1.getMessage());
    13. } finally {
    14. try {
    15. fis.close();
    16. } catch (IOException e) {
    17. e.printStackTrace();
    18. }
    19. }

详解Java异常Throwable、Error、Exception、RuntimeException的区别的更多相关文章

  1. 详解 java 异常

    Throwable 可以用来表示任何可以作为异常抛出的类(注意,是类不是接口),分为两种: Error(注意!error也是可以throw的,但是不建议) 和 Exception. 其中 Error ...

  2. 详解Java Spring各种依赖注入注解的区别

    注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.Controller.Repository.Comp ...

  3. java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的

    本文将详解java中的异常和异常处理机制 异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常. Java异常的分类和类结构图 1.Java中的所 ...

  4. Java中Error和Exception的异同以及运行时异常(Runtime exception)与检查型异常(checked exception)的区别

    一:Error和Exception的基本概念: 首先Exception和Error都是继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕 ...

  5. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  6. 详解java动态代理机制以及使用场景

    详解java动态代理机制以及使用场景 https://blog.csdn.net/u011784767/article/details/78281384 深入理解java动态代理的实现机制 https ...

  7. 详解Java GC的工作原理+Minor GC、FullGC

    详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...

  8. 实例详解 Java 死锁与破解死锁

    锁和被保护资源之间的关系 我们把一段需要互斥执行的代码称为临界区.线程在进入临界区之前,首先尝试加锁 lock(),如果成功,则进入临界区,此时我们称这个线程持有锁:否则呢就等待,直到持有锁的线程解锁 ...

  9. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

随机推荐

  1. browsersync按照官网,然后本地配置后,动态监听时不起作用

    官方API也未曾标注,要添加文件指向 --files 所以解决方案就是: browser-sync start --proxy "tp5.cn" --files "css ...

  2. Unique Binary Search Trees I&II——给定n有多少种BST可能、DP

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  3. 【Excle数据透透视表】如何删除数据透视表

    选中区域A4:C17,在键盘上按DELETE键删除,结果提示: 那么如何删除呢? 解决方案 选中整个数透视表,再删除 具体操作: 选中整个数据透视表→DELETE 注意:删除之后,源数据不会受到影响

  4. matlab-2

    function varargout = gmm(X, K_or_centroids) % ====================================================== ...

  5. aar格式

    aar包是Android Library Project的二进制公布包. 文件的扩展名是aar,并且maven包类型也应该是aar. 只是这文件本身就是一个简单的zip文件.里面有例如以下的内容: / ...

  6. H5缓存机制学习记录

    参考文章:http://mp.weixin.qq.com/s?__biz=MTEwNTM0ODI0MQ==&mid=404724239&idx=1&sn=e0a2887f9ff ...

  7. 一步一步实现视频播放器client(二)

    实现主体界面:                 222.png (64.46 KB, 下载次数: 0) 下载附件  保存到相冊 前天 21:02 上传 比較常见的一种布局.以下几个button.点击后 ...

  8. HDFS源码分析之数据块及副本状态BlockUCState、ReplicaState

    关于数据块.副本的介绍,请参考文章<HDFS源码分析之数据块Block.副本Replica>. 一.数据块状态BlockUCState 数据块状态用枚举类BlockUCState来表示,代 ...

  9. 【BZOJ4519】[Cqoi2016]不同的最小割 最小割树

    [BZOJ4519][Cqoi2016]不同的最小割 Description 学过图论的同学都知道最小割的概念:对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分 ...

  10. Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)

    sftp -b batchfile username@remote_host 报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic, ...