实现克隆功能

时间:2014-08-20 06:08:52

标签: java exception clone

我有一个名为Garage的课程:

class Garage extends Vehicle implements Cloneable
{
    Vehicle[] v= new Vehicle [10];

    public Garage ()
    {
        for (int i=0;i<10;i++)
            this.v[i]=new Vehicle ();
    }

    public Garage clone () throws CloneNotSupportedException
    {
        try 
        {
            return (Garage) super.clone ();
        }
        catch (CloneNotSupportedException e)
        {
            return null;    
        }
    }

public static void main (String[] args)
{
    Garage g1,g2;
    g1=new Garage ();

    for (int i=0;i<10;i++)
        g1.v[i].setVehicleAttr (i,i,i,Integer.toString(i));

    g2=new Garage ();
    g2 = g1.clone ();
}
};

当我编译它时..它给出以下错误... 即使我已经处理了异常,它也说必须抓住异常......为什么会发生这种情况......?

Garage.java:32: error: unreported exception CloneNotSupportedException; must be caught or declared to be thrown g2 = g1.clone ();

1 个答案:

答案 0 :(得分:2)

不,你没有:g2 = g1.clone ();不在try / catch块中,因为您编写的clone()方法应该抛出异常。

即使你抓住方法中的抛出(你应该),你的签名仍然告诉java方法在未知条件下抛出,因此调用它的代码必须使用try / catch,或者进行调用的方法必须本身具有throw CloneNotSupportedException

在方法中尝试/ catch并且不声明throw,或者声明throw,然后让调用代码处理try / catch。