A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张权 中级黑马   /  2012-9-26 06:55  /  2919 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
//  方法一
class NagetiveException extends Exception
{
        private String msg;
        NagetiveException(String msg)
        {
                this.msg = msg;       
        }
        public String getMessage()
        {
                return msg;       
        }
}
*/
//方法2
class NagetiveException extends Exception
{
        NagetiveException(String msg)       
        {
                super(msg);       
        }
}
class Demo
{
        int division(int x,int y)throws NagetiveException
        {
                if(y<0)
                        throw new NagetiveException("\"除数为负数了\"");
                return x/y;       
        }
}
class ExceptionDemo4
{
        public static void main(String[] args)
        {
                Demo d = new Demo();
                try
                {
                        int x = d.division(5,-1);
                        System.out.println("x="+x);       
                }
                catch(NagetiveException n)
                {
                        System.out.println(n.toString());       
                }
                System.out.println("Over");
        }
}
请问方法一与方法二的区别:菜鸟求解释!!!!!!我这是在自定义一个异常,为什么当我调用构造函数时,不用return语句就可以了??? 方法一是复写了父类Exception,而方法二,因为构造函数的特性,所以直接用super关键字调用父类中的构造方法。但是我不明白为甚方法二就不用return语句呢?我知道子类继承父类,子类也可以调用父类里面的return语句,可是问题是,现在代码里面并没有调用父类里面的return语句,而且如果我真加进去,竟然还是错的!!!!困扰一天一夜,求解释!!!
另外老毕视频上解释代码:
class Throwable
{
        private String message
        Throwable(String message)
        {
                this message = message;       
        }
        public String getMessage()
        {
                return message;       
        }
}
class Exception extends Thowable
{
        Exception(String message)
        {
                super(message);       
        }       
}
老毕的意思是Nagetive直接复写了Exception的构造方法!!!!!可是原因还是一样,为甚么没有return语句啊,虽然继承了,但是我们在使用时却么有调用啊,而且调用时反而出现错误,找不到 message.

7 个回复

倒序浏览
message已经私有了怎么可能可以直接调用呢?你只能用类给出来的方法访问。
要return语句干什么?异常对象不可能给调用者随便改动异常信息。
getMessage和toString方法都是直接输出打印的

方法一是复写了父类Exception
//方法1是复写父类中的getMessage()方法而已

方法二,因为构造函数的特性
//方法2中已经传递给了父类的成员变量,多态中只要没有私有,子类没有的成员,父类有的话是可以直接用子类对象调用的。

一旦return了给调用者的对象成员不就不是异常对象给的信息了吗,而是调用对象的信息了
回复 使用道具 举报
黄基焜 发表于 2012-9-26 08:01
message已经私有了怎么可能可以直接调用呢?你只能用类给出来的方法访问。
要return语句干什么?异常对象 ...

谢谢黄兄的回答,不过我没看懂,而且貌似你也没动我的意思!!:L
方法一是复写了父类 Exception啊!也就是说父类Exception就 这样  private String msg;
        Exception(String msg)
        {
                this.msg = msg;        
        }
        public String getMessage()
        {
                return msg;        
        }
而方法而是利用构造函数的特性直接用super(msg)来替代了

    Exception(String msg)
        {
                this.msg = msg;        
        }
但是这个super(msg)仅仅只是用了父类中的    Exception(String msg)
        {
                this.msg = msg;        
        }
而那个return语句却没有体现出来啊????


回复 使用道具 举报

l

本帖最后由 张权 于 2012-9-26 21:32 编辑
黄基焜 发表于 2012-9-26 08:01
message已经私有了怎么可能可以直接调用呢?你只能用类给出来的方法访问。
要return语句干什么?异常对象 ...


谢谢黄兄的回答!!不过我还是没懂啊!!
老毕给出来的 父类Exception的代码如下:
          /*
//  方法一
        private String msg;
        NagetiveException(String msg)
        {
                this.msg = msg;        
        }
        public String getMessage()
        {
                return msg;        
        }
然后,再说方法2,方法2利用构造函数的特性super语句
      NagetiveException(String msg)        
        {
                super(msg);        
        }
但是super(msg)只是用了父类的构造方法啊!
   Exception(String msg)
        {
                this.msg = msg;        
        }
然而父类不还有个getMessage方法么?  为甚么子类仅仅只要使用父类的构造方法就行了,而不要return语句。

               
        
回复 使用道具 举报
Exception 继承了 Throwable的 getMessage()
回复 使用道具 举报
我是菜鸟 发表于 2012-9-26 20:36
Exception 继承了 Throwable的 getMessage()

这个我是知道的,可是Throwable l里面不是还有个return语句么?
可是子类只有一个super语句啊???
子类的super语句只是调用了父类的构造函数啊,却没有用哪个return语句啊!!
回复 使用道具 举报
方法一与方法二的区别在于:
方法一是自定义了一个msg属性,构造方法为这个自定义的msg属性赋值.

方法二没有自定义属性,构造方法为父类Exception的一个msg属性(Exception类的只有一个参数的那个构造方法中的指定参数)赋值.

构造方法本身就不可以有return xxx;的语句啊.

子类的构造方法用super是可以调用父类的构造方法,但是并不可以父类的return语句啊.
你的方法一中,子类的构造方法哪里在调用父类的return语句呢,明明是你的getMessage()方法才有return语句啊.
回复 使用道具 举报
张权 中级黑马 2012-9-26 21:53:10
8#
C:\Documents and Settings\Administrator\桌面\未命名.bmp
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马