zoukankan      html  css  js  c++  java
  • 异常面试题

    检查性异常与非检查性异常区别

     
    检查性异常: 不处理编译不能通过 非检查性异常:不处理编译可以通过,如果有抛出直接抛到控制台。 运行时异常: 就是非检查性异常 非运行时异常: 就是检查性异常

    Error和Exception的区别

     
     error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。


    写出运行时异常5个

     
     例如:ClassCastException(类转换异常)
       IndexOutOfBoundsException(数组越界)
       NullPointerException(空指针)
       ArrayStoreException(数据存储异常,操作数组时类型不一致)
    还有IO操作的BufferOverflowException异常

    怎么自定义一个异常?

     
      继承Exception,在构造函数里写上你希望这个异常做的事情。

    例:

     

    public class MyException extends Exception 
    {
     public MyException (){ super();
    //可以省略 System.out.println("这是我自定义的一个异常"); }
     }

     

    运行时异常与非运行时异常有什么区别?

     
     异常分为checked exception和unchecked exception。 在编程中,我们能捕捉到的是前者,即checked exception.而uncheckded exception是我们不能预料到的,如运行时异常。
    Java 提供了两类主要的异常 :runtime exception 和 checked exception。 checked 异常也就是我们经常遇到的 IO 异常,以及 SQL 异常都是这种异常。 对于这种异常, JAVA 编译器强制要求我们必需对出现的这些异常进行 catch 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。
    但是另外一种异常: runtime exception ,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机 接管。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且这种异常还是最常见的异常之一。


    catch捕获异常的顺序

     

    先子类,后父类, 

     try{

    //当代码运行时候可能会发生异常的句子}

    catch{

    //处理异常的代码,让程序在异常之后执行该代码}

    finally{

    无论是否有这里面的代码都要执行 通常是进行资源清楚和关闭打开的文件等}

    {throws 总是出现在方法的声明中,用来标明该方法可能会抛出的各种异常throw 总是出现在方法体中,用来抛出一个异常异常主要分:运行时异常(RunTimeException 他的子类直接继承它 而它本身继承Exception)非运行时异常(直接继承Exception)在处理异常时候 可以使用多重catch 捕获异常排列顺序必须是从特殊到一般 最后一个是Exception类

    try里面有return ,是否执行finally以及执行的顺序问题

     
    执行顺序无异常是try finally return
             有异常并且catch中没有跳出程序块的语句时顺序是try catch finally return
    有异常并且catch中有跳出程序块的语句时是try catch(执行到跳出之前) 不管是否有异常,finally 都最后执行,除非是碰到System.exit(0)

    说说你是怎么处理异常的,throws、throw、try、catch、finally的含义?try中可以抛异常?

     
    Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如 果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。 用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。 throw语句用来明确地抛出一个"异常"。 throws用来标明一个成员函数可能抛出的各种"异常"。 Finally为确保一段代码不管发生什么"异常"都被执行一段代码。 可 以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上 面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句

    java中的异常处理机制
       

     
     捕获异常: 在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并 处理


    如何自定义异常

     
    使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。 在程序中使用自定义异常类,大体可分为以下几个步骤。 (1)创建自定义异常类。 (2)在方法中通过throw关键字抛出异常对象。 (3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。 (4)在出现异常方法的调用者中捕获并处理异常



    检查型异常和非检查型异常的主要区别在于其处理方式。检查型异常需要使用 try, catch和finally关键字在编译期进行处理,否则会出现编译器报错。对于非检查型异常则不需要这样做。Java中所有继承自 java.lang.Exception类的异常都是检查型异常,所有继承自RuntimeException的异常都被称为非检查型异常。

    try catch finally try里面放了个return 后面的还会执行吗

     
    return 后面的不执行,但是finally里面的会执行,除非是调用了System.exit(),那么finally里面的才不会调用

    如果

     

     

    try
       {method();
       System.out.println(""Hellow World"");}
    catch(Exception e)
        {System.out.println(""Exception"");}
    finally
           {System.out.println(""Finally"");}
    System.out.println(""Success"");

     

    如果方法不出异常输出什么?如果出异常输出什么?"
    不出异常输出:
    Hello World
    Finally
    Success
    出异常:
    Exception
    Finally
    Success 

  • 相关阅读:
    HDU 1507 Uncle Tom's Inherited Land*
    HDU 2527 Safe Or Unsafe (哈夫曼树)
    HDU More lumber is required
    HDU Machine Schedule
    HDU 3709 Balanced Number (数位DP)
    HDU Number Sequence (容斥原理)
    csharp: word or excel Convert to PDF
    csharp: winform using Microsoft.Ink(Tablet PC API) create Signature image
    Create Ms Word doc using Javascript And vbscript
    sql distinct
  • 原文地址:https://www.cnblogs.com/t0404/p/10291032.html
Copyright © 2011-2022 走看看