public class A {
public static void main(String[] args) {
try{
int x=4/0;
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
这段代码,当4/0时会抛出异常,抛出的是一个类型为ArithmeticException异常对象,在Catch的参数中赋给了他的父类Exception e,其实就是这样:Exception e = new ArithmeticException(); 父类引用指向子类对象的多态。
接下来是楼主的代码:
class B extends Exception{
public B(){
System.out.println("实例化异常对象");
}
}
public class A {
public static void main(String[] args) throws B {
int x=4/0; //这抛出的是ArithmeticException异常和B没关系
}
}
当4/0时抛出的是ArithmeticException异常,在主函数上抛B异常是不会有B对象产生的,"throws B"这句换成IOException(IO流异常和除零也没什么关系)也是一样抛出ArithmeticException异常。
楼主的B是自定义异常,建议多看下这块,我模仿毕老师的重写了一下你的自定义异常B,4/0换成了在demo.div(4,0);方法中执行。
class Demo
{
int div(int a,int b)throws B
{
if(b==0) //产生B类异常的条件
throw new B(); //这里抛出B类异常对象
return a/b;
}
}
public class A
{
public static void main(String[] args)
{
try
{
Demo demo = new Demo();
demo.div(4,0); //这里产生了一个B类的异常对象,其实ArithmeticException也是在异常处产生对象
}
catch(B b)
{
System.out.print("B类异常");
}
catch(Exception e)
{
System.out.println(e);
}
}
}
class B extends Exception
{
public B()
{
System.out.println("实例化异常对象");
}
}
输出结果是:
实例化异常对象
B类异常
楼主对自定义异常的了解太少,所以用错方法证明异常是否产生异常了对象。自定义异常和系统异常不同,我目前了解的要通过throws+对象 才能产生。
|