异常部分

  Java中的异常处理机制的简单原理和应用。

  Java程序违反了Java的语义规范时,Java虚拟机就会将发生的错误标示为一个异常。违犯语义规则包含两种情况。一种是Java类库内置的语义检查。例如发生数组下标越界,会引发IndexOutBoundsException;访问null的对象时会引发NullPointerException。另一种就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。(所有的异常都是java.lang.Thowable的子类)

  error和exception有什么区别。

  error表示系统级的错误和程序不必处理的异常,这种异常恢复不是不可能但会很困难,情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况。

    exception表示需要捕捉或者需要程序处理的异常,是一种设计或实现的问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

  try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
  会执行,在return前执行。

  Java语言如何进行异常处理,关键字throws,throw,try,catch,finally分别代表什么意思?在try块中可以抛出异常么?

  Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其他子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws、finally。一般情况下使用try来执行一段程序,如果出现异常系统会抛出(throws)一个异常,这个时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;

    try用来指定预防所有“异常”的程序;

    catch子句紧跟在try后面,用来指定你想要捕捉的“异常”的类型;

    throw语句用来明确地抛出一个“异常”;

    throws用来标明一个成员函数可能抛出的各种“异常”;

    Finally为确保一段代码不管发生什么“异常”都被执行一段代码;

    可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其它代码。每当遇到一个try语句,“异常”的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try语句。

 

  异常表示在程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的操作中可能遇到的异常,是一种常见的运行异常。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明未被捕获的运行时异常。

  常见的运行时异常。

ArithmeticException - 算术运算中,被0除或模除;


ArrayIndexOutOfBoundsException - 数组越界访问;


ArrayStoreException - 数据存储异常,写数组操作时,对象或数据类型不兼容;


ClassCastException - 类型转换异常;


IllegalArgumentException - 方法的参数无效;


IllegalThreadStateException - 试图非法改变线程状态,比方说试图启动一已经运行的线程;


NullPointerException - 试图访问一空对象的变量、方法或空数组的元素;


NumberFormatException - 数据格式异常,试图把一字符串非法转换成数值(或相反);


SecurityException - 如果Applet试图执行一被WWW浏览器安全设置所禁止的操作;


IncompatibleClassChangeException - 如改变了某一类定义,却没有重新编译其他引用了这个类的对象。如某一成员变量的声明被从静态改变为非静态,但其他引用了这个变量的类却没有重新编译,或者相反。如删除了类声明中的某一域或方法,但没有重新编译那些引用了这个域或方法的类;


OutOfMemoryException - 内存不足,通常发生于创建对象之时;


NoClassDefFoundException - JAVA运行时系统找不到所引用的类;


IncompatibleTypeException - 试图实例化一个接口,Java运行时系统将抛出这个异常;


UnsatisfiedLinkException - 如果所需调用的方法是C函数,但Java运行时系统却无法连接这个函数;


InternalException - 系统内部故障所导致的异常情况,可能是因为Java运行时系统本身的原因。

  阐述final、finally、finalize的区别。

  final:修饰符(关键字);如果一个类被声明为final,意味着它不能再派出生新的子类,不能作为父类被继承,因此一个类不能即被声明为abstract的,又被声明为final的;将变量或方法声明为final,可以保证它们在使用中不被改变;被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;被声明为final的方法也同样只能使用,不能重载。

   finally:在异常处理时提供finally块来执行任何清除操作;如果跑出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。

   finalize:方法名;Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前作必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖了finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除这个对象之前对这个对象的调用。

 

posted @ 2018-10-12 16:05  國仕無雙  阅读(322)  评论(0编辑  收藏  举报