1.异常是指在程序运行时出现的非正常事件.比如说:文件无法打开或创建以及空对象的操作。由于异常事件会导致错误,所以一个好的程序必须要对这些异常进行处理,来增加程序的“健壮性”。
2.在C语言中,为了处理异常,通常是通过调用函数通过返回值来处理的。而Java,多采用异常处理机制,这样能使程序更加易读,易懂,以及维护。
3.Throwable和throw以及throw三个关键字的区别:
Throwable是所有异常类的超类(父类)。它的直接子类有Exception和Error.Error类及其子类用来处理程序中的异常时,一般是与硬件有关,不需要程序员去处理,Exception类及其子类用来处理异常时,一般是要我们程序员自己捕获并处理的。throw用于抛出异常,throws用于声明有异常抛出。
抛出异常的一般格式为:throw 异常对象名;或者,throw new 异常类名();
两种形式本质是一样的,但前一种需要先构造异常对象,后一只在抛出异常时才创建异常对象,所以经常使用第二种形式。当程序中出现throws出现时,说明该类可能发生异常,这就需要对异常进行处理,处理异常的方法有两种:一种是通过try-catch-finally处理(需要程序员自己操作),还有一种是将异常交给java虚拟机处理。
4.我写个例子来解释下异常是怎么处理的
public class throwsException{
public static void main(String [] args){
try{
chang();
}catch(Exception e){
System.out.println("这是在main方法中捕获的异常");}
}
public static void chang() throws Exception{//要声明抛出异常
Random random=new Random();
int a=random.nextInt(100);
try{
if(a==70){
System.out.println(a);
}
else{
throw new Exception();//抛出异常
}
}catch(Exception e){
System.out.println("这是在chang()异常");}
}
}
因为chang方法中通过关键字(throws)声明有异常抛出,所以必须在主函数中强制捕获异常,如果没写try-catch语句,则会报错。
当生成的随机数不等于70时,会执行throw new Excetion()语句,throw语句将异常抛给catch。
5.try-catch-finally中,把会产生异常的语句写在try程序块中,可以有多个catch语句,catch语句是多选的,多个catch语句中的异常参数类型必须各不相同,如果try中发生了异常,系统将会从上到下依次查找catch语句中是否有异常参数类型与之匹配,catch中最后一个异常参数类型是所有上面catch语句异常参数类型的父类,如匹配,就进入该catch语句,如果都没有匹配,则进入finally语句。finally语句是资源保护快,不管系统是否找到与之匹配的catcch语句,finally中的语句都要执行。
6.常见的异常:
运行时的异常:
java.lang.ArrayIndexOutofBoundsExcetion(数组下标越界异常)
java.lang.ArithmeticException:/ by zero(零做除数异常)
java.lang.NullPointerException(空对象)
像这类异常编译是可以通过的,它是发生在运行中。如果发生这类异常,我们可以自己根据信息来改进程序。
检查型异常:
除了运行时的异常,其余都是检查型异常。比如说:从键盘中读入一个字符。如果你没有强制处理这类异常,将不能通过编译,它会提示以下信息:hasCheckException.java 4 未报告的错误java.io.Exception
7.自定义异常
如果系统预定义的类不能满足编程要求,我们可以自己定义异常类。自己定义的异常类必须是Throwable的直接或间接子类,不过一般情况是Exception的子类。自定义异常类会自动继承父类中可以继承的方法和属性,一般情况下,它需要声明两个构造方法:一个是不带参数的方法,一个是以字符串为参数,作为本异常类的具体信息:
我用一个例子说明下:
class MyException extends Exception{
MyException(){
super();
}
MyException(String s){
super(s);
}
}
public class useMyException{
public static void main(String [] args){
try{
throw new MyException("这是我自己定义的异常类");
} catch(MyException e){
System.out.println("异常信息:"+e.toString());
}
}
}
我的心得体会:在学了异常类之后,让我对异常有了更多的理解,这个异常机制始终贯穿在我们编程中,当我们遇到异常时,不要太过于紧张,我们可以通过提示信息自己改正错误。