首页 > 解决方案 > java上的非法参数异常

问题描述

我是java新手,正在尝试学习异常处理,所以我的代码是这样的

public 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(radius>=0) radius = newRadius;
    else if(radius<0)
        throw new IllegalArgumentException("Radius cannot be negative");
}

public static int getNumberOfObjects(){
    return numberOfObjects;
}

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

主要方法是这样的

public class ApplicationCircle {
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());
}

但我得到的不是错误,而是这个结果

“创建的对象数:3”

谁能帮我?非常感谢

标签: javaillegalargumentexception

解决方案


您的代码编写正确,但是看起来您在“setRadius(double newRadius)”方法中犯了一个错误。您正在检查半径是否小于 0(或 >=0),但由于在 -5 的情况下从未设置它,因此您不会抛出异常。

我相信您想检查 newRadius 是大于还是小于 0 。

所以代码将是(注意半径如何更改为 newRadius,因为这是您在方法中传递的参数):

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

推荐阅读