java类的初始化和对象的创建顺序
学习java编程思想--类的初始化p146
类的加载顺序
* 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类
* 2类初始化先初始化static成员变量和static--->
* 2先初始化父类的static成员变量和static
* 3再初始化本类的static成员变量和static * 类加载之后,对象创建开始
* 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化)
* 2先加载父类的构造函数
* 3再加载本类的非静态成员变量
* 4再加载本类的构造函数
* 总体:
* -->表示顺序
* 父类-->子类
* 静态-->非静态
* 类-->对象
* static随类的加载而加载
* 非static成员变量随对象的创建而加载
* 成员变量先于构造器加载
package com.test.java.classs; /**
* Created by Administrator on 2015/12/8.
* 类的加载顺序
* 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类
* 2类初始化先初始化static成员变量和static--->
* 2先初始化父类的static成员变量和static
* 3再初始化本类的static成员变量和static
* 类加载之后,对象创建开始加载
* 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化)
* 2先加载父类的构造函数
* 3再加载本类的非静态成员变量
* 4再加载本类的构造函数
*
* 总体:
* -->表示顺序
* 父类-->子类
* 静态-->非静态
* 类-->对象
* static随类的加载而加载
* 非static成员变量随对象的创建而加载
* 成员变量先于构造器加载
*
*/
public class ClassLoadOrder extends Father{
//2父类的static成员变量加载完之后 开始加载子类的static域
private static int k = printInt("child static k initialized");
//5 子类的非静态成员变量初始化
private int m = printInt("child 非static 变量加载"); //子类的构造器加载
public ClassLoadOrder() {
System.out.println("child constructor initialized");
System.out.println("k="+k);
System.out.println("j="+j);
} static {
System.out.println("child static initialized");
}
static int printInt2(){
System.out.println("child static function initialized");
return 50;
} public static void main(String[] args) {
ClassLoadOrder c = new ClassLoadOrder();
}
} class Father{
private int i=9;
protected int j;
//4 父类构造器加载
Father(){
System.out.println("father constructor initialized");
System.out.println("i="+i+",j="+j);
j=39;
}
//3 对象创建时,先初始化父类的非静态成员变量
int n = printInt("father 非static变量加载");
//1先加载父类的static域
static {
System.out.println("father static initialized");
}
//
private static int x1 = printInt("father static .x1 initialized");
static int printInt(String s ){
System.out.println(s);
return 47;
}
}
结果:
father static initialized
father static .x1 initialized
child static k initialized
child static initialized
father 非static变量加载
father constructor initialized
i=9,j=0
child 非static 变量加载
child constructor initialized
k=47
j=39
java类的初始化和对象的创建顺序的更多相关文章
- java中类的初始化和对象的初始化
静态的属于全局静态区,这个部分独立存在,不管是成员还是块,都是静态的,大家地位相等,先到先得. 然后是成员初始化,这个部分在类的构造函数前初始化,因为编译器(或者设计者)可能认为构造函数调用了这个成员 ...
- java类的初始化和构造函数
本人小白一枚,看java类的初始化的时候好晕的说,我觉着书上尽管说的对.但总认为有些信息没说出来,没说清楚,看了好多文章博客的,如今有些感悟,来小写下总结,也算是为以后再次复习种个好果子. 先摘一下书 ...
- 图示Java类的初始化顺序
Java类的初始化顺序 在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行. 以下为代码验证阶段,一共三个类 ...
- Java类的初始化与实例对象的初始化
Java对象初始化详解 2013/04/10 · 开发 · 1 评论· java 分享到:43 与<YII框架>不得不说的故事—扩展篇 sass进阶篇 Spring事务管理 Android ...
- java类的初始化块/执行顺序,实例化对象数据赋值
java里初始化一个类的对象,通过初始化快或者构造方法进行数据赋值.与其相关的执行代码有这么几种: 静态初始化块 初始化块 构造方法 静态初始化块 静态初始化块只在类加载时执行一次,同时静态初始化块只 ...
- java类的初始化
转载:http://blog.csdn.net/moreevan/article/details/6968718 我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程.下面先对这三 ...
- Java虚拟机(二)对象的创建与OOP-Klass模型
前言 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇文章会给你答案. 1.对象的创建 对象的 ...
- 深入java虚拟机(二) 对象的创建
java创建对象通常的方式是使用new指令,虚拟机会首先检查new指令的参数(也就是new关键字后面跟着的类名)是否能够在常量池中找到一个类的符号引用,并根据这个符号引用检查其代表的类是否已经加载.解 ...
- java之类的抽取与对象的创建
Java语言之类的抽取 前言:世界由什么组成?This is a question.有人说是原子.分子,有人说是山川草木. 诚然,一千个人眼中有一千个哈姆雷特.而在程序员眼中,万物皆对象. 定义: 在 ...
随机推荐
- delphi 中如何查看网页POSTDATA
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool ...
- Anciroid的IPC机制-Binder概述
在Linux系统中,是以进程为单位分配和管理资源的.出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭.但是,在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项 ...
- Yii2中的环境配置
默认的Debug配置 在入口文件中 defined ( 'YII_DEBUG' ) or define ( 'YII_DEBUG', true ); defined ( 'YII_ENV' ) or ...
- kali linux 2016.1 滚动更新源
修改 /etc/apt/sources.list #kali官方源 deb http://http.kali.org/kali kali-rolling main non-free contrib ...
- 正式工作的前奏——一个Java程序员的实习总结(1)
不知不觉,到深圳实习已经三个礼拜了.跟在暑假的三个半月实习不一样,这次收获更多,感受更好,算是摆脱了那次实习给我带来的阴影(这个会放到以后才说). 在知乎上,有这么一个问题,你现在最想跟刚工作时的你说 ...
- 记一个界面刷新相关的Bug
今天遇到一个比较有意思的bug, 这里简单记录下. Bug的症状是通过拖拉边框把我们客户端主窗口拖小之后,再最大化,会发现窗口显示有问题, 看起来像是刷新问题, 有些地方显示的不对了. 这里要说明的是 ...
- [FPGA] 2、新建并运行一个工程
上一篇将开发板的情况大致介绍了一下,这次将一步一步展示如何新建.调试并下载运行一个点亮LED的工程. 1)打开Quartus新建工程: 2)填写规则大致如下: 3)选择我们芯片的类型: 4)点击fil ...
- css计数器详解
什么是css计数器 体验更佳排版请戳原文链接:http://blog.liuxianan.com/css-counters.html 就是采用css给一些html元素自动生成编号,比如类似1.3.2这 ...
- django开发个人简易Blog——数据模型
提到数据模型,一定要说一下MVC,MVC框架是现代web开发中最流行的开发框架,它将数据与业务逻辑分开,减小了应用之间的高度耦合.个人非常喜欢MVC开发框架,除了具有上述特性,它使得web开发变得非常 ...
- i++ and ++i efficiency
其实这个问题,百度的话,有一大堆的参考资料,但是,在这里,我产生了一些困惑,他们所分析的结果,和我的测试代码不一致,这让我纠结了,所以,再次的写一下这个问题,顺顺思路. 我的测试环境:系统:Windo ...