public class Son1 extends Father {
static
{
System.out.println("a");
}
public Son1() {
System.out.println("1");
}
public static void main(String[] args) {
Son1 son=new Son1();
son=new Son1();
}}class Father {
static
{
System.out.println("b");
}
public Father() {
System.out.println("2");
} }
请问其执行流程是怎么样的,为什么会这样啊
static
{
System.out.println("a");
}
public Son1() {
System.out.println("1");
}
public static void main(String[] args) {
Son1 son=new Son1();
son=new Son1();
}}class Father {
static
{
System.out.println("b");
}
public Father() {
System.out.println("2");
} }
请问其执行流程是怎么样的,为什么会这样啊
解决方案 »
- 关于java Canvas加入JscrollPane后显示问题
- JNI实现监听全局鼠标事件,钩子需编译成64位dll,但在CodeBlocks下编译出是32位的,用VS编译显示“发现重复定义”,请教错误原因或帮忙编译一下谢谢
- 关于clone方法
- java ssh连接远程linux主机的问题
- 关于重写equals()和hashCode()的疑问
- 解释00术语
- 找兼职(大连java)
- Struts如何安装?
- 如何设置Weblogic中的用户限制,我的Weblogic目前只允许3人登录?
- jdbc drivers????????????????????????????
- 关于getactioncommand的用法
- preparedStatement 是驱动问题么?
楼主在当前的程序中只要明白二点即可:
1.子类构造时必先执行其父类构造函数
2.静态块先于构造函数执行
但这个程序对类的加载及初始化的说明还是具有很大的局限性,你现在这个程序中只有静态块,如果再有非静态块的,又会让你傻了眼所以楼主可以百度一下:java类加载顺序
以便详细了解其执行过程
这个是sun规定的没有什么为什么
b
a
2
1
2
1Son1 son=new Son1();
首先调用父类Father的静态代码块,再调用自己的静态代码块,接着调用父类Father的构造函数,再调用自己的构造函数(总是优先调用父类的,而且静态代码块优先于构造函数)
son=new Son1();
静态代码块只会被调用一次,即初始化一次后就不再调用,所以此处直接调用父类Father的构造函数,再调用自己的构造函数
是无论新建多少对象,静态代码块只调用一次,而代码块可以多次调用。