日期:2014-05-20  浏览次数:20720 次

这个numberOfObjects不是应该为3么?求解释
package programList;

public class TestCircleWithException{
public static void main(String[] args){
try{
CircleWithException c1 = new CircleWithException(5);
CircleWithException c2 = new CircleWithException(-5);
CircleWithException c3 = new CircleWithException(0);
}
catch(IllegalArgumentException ex){
System.out.println(ex);
}

System.out.println("Number of objects created: " + CircleWithException.getNumberOfObjects());
}
}

class CircleWithException{
private double radius;
private static int numberOfObjects = 0;

public CircleWithException(){
this(1.0);
}

public CircleWithException(double newRadius){
setRadius(newRadius);
numberOfObjects++;
}

public double getRadius(){
return radius;
}

public void setRadius(double newRadius)throws IllegalArgumentException{
if(newRadius >= 0)
radius = newRadius;
else
throw new IllegalArgumentException("Radius cannot be negative");
}

public static int getNumberOfObjects(){
return numberOfObjects;
}

public double findArea(){
return radius * radius *Math.PI;
}
}


想问下numberOfObjects为啥是1;
Java

------解决方案--------------------
因为在CircleWithException c2 = new CircleWithException(-5)这一句的时候由于是 -5 所以就报异常了,结果后两句的new根本就没起作用。你在numberOfObjects++;后面加一句System.out.println(numberOfObjects);就验证出来了。你把-5改为正的就可以出3了。
------解决方案--------------------
引用:
可是即使是-5不也应该先调用的构造方法么,再调用setRadius(),然后抛异常么?


是调用了构造方法,只是没执行完呀,第一行代码就异常了,结果直接出了try了,构造方法中和try中剩余的代码都没被运行到呀