2016-11-21 64 views
0

我有一个程序,我试图抛出一个例外。我创建了一个自定义异常类在这里:异常类不工作

import java.io.*; 

public class ShapeException extends Exception 
{ 
    public ShapeException(String message) 
    { 
     super(message); 
    } 
} 

这里的课堂,我尝试和实施例外:

import java.io.*; 

public class Circle 
{  
    private double radius; 

    public Circle(double inRadius) 
    { 
     if(inRadius < 0.0) 
     { 
     throw new ShapeException("Shape Exception Occurred..."); 
     } 
     else 
     { 
     radius = inRadius; 
     } 
    } 

    public double getRadius() 
    { 
     return radius; 
    } 

    public void setRadius(double newRadius) 
    { 
     if(newRadius < 0.0) 
     { 
     throw new ShapeException("Shape Exception Occurred..."); 
     } 
     else 
     { 
     radius = newRadius; 
     } 
    } 

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

    public void stretchBy(double factor) 
    { 
     if(factor < 0.0) 
     { 
     throw new ShapeException("Shape Exception Occurred..."); 
     } 
     else 
     { 
     radius = radius * factor; 
     } 
    } 

    public String toString() 
    { 
     return "Circle Radius: " + radius; 
    } 
} 

但是,这不会编译,给我的错误告诉我,我形状异常错误必须被捕获或声明为抛出。我究竟做错了什么?这是不是宣布?

+0

https://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html – shmosel

+2

读取错误。谷歌他们,如果你必须。编译器不仅仅是在糟糕的一天中挑选你。他们的意思是!必须捕捉或声明“形状异常错误” – John3136

回答

1

在当你抛出一个checked异常,你需要throws关键字来声明它的方法签名的Java。下面是没有任何编译错误的代码片断,因为每个方法都有throws声明,其中有ShapeException

public class Circle { 
    private double radius; 

    public Circle(double inRadius) throws ShapeException { 
     if(inRadius < 0.0) { 
      throw new ShapeException("Shape Exception Occurred..."); 
     } else { 
      radius = inRadius; 
     } 
    } 

    public double getRadius() { 
     return radius; 
    } 

    public void setRadius(double newRadius) throws ShapeException { 
     if(newRadius < 0.0) { 
      throw new ShapeException("Shape Exception Occurred..."); 
     } else { 
      radius = newRadius; 
     } 
    } 

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

    public void stretchBy(double factor) throws ShapeException { 
     if(factor < 0.0) { 
      throw new ShapeException("Shape Exception Occurred..."); 
     } else { 
      radius = radius * factor; 
     } 
    } 

    @Override 
    public String toString() { 
     return "Circle Radius: " + radius; 
    } 
} 
1

在Java中有Exception两种类型。您正在使用的名称为Checked Exception,用于可恢复的错误。当检查异常被抛出时,你必须处理它。要么你用try-catch块处理它。

try { 
    methodThrowingShapeException() 
} catch (ShapeException e) { 
    // Log and handle the Exception 
} 

永远不要让catch块空了!

或者你可以声明它在方法签名中抛出,在这种情况下异常必须由方法的调用者处理。

public void setRadius(double newRadius) throws ShapeException