一道题反映Java的类初始化过程
Java的类初始化过程:
1. 父类的static成员变量,static语句块。
2. 子类的static成员变量,static语句块。
3. 父类的普通成员变量,构造函数。
4. 子类的普通成员变量,构造函数。
注意:如果下面一句话没看懂,没关系,看下面的一个例子就明白了~
如果子类覆盖了父类的成员函数,该成员函数又在上面过程3中的构造函数中被调用,则此时调用的是子类的那个成员函数,如果成员函数中还含有子类中没有被初始化的普通成员变量,则若是int类型,默认初始化为0,若为对象类型,默认初始化为null.
Java实例如下:
abstract class Base {
public int age = getNumber(100);
static int sage = getNumber(50);
static {
System.out.println("base static block");
}
public Base() {
System.out.println(age);
System.out.println("base start");
draw();
System.out.println("base end");
}
static int getNumber(int base) {
System.out.println("base.getNumber int" + base);
return base;
}
public void draw() {
System.out.println("base.draw");
}
} public class InitializeOrder extends Base {
public int age = getNumber(1001);
private int _radius = getNumber(10);
static int sage = getNumber(250);
static {
System.out.println("subclass static block");
}
public InitializeOrder(int radius) {
_radius = radius;
System.out.println(age);
System.out.println("initializeOrder initialized");
}
public void draw() {
System.out.println("initializeOrder.draw" + _radius);
} public static void main(String[] args) {
new InitializeOrder(100);
}
}
输出结果:
base.getNumber int50
base static block
base.getNumber int250
subclass static block
base.getNumber int100
100
base start
initializeOrder.draw0
base end
base.getNumber int1001
base.getNumber int10
1001
initializeOrder initialized
尤其注意上面输出中的加红色的部分!
一道题反映Java的类初始化过程的更多相关文章
- java代码的初始化过程研究
刚刚在ITeye上看到一篇关于java代码初始化的文章,看到代码我试着推理了下结果,虽然是大学时代学的知识了,没想到还能做对.(看来自己大学时掌握的基础还算不错,(*^__^*) 嘻嘻……)但 ...
- 【软件构造】-<笔记>-浅谈java中类的初始化过程
编写java程序时,每创建一个新的对象,都会对对象的内容进行初始化. 每一个类的方法中的局部变量都有严格的初始化要求,因此假如写出下面的程序: void f(){ int i; i++; } 编译时就 ...
- Java虚拟机 - 类初始化
[深入Java虚拟机]之三:类初始化 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码.虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化: 遇到new. ...
- SpringBoot启动流程分析(一):SpringApplication类初始化过程
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...
- Java 中类的初始化过程
先来一张 JVM 中的内存模型 . 在Java 虚拟机原理这本书中介绍了类会被初始化的 5 种情况 . 1 遇到 new getstatic putstatic 和 invokestatic 这 4 ...
- ClassLoader&双亲委派&类初始化过程
1.class sycle 类加载的生命周期:加载(Loading)–>验证(Verification)–>准备(Preparation)–>解析(Resolution)–>初 ...
- JAVA对象的初始化过程
出处:http://blog.csdn.net/andrew323/article/details/4665379 下面我们通过两个例题来说明对象的实例化过程. 例1: 编译并运行该程序会有以下输 ...
- Java中对象初始化过程
Java为对象初始化提供了多种选项. 当new一个对象的时候,对象初始化开始: 1.首先,JVM加载类(只加载一次,所以,即使多次new对象,下面的代码也只会在第一次new的时候执行一次),此时, 静 ...
- Java的对象初始化过程
成员变量(字段)初始化顺序 在一个类里初始化的顺序是由成员变量在类里面的定义的顺序来决定的.即使成员变量大量散布于类的各个方法定义的中间,那些成员变量仍会在调用任何方法之前得以初始化,甚至在构造函数调 ...
随机推荐
- Vim 便捷 | 自己的Vim
在.vimrc中安排自己的Vim set softtabstop=4 "将连续数量的空格视为一个制表符 set shiftwidth=4 "自动缩进所使用的空白数 set auto ...
- MySQL使用查看表SELECT语句
来源:实验楼 本节实验中学习了 SELECT 语句的常用方法: 基本语法 数学符号条件 AND OR IN 通配符 排序 SQL 内置函数和计算 子查询与连接查询 输入命令,下载代码: git clo ...
- CAS Server集成QQ登录、新浪微博登录源码及配置文件
转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1446 CAS Server集成QQ第三方登录,CAS Server集成新浪微博第三方登录以 ...
- 推荐Java五大微服务器及其代码示例教程
来源素文宅博客:http://blog.yoodb.com/yoodb/article/detail/1339 微服务越来越多地用于开发领域,因为开发人员致力于创建更大,更复杂的应用程序,这些应用程序 ...
- Hazel,自动整理文件,让你的 Mac 井井有条
原文地址 https://sspai.com/post/35225 让我们从实际需求出发,看看问题出在哪里,并在此基础上认识和学习使用 Hazel. 电脑随着使用时间的增长,其中的文件也在疯狂的增长, ...
- 面试总问的jvm调优到底是要干什么?
1. 压力测试的理解,xxx的性能10w/s,对你有意义么? 没有那家卖瓜的会说自己家的不甜,同样,没有哪个开源项目愿意告诉你在对它条件最苛刻的时候压力情况是多少,一般官网号称给你看的性能指标都是在最 ...
- 区块链轻松上手:原理、源码、搭建与应用pdf电子版下载
区块链轻松上手:原理.源码.搭建与应用pdf电子版下载 链接:https://pan.baidu.com/s/1rKF4U9wq612RMIChs0zv8w提取码:hquz <区块链轻松上手:原 ...
- 使用 MUI 自制 弹出层
使用 MUI 自制 弹出层 <div class="zp-mask" style="display: none; width: 100%;height: 100%; ...
- django_2:模板
使用模板变量: 在html文件中,{{title}}即为模板变量, 在view.py文件中,render函数,增加第三个参数,以字典形式给值. def index(req): return rende ...
- 新一代开源即时通讯应用源码定制 运营级IM聊天源码
公司介绍:我们是专业的IM服务提供商!哇呼Chat是一款包含android客户端/ios客户端/pc客户端/WEB客户端的即时通讯系统.本系统完全自主研发,服务器端源码直接部署在客户主机.非任何第三方 ...