Java学习日记 week3 垃圾回收机制,异常处理

一、垃圾回收机制

  传统的C/C++语言,需要程序员负责回收已经分配内存。显式回收垃圾回收的缺点:

    1)程序忘记及时回收,从而导致内存泄露,降低系统性能。

    2)程序错误回收程序核心类库的内存,导致系统崩溃。

  Java语言不需要程序员直接控制内存回收,是由JRE在后台自动回收不再使用的内存,称为垃圾回收机制。

    1)可以提高编程效率。

    2)保护程序的完整性。

    3)其开销影响性能。Java虚拟机必须跟踪程序中有用的对象,确定哪些是无用的。

  垃圾回收机制的特点

    1)垃圾回收机制回收JVM堆内存里的对象空间,不负责回收栈内存数据。

    2)对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力。

    3)垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。

    4)可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。

    5)现在的JVM有多种垃圾回收实现算法,表现各异。

    6)垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新激活对象)。

    7)程序员可以通过System.gc()或Runtime.getRuntime().gc()通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确 定。

    8)永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

二、异常处理机制

  1. Error和Exception的区别

    1)Error类,表示仅靠程序本身无法恢复的严重错误,比如说内存溢出、动态链接异常、虚拟机错误。应用程序不应该抛出这种类型的对象。假如出现这

种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以在进行程序设计时,应该更关注Exception类。

    2)Exception类,由Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等。它的各种不同子类分别对应不同类

型异常。可分为两类:Checked异常和Runtime异常
  

  2. Checked异常和Runtime异常的区别

    1)运行时异常:包括RuntimeaException及其所有子类。不要求程序必须对它们作出处理,比如InputMismatchException、

ArithmeticException、NullPointerException等。即使没有使用try-catch或throws进行处理,仍旧可以进行编译和运行。如果运行时发生异常,会输出异常

的堆栈信息并中止程序执行。
    2)Checked异常(非运行时异常):除了运行时异常外的其他异常类都是Checked异常。程序必须捕获或者声明抛出这种异常,否则出现编译错误,无

法通过编译。处理方式包括两种:通过try-catch捕获异常,通过throws声明抛出异常从而交给上一级调用方法处理。

  3. Java异常处理try-catch-finally的执行过程  

    try-catch-finally程序块的执行流程以及执行结果比较复杂。基本执行过程如下:

    程序首先执行可能发生异常的try语句块。如果try语句没有出现异常则执行完后跳至finally语句块执行;如果try语句出现异常,则中断执行并根据发生

的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。catch语句块执行完后程序会继续执行finally语句块。  

    finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。

    需要注意的是即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。

  4. 异常处理中throws和throw的区别

    1)作用不同:throw用于程序员自行产生并抛出异常;throws用于声明在该方法内抛出了异常

    2)使用的位置不同:throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。

    3)内容不同:throw抛出一个异常对象,且只能是一个;throws后面跟异常类,而且可以有多个。

posted @ 2017-04-23 11:14  Z-o-Y  阅读(320)  评论(0编辑  收藏  举报