您的位置:首页 > 职场人生

黑马程序员——Java基础——异常

2015-06-05 20:52 471 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

异常:就是程度在运行时出现不正常的情况。

它分为两种情况:一种是严重的不可处理的,Error类;另一种是非严重可以处理的,Exception类。它们两个有共性,因为它们有着一个父类,Throwable类,这个是异常中最高的超类。

一般 Exception 异常的处理方式有:try{ } catch ( ) { } finally { }

如果定义的函数存在有异常的可能性,要在函数上抛出一个异常:throws Exception ,这个是声明函数有可能会出现问题,告诉调用者要对其进行处理,可以用 try…catch…. , 也可以通过 throws 抛给其他调用的人,最终如果都没人处理(譬如在主函数),就会抛给JVM(虚拟机),运用默认的处理方式去处理。

finally:存放一定会被执行的代码,通常用于关闭资源。

(譬如关闭数据库的时候会用到)

示例如下:

public class ExceptionTest {

public static void xiangChu(int a,int b) throws Exception{
int c=a/b;
System.out.println(c);
}

public static void main(String[] args){
try{
xiangChu(8,0);
}catch(Exception e){
System.out.println(e.toString()+"   除数不能为0");
}
}
}


自定义异常:class xxException extends Exception{ }

它实际上就是一个类继承Exception这个类的子类,通过建立它的构造函数来定义自己的异常提示内容,可在构造函数中写 super( message ) 调用父类的构造方法来完成。

自定义异常的例子如下:

class FuShuException extends Exception{
FuShuException(){
super("除数不能为负数!");
}
}

public class ExceptionTest2 {

public static void xiangChu(int a,int b) throws FuShuException{
if(b<0)
throw new FuShuException();
int c=a/b;
System.out.println(c);
}

public static void main(String[] args){
try{
xiangChu(9,-2);
}catch(Exception e){
System.out.println(e.toString());
}
}
}


throws 和 throw 的区别:

throws是在函数上声明异常类;

throw是在函数内抛出异常对象。

有一个异常类比较特殊,函数上如果声明了它,调用者调用时不对它进行捕捉处理,编译会通过;或者在函数内抛出它的对象,函数上不声明,它也会通过;它就是 RuntimeException(运行时异常)。

第 一种情况的代码,编译会通过:

class YunSuan{
public int div(int a,int b) throws RuntimeException{
return a/b;
}
}

public class RuntimeExceptionTest {
public static void main(String[] args){
YunSuan a=new YunSuan();
int c=a.div(6, 0);
System.out.println(c);
}
}


第二种情况的代码,编译也会通过:

class YunSuan2{
public int div(int a,int b){
if(b<0)
throw new RuntimeException("除数不能为负数!");
return a/b;
}
}

public class RuntimeExceptionTest2 {
public static void main(String[] args){
YunSuan2 a=new YunSuan2();
int c=a.div(6, 0);
System.out.println(c);
}
}

所以异常有分为两类:
1、编译时被检测的类(非运行时);
2、编译时不被检测的类,就是上面的RuntimeException类,以及它的子类。


注意:

如果异常在函数内已经解决了,那么在函数上就不用声明了。

反则,如果在函数内还抛出了一个异常对象,那么就要在函数上声明异常类了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java