异常类型:
处理机制
1.Try Catch Finally
使用时注意事项:
Catch块必须时从小到大,从具体到抽象排列顺序,否则会编译错误,也就是说:如果有两个catch块,如果其中一个catch块的异常错误是另一个catch块的子类,那么小的也就是子类必须写在前面。
原因:catch捕获的异常时从上往下检测的,如果第一个catch块是父类的话,异常只会捕获父类的异常,因为父类的异常一定包括子类的异常,这样的话,子类的异常将会永远被屏蔽。
2. Throw异常
使用时注意事项:
throws使用在方法头的后面,不会加工处理,直接抛给调用她的函数,如果该异常在调用的函数中任然没有被处理,那么这个异常会沿着方法的调用,一直向上传递,一直到异常被处理,如果传到main方法中任然没有被处理,则该异常将把程序非正常终止。
3.自定义异常:
使用时注意事项:
throws与throw一起使用,
使用地方:
在某些应用中,编程人员可以根据程序的需要创建自己的异常类和异常对象,用来处理程序中特定的逻辑运行错误或遗产。比如说在计算三角形面积的时候,如果输入了负数或者输入的三个数不满足三角行,这个时候我们就需要指定针对这两种情况下的特定的异常。
自定义异常语法
举例
package Blog;
class TriangleUnequationException extends Exception {
String name;
public TriangleUnequationException(String str)
{
name = str;
}
public String toString()
{
return name;
}
}
package Blog;
public class TriangleMinusLengthException extends Exception {
String name;
public TriangleMinusLengthException(String str)
{
name = str;
}
public String toString()
{
return name;
}
}
package Blog;
public class TestSelfException {
public static double calculateArea(double a, double b, double c) throws TriangleMinusLengthException, TriangleUnequationException
{
if (a<0 || b<0 || c<0)
throw new TriangleMinusLengthException("负边长异常");
if (a+b<c || a+c<b || b+c<a)
throw new TriangleUnequationException("不满足三角不等式异常");
double p = (a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
public static void main(String[] args)
{
double a = 3, b = 4, c = 5;
double e = -4, f = 2, g =10000;
try{
double area = calculateArea(a,b,c);
System.out.println("面积:" + area);
area = calculateArea(e, f, g);
System.out.println("面积:" + area);
}catch(TriangleMinusLengthException me){
System.out.println("边长为负,请改正");
}catch(TriangleUnequationException ue){
System.out.println("边长不满足三角不等式,请改正!");
}
}
}
运行结果