public class ExceptionDemo {
/**
* @author 张学东
* 运行时的各种异常
*/
public static void main(String[] args) {
Book book=new NovelBook();
Object o=book;
String s=(String)o;
System.out.println(s);
}
}
class Book{
private String title;
private String content;
private String author;
}
class NovelBook extends Book{
private String type="爱情";
public String toString(){
return "主题是"+type;
}
}
以上代码在运行时会弹出以下异常信息:
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.这种异常在访问不存在的数组元素是发生。如以下代码所示:
程序运行后会抛出以下异常:
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()会由于没有可供的资源而抛出异常。
出以上异常以外,还有几种异常 暂时还没有总结出来。。。