黑马程序员技术交流社区
标题:
求解释这段代码执行结果
[打印本页]
作者:
〃FelayMan。
时间:
2014-5-15 20:00
标题:
求解释这段代码执行结果
package com.felay.test;
class SuperClass{
public static String name = "felayman1";
static {
System.out.println("superclass static");
}
}
class Subclass extends SuperClass{
static {
System.out.println("subclass static");
}
}
public class Test {
public static void main(String[] args) {
System.out.println(Subclass.name);
}
}
复制代码
作者:
谢振宣
时间:
2014-5-15 20:27
class SuperClass{
public static String name = "felayman1";
static {
System.out.println("superclass static");
}
}
class Subclass extends SuperClass{
static {
System.out.println("subclass static");
}
}
public class Demo {
public static void main(String[] args) {
System.out.println(Subclass.name);
}
}
/*
*superclass static
*felayman1
*以上为运行结果。
*由于并没有访问到子类的特有成员,子类并不会被加载。
*静态代码块是给类做初始化的,要先加载父类的静态代码块。
*然后再加载父类的成员变量,并进行显示初始化。
*/
复制代码
作者:
假Rǔ有⒈兲
时间:
2014-5-15 21:36
看看什么答案
作者:
千里一醉
时间:
2014-5-18 22:19
今天刚学了Debug,你可以试着运行下。望采纳,谢谢
运行发现,静态代码块和静态变量执行顺序就是写的顺序,无先后。
但是只要类一加载,所有被static修饰的成员都会被加载
本题中,虽然是子类调用父类的静态成员,但由于只用了父类的name,而未访问子类成员,所以子类未加载。
作者:
More
时间:
2014-5-19 09:13
程序入口调用 System.out.println(Subclass.name); 加载Subclass类,调用其静态变量,类中的静态代码块会在加载类的过程中首先被执行 所以执行顺序为
1,System.out.println("superclass static");//静态代码块
2, System.out.println(Subclass.name);//main方法调用静态变量
执行结果为
superclass static
Subclass.name
作者:
More
时间:
2014-5-19 09:17
Subclass extends SuperClass,在加载过程中先加载父类中的静态代码块
结果应该是
superclass static
felayman1
先前把代码看乱了 不好意思
作者:
喜爱
时间:
2014-5-19 09:56
从打印结果来看,子类的静态代码块没有执行,可以验证子类没有被加载,子类类名调用父类的成员变量,打印父类的成员变量值和调用父类的静态代码!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2