现在的位置: 首页 > 综合 > 正文

Java异常知识总结

2018年05月14日 ⁄ 综合 ⁄ 共 3737字 ⁄ 字号 评论关闭

Java异常知识总结<五个关键字:try,catch,throw,throws,finally>

1.      自己写程序时常见的异常举例:

除数为零,ArithmeticException(分母为零)

数组下标越界,ArrayIndexOutOfBoundsException,(下标超过数组长度)

找不到文件,ClassNotFoundException(找不到文件)

空指针异常,NullPointerException(对空对象的引用所造成)

类型转换异常,ClassCastException

2.      异常处理机制的特点:

<1>允许一个程序捕获异常,然后继续执行程序。

<2>它能保证错误情况下不会妨碍正常的程序流程。

<3>当发生特殊情况时,它们在独立的代码块中处理,与正常的执行代码相关联。

3. 产生一个异常意思是:由java虚拟机自动实例化一个异常类的对象。(抛出异常)

4.   异常类型:检查性异常和非检查性异常。

5.   try/catch:

<1>.catch是用来捕获并处理try块抛出的异常的代码块.

<2>.没有try块,catch块不能单独存在,catch块可以有多个。

6.    finally:

       存在try/catch之后,无论有无异常抛出,finally中的内容都要执行。

唯一执行不了的情况是在被保护的代码中执行了System.exit(0);

7.     throw

        <1>.throw总是出现在函数体中,用来抛出一个异常。

        <2>.程序会在throw语句后立即终止,它后面的语句执行不到,

      

8.自定义异常

   <1>.

<2>.

class zidingyiException extends Exception{

String msg;

zidingyiException(int age){

msg="age can not be positive!";

}

public String toString(){

return msg;

}

}

 

class Age{

public void intage(int n) throws zidingyiException{//

if(n<0||n>120){

zidingyiException e=new zidingyiException(n);

throw e; //是一个转向语句,抛出对象实例,停止执行后面的代码

}

if(n>=0){

System.out.print("合理的年龄!");

}

}

 

public static void main(String args[]) {

int a=-5;

try { //try catch 必需有

Age age = new Age();

age.intage(a);//触发异常

System.out.print("抛出异常后的代码") ;//这段代码是不会被执行的,程序已经被转向

} catch (myException ex) {

System.out.print(ex.toString());

}

finally{//无论抛不抛异常,无论catch语句的异常类型是否与所抛出的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。

System.out.print("进入finally ");

}

}

}

9.throws关键字

<1>.throws总会出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。

 

如果一个方法执行时可能发生异常,那么要想让调用它的人知道并处理可能发生的异常那么就在方法名后加上throws关键字声明可能出现的异常类型,然后调用它的人调用该方法时就要使用try/catch,否则编译就会出错。

 

在一个方法内使用throw关键字抛出了异常对象,如果没有try/catch语句对其进行处理,则此方法应声明抛出异常,由方法调用者进行处理。

10.throw和throws区别:

 throw 是语句抛出一个异常;

throws 是方法抛出异常(可以是多个,用逗号隔开);

 

throw要么和try-catch-finally语句配套使用,要么与throws配套使用;

throws可以单独使用,然后再由处理异常的方法捕获。

 

throw是具体向外抛异常的动作,所以它是抛出一个异常实例;

throws主要是声明这个方法会抛出这种类型的异常,使其他地方调用它时知道要捕获这个异常。

 

throw则是抛出了异常,执行throw则一定抛出了某种异常;

throws表示出现异常的一种可能性,并不一定会发生这些异常。

 

   

 

java异常面试题总结

1. public class  classTest  {

publicstaticvoid main(String[]args) {

       System.out.println(new classTest ().test());

    }

    publicint test()

    {

       int x = 1;

       try

       {

           return x;

       }

       finally

       {

           ++x;

       }

    }

}

结果:1

2.

public class  smallT{

public static void  main(String args[]){

smallT t  = new smallT();

 

                   int  b = t.get();

 

                  System.out.println(b);

 

         }

 

         public int  get()

 

         {

 try    {return 1;}

 

                   finally{return2;}

 

         }}

 

返回的结果是2

3. public class Test{

     public static void main(String[]args) {

System.out.println(new Test().test());;

}

int test() {

try      {return func1();}

 

          finally   {return func2();}

}

int func1()

{

System.out.println("func1");

 return 1;

}

int func2()

{

System.out.println("func2");

 return 2;

}  

}

 

-----------执行结果-----------------

 

func1

 

func2

 

2

4.  final, finally, finalize的区别。

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

内部类要访问局部变量,局部变量必须定义成final类型。

finally是异常处理语句结构的一部分,表示总是执行。

finalizeObject类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用

 

5. 运行时异常与一般异常有何异同?

 

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

6. errorexception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

 

//finally肯定是执行的

publicclass Test {

 

      publicstaticvoid
main(String[] args){

          System.out.println(new Test().test());

      }

      Integer test(){

          Integer x =new Integer(1);

          try{return
x;}
//如果是基本类型,就是return 1;待命,等finally执行完,在接着//return回去,如果是对象,return的是一个地址引用,然后用print的时候调用了对象的toString方法。所以结果是2.

          finally{x.setInt(2);}//如果这里直接用x
= new Integer(2);
打印出的结果还是1,因为这个x地址已经变了,不影响上个地址int i的结果,所以调用toString时打印的是上个i的值。

      }

}

class Integer{

    int i;

    Integer(int i){

        this.i = i;

    }

    publicvoid setInt(int
j) {

        this.i = j;

    }

    public String toString(){

        return i+"";

    }

}

//看完这个或许对你有帮助

 

 

 

 

【上篇】
【下篇】

抱歉!评论已关闭.