黑马程序员技术交流社区

标题: 还是关于抛出和捕获的问题,有点蛋疼 [打印本页]

作者: 张昊镭    时间: 2012-4-8 17:58
标题: 还是关于抛出和捕获的问题,有点蛋疼
第九天的最后一个视频将异常练习的时候,出现了一个把异常类对象抛两次的动作,但是抛完之后,在捕获的时候就没讲代码怎么写了,视频的代码太长了,我写个简单的帮我讲解下:
class SiJi extends Exception
{
    SiJi(String s)
    {
        super(s);
    }
}
class Computer
{
    private int state=2;
    public void run()throws SiJi
    {
        if(state==2)
            throw new SiJi("死机了");
    }
}
class Person
{       
        public static void main(String[] args)
        {
                Computer c=new Computer();
                try
                {
                        c.run();
                }
                catch(SiJi s)
                {
                        System.out.println(s.toString());
                }
        }
}
呃,我的理解是Computer抛出了个死机异常,Person捕获了这个异常,并处理了,就是打印个异常信息.
这个只是抛出一次,捕获一次吧,可我想连续抛出两次,再捕获,那捕获那的代码该怎么写?比如:
class SiJi extends Exception
{
    SiJi(String s)
    {
        super(s);
    }
}
class Computer
{
    private int state=2;
    public void run()throws SiJi
    {
        if(state==2)
            throw new SiJi("死机了");
    }
}
class Teacher
{
        public void use()throws SiJi
        {
                Computer c=new Computer;
                try
                {
                        c.run();
                }
                catch(SiJi s)
                {
                        throw s;
                }
        }
}
class Person
{       
        public static void main(String[] args)
        {
                Teacher t=new Teacher();
                try
                {
                        t.use();
                }
                catch()
                {

                }
        }
}
那红色的那段代码,我该怎么捕获Teacher里面的那个s,圆括号里面如何写呢,如果代码写错了请指正.
作者: 贠(yun)靖    时间: 2012-4-8 18:06
public static void main(String[] args)
        {
                Teacher t=new Teacher();
                try
                {
                        t.use();
                }
                catch(SiJi s)
                {
                          写你要怎么处理 的代码
                }
这个SIJi  异常是自己定义的     你new Teacher();
对象 了  而这个对象抛的SiJi异常  你就捕获这个异常    异常捕获问题  把握一点   你调用了谁的  谁抛的   都是一一对应的  他抛什么  你捕获什么
作者: 郑苑东    时间: 2012-4-8 18:12
使用catch捕获你的程序执行中所要抛出的异常。。当然你可以捕获他的父类也行。。。这算是一种多态的。。。。catch()里面就是定语一个异常类型变量。。。当程序执行到你所定义的异常类型时就会被捕获。。。把异常赋给你定义的变量。。通过它你也做一些自己需要的事。。。。
作者: 莫运飞    时间: 2012-4-8 18:17
ry
{
        需要被检测的代码;

}
catch(异常类 变量)//catch(Exception e)e是Exception类型的应用变量。

                        //Exception e=new ArithmeticException();
{
        处理异常的代码:(处理方式)

}
finally
{
        一定会执行的语句;
}

这样清楚了吧   记点笔记就可与了的  呵呵
作者: 莫运飞    时间: 2012-4-8 18:18
上面的开头是try的  我少了个t,不好意思
作者: 张昊镭    时间: 2012-4-8 18:19
贠(yun)靖 发表于 2012-4-8 18:06
public static void main(String[] args)
        {
                Teacher t=new Teacher();

果然是这样,非常感谢
作者: pray    时间: 2014-4-26 06:12
支持你加分




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2