当前位置: 技术问答>java相关
请大家解释一下,输出结果为什么是这个?
来源: 互联网 发布时间:2015-02-28
本文导语: class A { public A() { System.out.println("AAA"); } { System.out.println("456"); } } public class B extends A { B() { this(12); System.out.println("BBB"); } B(int x) { System.out.println("CCC"); } { System.out.println("123"); } public static void main(String[] args) {...
class A {
public A() {
System.out.println("AAA");
}
{
System.out.println("456");
}
}
public class B extends A {
B() {
this(12);
System.out.println("BBB");
}
B(int x) {
System.out.println("CCC");
}
{
System.out.println("123");
}
public static void main(String[] args) {
new B();
}
}
The output is:
456
AAA
123
CCC
BBB
请大家解释一下,输出结果为什么是这个?
public A() {
System.out.println("AAA");
}
{
System.out.println("456");
}
}
public class B extends A {
B() {
this(12);
System.out.println("BBB");
}
B(int x) {
System.out.println("CCC");
}
{
System.out.println("123");
}
public static void main(String[] args) {
new B();
}
}
The output is:
456
AAA
123
CCC
BBB
请大家解释一下,输出结果为什么是这个?
|
举例说明:
class A{
public int Avar;
public A(){
System.out.println("AAA");
dosomething();
}
public void dosomething(){
Avar=1111;
System.out.println("a.dosomething()");
}
}
public class order2 extends A
{
public int Bvar=2222;
public order2(){
System.out.println("BBB");
dosomething();
System.out.println("Avar="+Avar);
}
public void dosomething(){
System.out.println("Bvar="+Bvar);
}
public static void main(String[] args){
new order2();
}
}
执行结果是
AAA
Bvar=0
BBB
Bvar=2222
Avar=0
记住继承类的初值化的次序:
1。进入基类CONSTRUCTOR,初值化基类变量:
进入A的CONSTRUCTOR,Avar = 0;
2。执行基类CONSTRUCTOR的BODY:
System.out.println("AAA"); ==> 输出 AAA
dosomething(); ==> 调用 B::dosomething(),继承类变量还没有初值化,确省值是0
==>输出 Bvar=0
3。初值化继承类变量
Bvar = 2222
4。执行继承类CONSTRUCTOR的BODY
System.out.println("BBB"); ==> 输出BBB
dosomething(); 调用 B::dosomething(),继承类变量已经初值化,Bvar = 2222
==>输出 Bvar=2222
System.out.println("Avar="+Avar);
==>输出 Avar=0
class A{
public int Avar;
public A(){
System.out.println("AAA");
dosomething();
}
public void dosomething(){
Avar=1111;
System.out.println("a.dosomething()");
}
}
public class order2 extends A
{
public int Bvar=2222;
public order2(){
System.out.println("BBB");
dosomething();
System.out.println("Avar="+Avar);
}
public void dosomething(){
System.out.println("Bvar="+Bvar);
}
public static void main(String[] args){
new order2();
}
}
执行结果是
AAA
Bvar=0
BBB
Bvar=2222
Avar=0
记住继承类的初值化的次序:
1。进入基类CONSTRUCTOR,初值化基类变量:
进入A的CONSTRUCTOR,Avar = 0;
2。执行基类CONSTRUCTOR的BODY:
System.out.println("AAA"); ==> 输出 AAA
dosomething(); ==> 调用 B::dosomething(),继承类变量还没有初值化,确省值是0
==>输出 Bvar=0
3。初值化继承类变量
Bvar = 2222
4。执行继承类CONSTRUCTOR的BODY
System.out.println("BBB"); ==> 输出BBB
dosomething(); 调用 B::dosomething(),继承类变量已经初值化,Bvar = 2222
==>输出 Bvar=2222
System.out.println("Avar="+Avar);
==>输出 Avar=0
|
不是说了输出456的是父类的静态程序块,先与父类的构造函数-》输出AAA
this(12)是指调用本类的构造方法,参数是整形或其他可能的有12的类型;本利就是调用B(int x);你可以试试改成其它整数。
this(12)是指调用本类的构造方法,参数是整形或其他可能的有12的类型;本利就是调用B(int x);你可以试试改成其它整数。
|
这个是由初始化的顺序决定的:
先父类后子类,先静态后非静态
父类的静态程序块-》父类的构造函数-》子类的静态程序块-》子类的构造函数
先父类后子类,先静态后非静态
父类的静态程序块-》父类的构造函数-》子类的静态程序块-》子类的构造函数
|
这个是由初始化的顺序决定的:
先父类后子类,先静态后非静态
父类的静态程序块-》父类的构造函数-》子类的静态程序块-》子类的构造函数
先父类后子类,先静态后非静态
父类的静态程序块-》父类的构造函数-》子类的静态程序块-》子类的构造函数