各种异常的终结
今天对异常进行了一次总结和归纳,可能是和我以前的习惯问题吧,使用myeclipse直接一点就可以使用 try catch语句自动的抛出异常,知道一心想进黑马才用心的去专研了一下各种异常的情况,下面就对几种常见的异常进行一次小小的总结:
所有的异常都继承自RuntimeException类,首先是类型转换异常,这种异常发生在将一个对象转换成非继承体系上的类的时候。
如以下代码所示:
1 package com.itmeima.zxd; 2 3 public class ExceptionDemo { 4 5 /** 6 * @author 张学东 7 * 运行时的各种异常 8 */ 9 public static void main(String[] args) { 10 Book book=new NovelBook(); 11 Object o=book; 12 String s=(String)o; 13 System.out.println(s); 14 } 15 16 } 17 class Book{ 18 private String title; 19 private String content; 20 private String author; 21 22 } 23 class NovelBook extends Book{ 24 private String type="爱情"; 25 public String toString(){ 26 return "主题是"+type; 27 } 28 }
以上代码在运行时会弹出以下异常信息:
Exception in thread "main" java.lang.ClassCastException: com.itmeima.zxd.NovelBook cannot be cast to java.lang.String
at com.itmeima.zxd.ExceptionDemo.main(ExceptionDemo.java:12)
异常ClassCastException就是类型转换异常的信息,这是由于类NovelBook可以被转换成其父类 Book (Book book=new NovelBook();)或者基类Object,但是却不能转换成String类型的对象。
我们注意到代码System.out.println(s);并没有被执行,这是运行时异常的特点,一旦代码发生了运行时异常,就会立即停止运行并抛出异常。
第二种常见的异常是数组访问越界的异常ArrayIndexOutOfBoundsException.这种异常在访问不存在的数组元素是发生。如以下代码所示:
package com.itmeima.zxd; public class ArrayIndexOutOfBoundsExceptionDemo { /** * @author 張學東 * 各种异常的总结 * 数据访问越界异常 */ public static void main(String[] args) { int[] i=new int[] {1,2,3,4,5}; for(int j=0;j<6;j++){ System.out.println(i[j]); } } }
程序运行后会抛出以下异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at com.itmeima.zxd.ArrayIndexOutOfBoundsExceptionDemo.main(ArrayIndexOutOfBoundsExceptionDemo.java:12)
最后一种异常是空指针异常 NullpointerException,这种异常发生在一个引用未初始化的对象的时候。如以下代码所示:
package com.itmeima.zxd; public class nullPointerException { /** * @author 张学东 * @exception nullPointerException */ public static void main(String[] args) { MyClass s=null; s.getName(); } } //空指针异常 class MyClass{ private String name; //姓名 public String getName(){ //get方法 return name; } public void setName(String name){ //set方法 this.name=name; } }
这段代码运行后会报以下错误:
Exception in thread "main" java.lang.NullPointerException
at com.itmeima.zxd.nullPointerException.main(nullPointerException.java:11)
这是由于MyClass类型的对象s还没有被初始化,由于系统没有为其发配内存和运算所需的资源,因此直接调用s.getName()会由于没有可供的资源而抛出异常。
出以上异常以外,还有几种异常 暂时还没有终结出来。。。