求大神帮忙,关于自定义Java异常,新手不懂得理解
Souyl 2016-11-03 12:39:19 用eclipse编写,分三个板块,1是自定义一个异常,2是定义一个圆形的类,其中半径是负数时抛出异常,3是主函数;如下:
1. InvalidRadiusException.java
public class InvalidRadiusException extends Exception{
public double radius;//半径
public InvalidRadiusException(double radius) { //自定义异常的构造函数
super("Invalid radius " + radius);//覆盖父类方法
this.radius = radius;
}
public double getRadius(){
return radius;
}
}
自定义异常没问题;
2. CircleWithException.java (注:2中有些代码不明白,求解释)
public class CircleWithException {
private double radius;//半径
public CircleWithException() throws InvalidRadiusException {//无参构造函数
this(1.0);//初始化半径,间接调用setRadius()方法
}
public CircleWithException(double radius) throws InvalidRadiusException {//有参数构造函数
setRadius(radius);//直接调用setRadius()方法
}
public void setRadius(double radius) //有可能产生异常,用throws抛出异常
throws InvalidRadiusException{
if(radius >= 0)
this.radius = radius;
else
throw new InvalidRadiusException(radius);
}
public double getRadius(){
return radius;
}
public double getArea(){
return radius * radius * Math.PI;
}
}
以上红字加粗部分,我不明白,去掉红字加粗部分显示错误,加上就对,为什么在这两个地方也要加上throws抛出异常???我很不明白,个人有以下理解,不知道对不对?::凡是调用了有可能产生异常方法(也就是上例中的setRadius()方法)的方法,都要进行异常抛出或者捕获处理,在CircleWithException类中,两处构造函数都间接或者直接调用setRadius()方法,不需处理异常,只是抛出到主函数,再在主函数处理进行处理。
我这样理解对不对??求解释,以下是主函数的调用
3. TestCircleException.java
public class TestCircleException {
public static void main(String[] args){
try {
CircleWithException c1 = new CircleWithException(2);
c1.setRadius(-5);
CircleWithException c2 = new CircleWithException(-2);
}
catch (InvalidRadiusException e) {
System.out.println("The invailed radius is " + e.getRadius());
}
finally{
System.out.println("over");
}
}
}
各位大神,看得懂我的问题吗?我不知道throws的使用,不知道哪里需要抛异常,哪里不需要抛异常。。。我上面的理解对不对???