讲明白就给分

aaassd 2003-11-24 12:47:15
class ExceptionTst extends Exception {
static String msg;

public ExceptionTst() {
//this("My own Exception happened!");
this.print();
}

public ExceptionTst(String msg) {
super(msg);
}

private static void print() {
msg = "My own Exception happened!";
}
}

//secend class OwnExceptionSource
class OwnExceptionSource {
public void a() throws ExceptionTst {
ExceptionTst test = new ExceptionTst();
throw test;
}
}

//third class OwnExceptionHandler
class OwnExceptionHandler {
public static void main(String arg[]) {

OwnExceptionSource outmsg = new OwnExceptionSource();
try {
outmsg.a();
}
catch (ExceptionTst e) {
e.printStackTrace();
}
;
}

}
这个程序没有结果,谁能讲讲类生成的过程?一共几步?数据是在什么地方初始化的?
...全文
82 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouqingyuan 2003-11-26
  • 打赏
  • 举报
回复
楼主把这个帖子换个地方吧,怎么跑到这里来了。这里是C/C++
tianyxy 2003-11-26
  • 打赏
  • 举报
回复
怎么发贴呀 我现在只能回复 HELP-----------------------
tianyxy 2003-11-26
  • 打赏
  • 举报
回复
请文各位大虾怎么法帖呀 找了半天找不到到 郁闷呀
蝎子i软件 2003-11-26
  • 打赏
  • 举报
回复
我觉得类生成的过程是这样的:
OwnExceptionSource --> outmsg
ExceptionTst --> test
ExceptionTst --> e 从test拷贝

有个问题:
既然print()是static,怎么在ExceptionTst()中又有this.print()?

声明:
我对Java及C++中的面向对象还不熟悉,这里说的仅供参考。
aaassd 2003-11-26
  • 打赏
  • 举报
回复
谁能讲讲,c 中的事件处理整个理论过程是怎么样的,编程是怎么实现的.我好结贴.
Shrewdcat 2003-11-25
  • 打赏
  • 举报
回复
你这个程序我自己运行了一下,这是e.printStackTrace(); 反馈的结果信息:
packageName.ExceptionTst
at packageName.OwnExceptionSource.a(OwnExceptionHandler.java:35)
at spackageName.OwnExceptionHandler.main(OwnExceptionHandler.java:46)

我在 e.printStackTrace(); 前边加了一句 System.out.println(e.msg); ,输出如下:
My own Exception happened!

也就是说你提到的没有反馈结果是不成立的。

整个class的执行顺序是这样的:

首先执行带有main的那个class,遇到new时,调用new 所指类的构造函数,没有的话,采用系统缺省得构造函数进行初始话。 如果一个类中有类变量或者类方法,在调用构造函数前,先完成这些静态对象(类变量或/和类方法)的初始化。

当实例方法被调用时,才会去初始话该方法。
aaassd 2003-11-25
  • 打赏
  • 举报
回复
那静态成员变量是在什么时候初始话的呢,书上讲是在第一次使用这个类的时候.那程序
中的msg为什么不能得到初始化呢.
hyhu 2003-11-25
  • 打赏
  • 举报
回复
OwnExceptionSource outmsg = new OwnExceptionSource();
生成OwnExceptionSource对象,
outmsg.a();生成一个ExceptionTst对象,
在生成ExceptionTst对象的时候,classLoader先倒入Exception,通过Exception生成ExceptionTst

outerClass.super()和innerClass没有关系,是调用outerClass的父类无参构造函数!
aaassd 2003-11-25
  • 打赏
  • 举报
回复
class withinner{
class inner{}
}
public class inheritinner extends withinner.inner{
inheritinner(withinner wi){
wi.super();
}
}
是thinking in java 中的p274
wi.super()???
aaassd 2003-11-25
  • 打赏
  • 举报
回复
谢谢,楼上的哥们.但这还不是我问的问题啊.
aaassd 2003-11-25
  • 打赏
  • 举报
回复
谢谢,那用this("My own Exception happened!");而不用 this.print();
执行的结果不一样,我就是这里不明白.
kinzey34 2003-11-24
  • 打赏
  • 举报
回复
无论是不是内部类,或者是不是继承自内部类,super()都是先调用直接父类的构造方法
比如:
类A里有个内部类B,那么类B如果在自己的构造方法里有super(),那么这个super()调用的是类B
继承的类的构造,如果类B没有指出extends关键字,那么就是用的java.lang.Object的构造方法;
再如果又有类C继承了类B成为子类,那么类C里的构造方法中的super()就是调用它的直接父类类B的构造方法,如果类B没有写构造方法,那继续寻找类B的直接父类的构造方法,如果类B没有显示继承自任何类(没有extends关键字),那么最后就会调用java.lang.Object类的构造方法
aaassd 2003-11-24
  • 打赏
  • 举报
回复
没有人讲一下吗?接合这个程序.
北方的狼 2003-11-24
  • 打赏
  • 举报
回复
先完成基类中的数据成员的初始化,然后再进行构造函数处理。然后在完成子类1的数据成员,接着子类的构造函数,一直到最外一层
aaassd 2003-11-24
  • 打赏
  • 举报
回复
现在是在用一个继承了inner class的类中调用outclass.super(),是用来重载构造函数的,这里不是很明白为什么这么用就能实现呢?
HurricanDavidLiu 2003-11-24
  • 打赏
  • 举报
回复
这和out inner 没关系把super只有在子类里面用,有两个用法:
一、通过super()调用超类的构造函数;
二、通过super().XXX引用被子类隐藏的超类的成员变量。例如超类中有一个成员变量叫a,子类中也有一个叫a,如果你的子类引用超类中的a就要用到super().a
aaassd 2003-11-24
  • 打赏
  • 举报
回复
还有一个outclass 中有个innerclass.
则outclass.super()是什么意思
















70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧