java类初始化的过程
在复习Thinking in java的过程中看到了相关内容,顺便整理一下,像下面一样的代码具体的执行顺序(ABCD都是类)
public class A {
public A(String text){
System.out.println("A was built :"+text);
}
D b1=new D("d in A");
static{
System.out.println("A Static Code out of constructor");
}
static D b2=new D("static b in A");
{
System.out.println("A Code out of constructor");
}
}
之前自己已经知道了,今天复习《Thinking in Java》又看到了这一段,在这里用代码来看看结果。最后给大家一个结论 代码如下(虽然有点长,但是仔细看还是挺简单的)
public class A {
public A(String text){
System.out.println("A was built :"+text);
}
D b1=new D("d in A");
static{
System.out.println("A Static Code out of constructor");
}
static D b2=new D("static b in A");
{
System.out.println("A Code out of constructor");
}
}
class B extends A{
static{
System.out.println("B Static Code out of constructor");
}
{
System.out.println("B Code out of constructor");
}
public B(String text){
super(text);
System.out.println("B was built :"+text);
}
}
class D{
public D(String text){
System.out.println("D was built :"+text);
}
public static void fsdaf(){
}
}
class C{
static{
System.out.println("C static code out of constructor");
}
public C(String text){
System.out.println("C was built :"+text);
}
}
class TestABC{
public static void main(String[] args) {
// A testA=null;
A testA=new A("testA");
System.out.println("********************************");
A testAf=new A("testA");
System.out.println("--------------------------------");
B testB=new B("testB");
System.out.println("********************************");
C testC=new C("testC");
}
}
结果如下
A Static Code out of constructor
D was built :static b in A
D was built :d in A
A Code out of constructor
A was built :testA
********************************
D was built :d in A
A Code out of constructor
A was built :testA
--------------------------------
B Static Code out of constructor
D was built :d in A
A Code out of constructor
A was built :testB
B Code out of constructor
B was built :testB
********************************
C static code out of constructor
C was built :testC
从上面可以看出,如果没有继承父类 那么执行的顺序是
1.static类型的对象和代码段(那个在前面先执行哪个 且该类没有被实例化过)
2.类中非static的代码段
3.构造函数 如果该类已被实例化过,那么static的内容就不会再次被执行。
如果继承了父类 那么执行顺序是
1.父类中static类型的对象和代码段(哪个在前面先执行哪个 且该类没有被实例化过)
2.子类中的static类型的对象和代码段(哪个在前面先执行哪个 且该类没有被实例化过)
3.父类中的代码段
4.父类的构造函数
5.子类中的非静态代码段
6.子类构造函数
另外static的内容并不是代码写好就已经被执行,而是必须在使用到、类加载或者实例化的时候才会运行,这一点需要注意
java类初始化的过程的更多相关文章
- Java类初始化
Java类初始化 成员变量的初始化和构造器 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值 对于 char.short.byte.int.long.float. ...
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...
- 【知识总结】Java类初始化顺序说明
微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...
- Java类初始化和实例初始化过程
1.类初始化过程 一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 一个子类要初始化需要先初始化父类 一个类初始化就是执行<client>()方法(编译器生成 ...
- Java 类初始化和实例初始化过程
1.类初始化过程 2.实例初始化过程 3.方法的重写
- [读书笔记] java类初始化
以下内容来自周志明的<深入理解java虚拟机>: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导 ...
- 转!!关于java类初始化顺序
原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方 ...
- JAVA 对象初始化的过程
对象初始化的过程例:Student S = new Student();1.因为new Student()用到了Student类,所以会把它从硬盘上加载进入内存2.如果有static静态代 ...
- Android(java)学习笔记136:Java类初始化顺序
Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论: 1 .继承体系的所有静态成员初始化( ...
随机推荐
- 你真的了解iOS代理设计模式吗?
在项目中我们经常会用到代理的设计模式,这是iOS中一种消息传递的方式,也可以通过这种方式来传递一些参数.这篇文章会涵盖代理的使用技巧和原理,以及代理的内存管理等方面的知识.我会通过这些方面的知识,带大 ...
- java获取汉字拼音首字母 --转载
在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.Unsupp ...
- for变量作用域(vc6与vs)
for变量:写在for循环初始语句中的变量.如:for (int i=1,j=2; i<100; i++) vc6的for变量 int i 的作用域: void func(bool condit ...
- 情人节那点事,Power BI告诉你
情人节伴随着元宵节刚刚过去,Power BI团队就送给我们一份大礼,利用来自NRF(national retail foundation)和Bing搜索的数据,在Power BI中帮助我们发现在美国那 ...
- ENode 1.0 - Saga的思想与实现
开源地址:https://github.com/tangxuehua/enode 因为enode框架的思想是,一次修改只能新建或修改一个聚合根:那么,如果一个用户请求要涉及多个聚合根的新建或修改该怎么 ...
- LeetCode——Best Time to Buy and Sell Stock III (股票买卖时机问题3)
问题: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...
- Android开发常用工具类
来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...
- TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之二 数据处理
当我们使用jQuery时大部分时间是聚焦于Dom节点的处理,给Dom节点绑定事件等等:前端mvc框架backbone则如何呢? M-Model,Collection等,是聚焦于数据的处理,它把与后台数 ...
- Hello cnblog!
Test Markdown #!/usr/env/python # coding: utf-8 # 这是一个测试文件 print "hahah" def t(): print &q ...
- <九>JDBC_获取插入记录的主键值