我有一个名为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 ();
答案 0 :(得分:2)
不,你没有:g2 = g1.clone ();
不在try / catch块中,因为您编写的clone()
方法应该抛出异常。
即使你抓住方法中的抛出(你应该不做),你的签名仍然告诉java方法将在未知条件下抛出,因此调用它的代码必须使用try / catch,或者进行调用的方法必须本身具有throw CloneNotSupportedException
在方法中尝试/ catch并且不声明throw,或者声明throw,然后让调用代码处理try / catch。