Java Object 构造方法的执行顺序
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 构造方法的执行顺序的更多相关文章
- Java中构造方法的执行顺序
一.先执行内部静态对象的构造方法,如果有多个按定义的先后顺序执行:静态对象在构造的时候也是也先执行其内部的静态对象. 二.再调用父类的构造方法(父类还有父类的话,从最开始的基类开始调用),如果没有明显 ...
- java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题
今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...
- Java(静态)变量、(静态)代码块、构造方法的执行顺序
Java(静态)变量.(静态)代码块.构造方法的执行顺序 总结 1.父类静态变量和静态代码块(先声明的先执行); 2.子类静态变量和静态代码块(先声明的先执行); 3.父类的变量和代码块(先声明的先执 ...
- 静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了。
1.静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了.1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值.2.构 ...
- Java面试题 静态代码块 构造代码块 构造方法 的执行顺序
JAVA中的静态代码块 构造代码块 构造方法执行顺序: 静态代码块(类加载时执行)>>构造代码块>>构造方法 下面展示一个简单的例子,推荐大家动手运行一遍: public cl ...
- 【Java基础】继承中的代码块和构造方法的执行顺序探索
本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ stati ...
- java中静态代码块,构造代码块,以及构造方法的执行顺序
写了许久的代码,却把一些基础的东西都给忘了,今天无聊就顺手写了个,然后测试下,发现跟我记忆中的竟然有些出入,作为一个两年的开发,我感觉自己很失败啊. 父类pojo: public class Pojo ...
- Java子父类间静态代码块、非静态代码块、构造方法的执行顺序
子类A继承父类B,A a=new A(); 正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A ...
- 夯实Java基础系列7:一文读懂Java 代码块和执行顺序
目录 Java中的构造方法 构造方法简介 构造方法实例 例 1 例 2 Java中的几种构造方法详解 普通构造方法 默认构造方法 重载构造方法 java子类构造方法调用父类构造方法 Java中的代码块 ...
随机推荐
- python爬虫框架scrapy初识(一)
Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.所谓网络爬虫,就是一个在网上到处或定向抓取数据的 ...
- Android高级开发专题晋升班
Android高级开发专题晋升班 适用人群:1-3年以上经验的开发者丨学员平均薪酬20K/月
- js时间戳转换时间格式
function getLocalTime(time){ if(time > 0){ var dateStr = new Date(time * 1000); var str = "& ...
- Openjudge-NOI题库-和为给定数
题目描述 Description 给出若干个整数,询问其中是否有一对数的和等于给定的数. 输入输出格式 Input/output 输入格式: 共三行: 第一行是整数n(0 < n <= ...
- 解决 spring mvc 3.+ 结合 hibernate3.+ 使用<tx:annotation-driven>声明式事务无法提交的问题
spring mvc使用注解方式:service使用@service注解 事务使用@Transactional 事务配置使用 <tx:annotation-driven transaction- ...
- 图片添加border 不占用图片的大小
因为设计稿中的分割线大多分为两种情况:1.在图片右侧:2.在图片右侧+下方. 那么使用伪类before和after以及绝对定位很容易在不改变原布局的情况使图片按照设计稿输出和保留分割线. 例div.i ...
- 阿里云Linux服务器挂载硬盘分区
查看所有硬盘与分区 fdisk -l 运行命令 fdisk /dev/xvdb 根据提示,依次输入 n p 1 (数字一 不是 L) 回车 回车 w 提示 Syncing disks.时,表示已 ...
- Photoshop定义画笔选区为空的原因
定义画笔预设时,选择选区后需填充黑色,否则将出现选区为空的提示
- hdu1028
#include<stdio.h>#include<string.h>const int MAXN=130;int dp[MAXN][MAXN];//dp[i][j]表示 i ...
- c++中宽字节表示
1.C++语言中_T Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候 ...