java类的初始化和对象的创建顺序
时间:2022-05-04
本文章向大家介绍java类的初始化和对象的创建顺序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
学习java编程思想--类的初始化p146
类的加载顺序
* 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类
* 2类初始化先初始化static成员变量和static--->
* 2先初始化父类的static成员变量和static
* 3再初始化本类的static成员变量和static
* 类加载之后,对象创建开始
* 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化)
* 2先加载父类的构造函数
* 3再加载本类的非静态成员变量
* 4再加载本类的构造函数
*
总体:
* -->表示顺序
* 父类-->子类
* 静态-->非静态
* 类-->对象
* static随类的加载而加载
* 非static成员变量随对象的创建而加载
* 成员变量先于构造器加载
1 package com.test.java.classs;
2
3 /**
4 * Created by Administrator on 2015/12/8.
5 * 类的加载顺序
6 * 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类
7 * 2类初始化先初始化static成员变量和static--->
8 * 2先初始化父类的static成员变量和static
9 * 3再初始化本类的static成员变量和static
10 * 类加载之后,对象创建开始加载
11 * 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化)
12 * 2先加载父类的构造函数
13 * 3再加载本类的非静态成员变量
14 * 4再加载本类的构造函数
15 *
16 * 总体:
17 * -->表示顺序
18 * 父类-->子类
19 * 静态-->非静态
20 * 类-->对象
21 * static随类的加载而加载
22 * 非static成员变量随对象的创建而加载
23 * 成员变量先于构造器加载
24 *
25 */
26 public class ClassLoadOrder extends Father{
27 //2父类的static成员变量加载完之后 开始加载子类的static域
28 private static int k = printInt("child static k initialized");
29 //5 子类的非静态成员变量初始化
30 private int m = printInt("child 非static 变量加载");
31
32 //子类的构造器加载
33 public ClassLoadOrder() {
34 System.out.println("child constructor initialized");
35 System.out.println("k="+k);
36 System.out.println("j="+j);
37 }
38
39 static {
40 System.out.println("child static initialized");
41 }
42 static int printInt2(){
43 System.out.println("child static function initialized");
44 return 50;
45 }
46
47 public static void main(String[] args) {
48 ClassLoadOrder c = new ClassLoadOrder();
49 }
50 }
51
52 class Father{
53 private int i=9;
54 protected int j;
55 //4 父类构造器加载
56 Father(){
57 System.out.println("father constructor initialized");
58 System.out.println("i="+i+",j="+j);
59 j=39;
60 }
61 //3 对象创建时,先初始化父类的非静态成员变量
62 int n = printInt("father 非static变量加载");
63 //1先加载父类的static域
64 static {
65 System.out.println("father static initialized");
66 }
67 //1
68 private static int x1 = printInt("father static .x1 initialized");
69 static int printInt(String s ){
70 System.out.println(s);
71 return 47;
72 }
73 }
结果:
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
- MySQL 传统复制中常见故障处理和结构优化案例分析
- sql带条件查找最小缺失编号
- activiti学习笔记(六) 监听器
- activiti学习笔记(五) 流程部署
- 打开文件open()函数的使用方法详解
- activiti学习笔记(四) 配置器
- WaitForMultipleObjects用法详解,一看就懂
- activiti学习笔记(三) 监听生命周期
- Assignment 2 | 斯坦福CS231n-深度学习与计算机视觉课程
- 五个值得深思的PHP面试题
- 5个值得深思的 PHP 面试问题
- activiti学习笔记(二) 获取流程实例
- 文件操作(偏移量)
- 基于Python实现matplotlib中动态更新图片(交互式绘图)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- AtCoder Beginner Contest 162 A~~D
- P1036 选数
- P1028 数的计算
- P1598 垂直柱状图
- 递归解决全排列问题
- Codeforces Round #622 (Div. 2)A~~C1
- AtCoder Beginner Contest 156 A~~D
- AtCoder Beginner Contest 155
- Codeforces Round #620 (Div. 2) A~~D
- DFS+记忆化搜索 -- 简单练习
- AtCoder Beginner Contest 154
- map + pair用法练习
- 蛇形矩阵
- 【SpringBoot WebFlux 系列】 header 参数解析
- URL 去重的 6 种方案!(附详细实现代码)