java 类中定义一个类,这两个类构造函数先后问题

publicclasstest04{publicstaticvoidmain(String[]args){Cc=newC(11);}}classA{publicA(int... public class test04 {

public static void main(String[] args) {
C c = new C(11);
}
}

class A{
public A(int i){
System.out.println("Constructor A."+i);
}
}
class B{
public B(int i){
System.out.println("Constructor B."+i);
}
}
class C extends A{
int i;
public C(int i){
super(i);
this.i=i;
System.out.println("Constructor C."+i);
}
B b = new B(i);
}
为什么输出结果是:
Constructor A.11
Constructor B.0
Constructor C.11
而不是:
Constructor A.11
Constructor C.11
Constructor B.11
请指教。。。
展开
 我来答
麦粒橙
推荐于2016-11-01 · TA获得超过137个赞
知道答主
回答量:48
采纳率:100%
帮助的人:29.6万
展开全部
JAVA初始化顺序
1、调用顺序:
JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码--->初始化子类的静态代码-->
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数

其他说明:
2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分

你这里C继承A,所以顺序是:
A的属性初始化-->A的构造-->C的属性初始化(此时new B()调用了B的构造)-->C的构造

参考资料: http://zhidao.baidu.com/question/37541599.html

席学岺满辰
2019-03-08 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:25%
帮助的人:1088万
展开全部
不用了,因为你自己定义了有参的构造函数以后,其实已经调用了无参的构造函数(其实你自己写的构造函数会默认调用this();方法,只不过写不写都一样,不信你在你的有参构造的第一句,必须第一句,写this();试试),自己定义了有参构造函数以后,就必须用有参构造函数来初始化了,这个你懂得
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6eed2f8
2010-11-17 · TA获得超过5082个赞
知道大有可为答主
回答量:3423
采纳率:0%
帮助的人:3825万
展开全部
首先调用父类的构造函数产生对象,然后为实例化对象里的属性,最后再执行自身的构造函数处理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vallay_star
2010-11-17 · TA获得超过148个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:0
展开全部
B 是C 的成员变量,在C 构造函数之前初始化。

在一个类里,初始化的顺序是由变量在类内的定义顺序决定的。即使变量定义大量遍布于方法定义的中间,
那些变量仍会在调用任何方法之前得到初始化——甚至在构建器调用之前

参考资料: thinking in java

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我很菜
2010-11-17 · TA获得超过345个赞
知道小有建树答主
回答量:126
采纳率:0%
帮助的人:93万
展开全部
执行顺序应该是:首先是父类静态块 --> 然后是子类静态块 --> 父类自由块 --> 父类构造函数块 --> 子类自由块 --> 子类构造函数块 -->
B b = new B(i)是在C的构造函数之前执行的,int i默认值为0。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式