自己写的一道题
2014-02-14 09:59
155 查看
参考帖子:http://bbs.csdn.net/topics/390207040
1、JVM在运行class时,首先会扫描一次全部的程序,静态块优先级最高,因为它们会存储在JVM的公共内存区域。
2、接着会调用构造方法,构造方法调用的顺序是,JVM会先扫描类的继承关系,然后从最顶层的构造方法向下执行。
3、执行到指定类内部时,会先处理类中定义的实例变量,然后再执行构造方法内部的代码。
class A
{
static
{
System.out.println("A静态代码块");
}
{
System.out.println("A构造块");
}
public A(int a)
{
System.out.println("A构造方法:" + a);
}
}
class B extends A
{
static A aa = new A(1);
A aaa = new A(2);
static
{
System.out.println("B静态代码块");
}
{
System.out.println("B构造块");
}
public B(int a)
{
super(a);
System.out.println("B构造方法:" + a);
}
}
public class Test1
{
public static void main(String[] args)
{
new B(100);
}
}
/*
结果:
A静态代码块
A构造块
A构造方法:1
B静态代码块
A构造块
A构造方法:100
A构造块
A构造方法:2
B构造块
B构造方法:100
*/
1、JVM在运行class时,首先会扫描一次全部的程序,静态块优先级最高,因为它们会存储在JVM的公共内存区域。
2、接着会调用构造方法,构造方法调用的顺序是,JVM会先扫描类的继承关系,然后从最顶层的构造方法向下执行。
3、执行到指定类内部时,会先处理类中定义的实例变量,然后再执行构造方法内部的代码。
class A
{
static
{
System.out.println("A静态代码块");
}
{
System.out.println("A构造块");
}
public A(int a)
{
System.out.println("A构造方法:" + a);
}
}
class B extends A
{
static A aa = new A(1);
A aaa = new A(2);
static
{
System.out.println("B静态代码块");
}
{
System.out.println("B构造块");
}
public B(int a)
{
super(a);
System.out.println("B构造方法:" + a);
}
}
public class Test1
{
public static void main(String[] args)
{
new B(100);
}
}
/*
结果:
A静态代码块
A构造块
A构造方法:1
B静态代码块
A构造块
A构造方法:100
A构造块
A构造方法:2
B构造块
B构造方法:100
*/
相关文章推荐
- Java 6 JVM参数选项大全(中文版)
- 解析Linux系统中JVM内存2GB上限的详解
- 亮剑JVM的9款编程语言杀手开发利器重磅推荐
- 【转】JVM内存管理:深入垃圾收集器与内存分配策略
- JVM内存分析及导致内存溢出的不健壮代码及解决办法
- Linux下jvm时区设置-JAVA时区问题
- JVM 详解
- Java 6 JVM启动参数选项详解
- 多核平台下的Java优化
- JVM内存模型及垃圾收集策略解析
- 垃圾回收调优及JVM参数详解
- 深入垃圾收集器与内存分配策略
- JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
- jvm
- JVM内存溢出的两大类型及解决方案
- JVM调优的相关设置
- 从JVM的常见异常来看Tomcat中内存的设置
- Java虚拟机(JVM)中的内存设置详解
- "redhat_transparent_hugepage" can hurt Java performance
- JVM监控