Java Object 构造方法的执行顺序

@author ixenos

为了使用类而做的准备工作包括三个步骤


1)加载类加载器查找字节码(一般在classpath中找),从字节码创建一个Class对象

2)链接:验证字节码,为静态域(只是static修饰的域,不包含static final )分配存储空间,解析此类对其他类的所有引用

3)初始化:若该类有超类,对其初始化,执行静态初始化器静态初始化块

类初始化时构造方法执行顺序


对于某一个子类时:

(1)初始化对象的存储空间为零或null值;(子父类链接完毕,父类初始化完毕后)

(2)调用父类构造函数;无显式调用super(...)时,默认隐式调用super(),否则调用super(...)

(3)按顺序分别调用类成员变量(例如static int)和实例成员变量(例如int)的初始化表达式;

(4)调用本身构造函数

 public class Dollar extends Money{
Rmb r=new Rmb(); public Dollar(){ System.out.println("Dollar is construct!"); }
public static void main(String[] args){ new Dollar(); }
}
class Money{
public Money(){
System.out.println("Money is construct");
}
}
class Rmb{
public Rmb(){
System.out.println("RMB is construct");
}
} /*
输出结果:
Money is construct
RMB is construct
Dollar is construct!
*/

实例化某一个类的对象的时,块和构造器的相对运行顺序


(1)父类静态块

(2)子类静态块

(3)父类块

(4)父类构造器

(5)子类块

(6)子类构造器

 public class Dog {
public Dog() {
System.out.println("Dog");
}
static{ //静态块
System.out.println("super static block");
}
{ //普通块
System.out.println("super block");
}
}
public class Mastiff extends Dog {
public Mastiff() {
System.out.println("Mastiff");
}
{
System.out.println("block");
}
static {
System.out.println("static block");
}
public static void main(String[] args){
Mastiff mastiff=new Mastiff(); //实例化一个对象
}
} /*
输出结果:
super static block
static block
super block
Dog
block
Mastiff
*/

部分参考http://blog.sina.com.cn/s/blog_6caeccff0100q5wz.html

Java Object 构造方法的执行顺序的更多相关文章

  1. Java中构造方法的执行顺序

    一.先执行内部静态对象的构造方法,如果有多个按定义的先后顺序执行:静态对象在构造的时候也是也先执行其内部的静态对象. 二.再调用父类的构造方法(父类还有父类的话,从最开始的基类开始调用),如果没有明显 ...

  2. java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题

    今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...

  3. Java(静态)变量、(静态)代码块、构造方法的执行顺序

    Java(静态)变量.(静态)代码块.构造方法的执行顺序 总结 1.父类静态变量和静态代码块(先声明的先执行); 2.子类静态变量和静态代码块(先声明的先执行); 3.父类的变量和代码块(先声明的先执 ...

  4. 静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了。

    1.静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了.1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值.2.构 ...

  5. Java面试题 静态代码块 构造代码块 构造方法 的执行顺序

    JAVA中的静态代码块 构造代码块 构造方法执行顺序: 静态代码块(类加载时执行)>>构造代码块>>构造方法 下面展示一个简单的例子,推荐大家动手运行一遍: public cl ...

  6. 【Java基础】继承中的代码块和构造方法的执行顺序探索

    本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ stati ...

  7. java中静态代码块,构造代码块,以及构造方法的执行顺序

    写了许久的代码,却把一些基础的东西都给忘了,今天无聊就顺手写了个,然后测试下,发现跟我记忆中的竟然有些出入,作为一个两年的开发,我感觉自己很失败啊. 父类pojo: public class Pojo ...

  8. Java子父类间静态代码块、非静态代码块、构造方法的执行顺序

    子类A继承父类B,A a=new A(); 正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A ...

  9. 夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 Java中的构造方法 构造方法简介 构造方法实例 例 1 例 2 Java中的几种构造方法详解 普通构造方法 默认构造方法 重载构造方法 java子类构造方法调用父类构造方法 Java中的代码块 ...

随机推荐

  1. Ubuntu16.04删除客人会话

    1.按下 Ctrl+Alt+T - 打开终端 2.输入以下指令: sudo gedit /etc/lightdm/lightdm.conf 3.源代码之后添加如下代码,然后保存.关闭,重启电脑即可. ...

  2. 网站URL重写(Java UrlRewrite 的使用)

    现在大部分的网站和商城都会使用到URL重写,接触到这个,也是因为正在做的电子商务商城.URL重写,是将原有的URL采用另一种规则来显示,使得用户方便访问同时也屏蔽一些信息. 在此说下它的好处,在开发过 ...

  3. Python基础知识学习_Day6

    一.time&datetime模块 常用选项如下: import time print(time.asctime()) #返回时间格式 print(time.localtime())#返回本地 ...

  4. BIEE应用存储过程并从前台传参

    1.     RPD操作 1.1修改连接池属性 在连接脚本添加SQL,这里选择在查询前执行 新建SQL脚本

  5. AForge.net 使用之录像拍照功能实现

    连接摄像头设备,这里需要引入 AForge.Video; AForge.Video.DirectShow; AForge.Video.FFMPEG; 还需要添加引用,aforge.dll,aforge ...

  6. C#程序基础

  7. 何为PostgreSQL?

    PostgreSQL 是以加州大学伯克利分校计算机系开发的 POSTGRES, Version 4.2 为基础的对象关系型数据库管理系统(ORDBMS).POSTGRES 领先的许多概念只是在非常迟的 ...

  8. hdu1034

    #include<stdio.h>const int MAXN=1000;int a[MAXN];int main(){ int n; int i; while(scanf("% ...

  9. git上传报错的解决方案

    刚创建的github版本库,在push代码时出错:$ git push -u origin masterTo git@github.com:******/Demo.git ! [rejected] m ...

  10. Chapter 2 Open Book——34

    His gaze became appraising. "You put on a good show," he said slowly. 他的凝视变成了评价.“你上演了一场好戏” ...