Java -基础知识之类的初始化顺序
前言
在听课时遇到的一个复杂的类初始化实例问题,在这里进行总结和反思,也是为了更好的可以回看
问题-1
小试牛刀O(∩_∩)O
- 主方法实例化Hongtao类
答案为:
getPhone
初始化块
构造函数
小结: 静态>类加载>类构建;所以静态方法加载完后,从上到下执行代码。调用getPhone() 先输出getPhone,初始化块属于类加载过程,所以先于构造函数执行。
问题-2
进阶版
答案:
getPhone
静态代码块
getPhone
初始化块
构造函数
小结 :在此问题中多出来静态变量和静态初始化块的部分,需要注意的是,静态的方法也是调用时才会使用,所有静态的变量和初始化块也要按照从上到下的执行顺序。
问题-3
终极版
public class InitalDemo {private static int k = 1;private static InitalDemo t1 = new InitalDemo("t1");private static InitalDemo t2 = new InitalDemo("t2");private static int i=print("i");private static int n = 99;{print("初始化块");j=100;}public InitalDemo(String str){System.out.println((k++)+":" + str + " i="+i+ " n=" + n);++i;++n;}static {print("静态块");n=100;}private int j = print("j");public static int print(String str){System.out.println((k++)+":" + str + " i="+i+ " n=" + n);++n;return ++i;}public static void main(String[] args) {InitalDemo test = new InitalDemo("test");}
}
答案:
1:初始化块 i=0 n=0
2:j i= 1 n =1
3:t1 i=2 n=2
4:初始化块 i=3 n=3
5:j i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:静态块 i=7 n=99
9:初始化块 i=8 n=100
10:j i=9 n=101
11:test i=10 n=102
小结 :
- 此问题相对于上面一个,增加了类内调用构造函数,需要记住此时,每遇到一个调用构造函数则执行一遍类内非静态的语句,比如此问题中的初始化块>赋值>构造函数。
- 静态变量属于所有类,所有类中的静态变量都指向同一个地址
总结:
首先static修饰的成员变量和方法是从属于类的, 而普通变量和方法是从属于对象的,在调用某个类的构造方法之前,应该先加载类信息,包括初始化块!之后才能创建对象!
static 优先,但遇到new 则从上到下执行一次非静态初始化语句和初始化块和相应的构造函数
- 当进一步涉及到继承关系时
静态优先,构造随后, 先父再子
父类静态代码块 ->子类静态代码块 ->父类非静态代码块 -> 父类构造函数 -> 子类非静态代码块 -> 子类构造函数
Java -基础知识之类的初始化顺序相关推荐
- java基础之——类的初始化顺序(转载)
原文地址:http://www.cnblogs.com/chrischennx/p/3612295.html 由浅入深,首先,我们来看一下,一个类初始化有关的都有些啥米: 静态成员变量.静态代码块.普 ...
- 《Java基础知识》Java变量的声明、初始化和作用域
<Java基础知识>Java变量的声明.初始化和作用域 一.Java变量的声明 在 Java 程序设计中,每个声明的变量都必须分配一个类型.声明一个变量时,应该先声明变量的类型,随后再声明 ...
- 【转】Java基础知识整理
本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...
- java 基础知识总结
Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思 ...
- 【转】java基础知识总结
Java基础知识总结 本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版 ...
- java(5)---Java基础知识大全
Java基础知识大全 一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...
- 黑马程序员--java基础知识注意点收录
java基础知识注意点收录 1.使用path设置路径时,为避免由于虚拟机存放位置的不同而改变设置路径时造成意外的其他错误,使用变量 JAVA_HOME记住虚拟机的位置,然后在path中通过%JAVA_ ...
- Java基础知识(九) 容器
Java基础知识 1. Java Collections 框架是什么 2. 什么是迭代器 3. ArrayList.Vector 和 LinkedList 有什么区别 4. HashMap.Hasht ...
- Java基础知识(一) 基本概念
Java基础知识 基本概念 1. Java语言的优点 2. Java与c/c++有什么异同 3. 为什么需要public static void main(String[] args)这个方法 4. ...
最新文章
- 头戴式AR/VR 光学标定
- Docker 用法总结之:管理工具 shipyard 的具体使用指南
- python3 系统监控脚本(CPU,memory,网络,disk等)
- GitHub NetFlow
- eclipse + maven搭建SSM框架
- facade 提供一个接口,通过这个接口,可以使一个子系统更容易使用。
- softmax ce loss_神经网络中的蒸馏技术,从Softmax开始说起
- unity, shader, Tags的位置
- 为PHP安装Memcached扩展连接Memcached
- JQuery源码解析(一)
- MVC 用户权限HttpContext.User.IsInRole()
- Linux 2.6 完全公平调度算法CFS(Completely Fair Scheduler) 分析
- Ubuntu 安装 Linux Deepin 截图工具(.deb)
- Python基本输出函数print()用法小结
- golang mysql条件查询_mysql – 将变量传递给GoLang查询
- Java之strictfp关键字
- 刷屏的北京雾霾,2018 年北上广深空气质量分析
- (一)SLAM拓扑地图(地图的生成和显示)
- 怎样编辑PDF,PDF怎么删除页面
- FPGA 数字信号处理之 FSK 调制、解调的实现与仿真基于 verilog + ise + modelsim + matlab (保姆级)
热门文章
- CodeMonkey过关学习笔记系列:11-20关 对象
- js 计算时间差(去除法定节假日,休息日,精确到天)
- 不用栈实现二叉树非递归中序遍历
- matlab转C语言的操作步骤(1)——基本操作
- 51单片机如何跳出wile循环_单片机C语言之串口通信协议(代码分享)
- echarts图表使字体大小为自适应 fontSize函数fontSize(0.15)
- 对比排行 | 各科技公司的科研实力(2022)
- 阿里云部署Java网站和微信开发调试心得技巧(上)
- 苹果 AirTag 防丢器震撼发布,让你的物品精确定位,防止丢失
- 【产品】支付宝蚂蚁森林产品体验报告