java对象的初始化顺序_JAVA 对象的初始化顺序
1. 这是个笔记.####
HelloParent.class
public class HelloParent {
helloY y = new helloY();
static {
System.out.println("parent static block");
}
public HelloParent() {
System.out.println("parent construct");
}
}
HelloChild.class
public class HelloChild extends HelloParent {
helloY y = new helloY();
static {
System.out.println("child static block");
}
public HelloChild() {
System.out.println("child construct");
}
public static void main(String[] args) {
new HelloChild ();
}
}
helloY.class
public class helloY {
helloY() {
System.out.println("this is Y");
}
}
这里我们先看运行的结果是什么:
parent static block
child static block
this is Y
parent construct
this is Y
child construct
2.我简单说下这个过程,如果说得不对,请指出,谢谢.####
这里我们可以看到主函数 main 方法 在 HelloChild.class
所以我们运行 HelloChild.class
当执行new HelloChild()时,由于是 HelloChild 继承了HelloParent 类 ,先执行父类的方法.
1.它首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面静态代码块里面的内容#####
2.再去执行子类(自己这个类)里面的静态代码块#####
3.然后去看父类有没有非静态代码块,如果有就执行父类的非静态代码块#####
4.接着执行父类的构造方法#####
5.紧接着它会去看子类有没有非静态代码块,如果有就执行子类的非静态代码块#####
6.最后去执行子类的构造方法#####
以上是基于本例来讲解的一个对象初始化过程,如果某些方法没有,就不会去执行.
3.一些注意事项####
静态代码块只执行一次
主函数 main 方法
public static void main(String[] args) {
new HelloChild ();
new HelloChild ();
}
这次运行的结果是
parent static block
child static block
this is Y
parent construct
this is Y
child construct
this is Y
parent construct
this is Y
child construct
你们也发现了.静态代码块只会执行一次.
4.总结####
1.如果有些代码必须在项目启动的时候就执行,需要使用静态代码块,这种代码是主动执行的;#####
2.需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.
3.静态方法在类加载的时候 就已经加载 可以用类名直接调用 . 比如main方法就必须是静态的 这是程序入口#####
4.两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行,而且不新建对象.#####
欢迎指正.
java对象的初始化顺序_JAVA 对象的初始化顺序相关推荐
- java 对象初始化过程_Java——对象初始化顺序使用详解
一. 代码块的概念 在探究对象初始化顺序之前,我们先通过代码来了解一下代码块的概念. class Test{ public static String str1; //静态字段 public Stri ...
- java初始化实例化_Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- java类初始化顺序_Java 类的初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行 执行顺序优先级:静态块,main(),构造块,构造方法 1. 构造函数 publi ...
- java中何时不能实例_Java对象实例是何时被创建
您可能感兴趣的话题: Java 核心提示:对象实例何时被创建,这个问题也许你用一句话就能回答完了.但是它的潜在陷阱却常常被人忽视,这个问题也许并不像你想的那么简单,不信请你耐心看下去. 对象实例何时被 ...
- java类编来那个初始化顺序_java类的初始化顺序
对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: public ...
- java对象什么时候回收_Java对象的生命周期与垃圾回收以及四种引用
创建对象的方式用new语句创建对象. 使用反射,调用java.lang.Class或java.lang.reflect.Constructor的newInstance()实例方法. 调用对象的clon ...
- java对象的内存结构_JAVA 对象内存结构
JAVA对象内存结构 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 对象头 markWo ...
- java 对象池 博客_Java对象池技术的原理及其实现的小结
一起学习 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 T2 T3.其中T1表示对象的创建时间,T2表示对象的 ...
- java中存在对多个对象加锁的情况_Java对象锁和类锁全面解析(多线程synchronized关键字)...
最近工作有用到一些多线程的东西,之前吧,有用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的概念.最近也是遇到一些问题,不搞清楚锁的概念,很容易碰壁,甚至有些时候自己连用没 ...
- java对象克隆的例子_Java对象克隆
本篇文章帮大家学习java对象克隆,包含了Java对象克隆使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. Java不提供克隆(复制)对象的自动机制.克隆对象意味着逐位复制 ...
最新文章
- Linux 第60,61天 ansible的playbook
- Cocos Creator JS 时间戳日期转换
- 使用 autossh 建立反向 SSH 隧道管理个人计算机
- ASP.NET MVC+JQueryEasyUI1.4+ADO.NET Demo
- 问题 C: 【例2-3】围圈报数
- angularjs--控制器的显示与隐示使用
- 今年暑假不AC 贪心
- spring整合quartz框架
- Github-推送代码报错“error:RPC failed;curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”解决方案
- oracle 如何查看一个表属于哪一个数据文件,如何查看某一表空间的数据文件都分布了哪些数据对象...
- 【Vegas原创】控制文件损坏,使用trace文件恢复DB
- chmod 755 与chmod +x的区别
- 安装旧版本gcc的简便方法,软件包管理命令update-alternatives使用
- 微信小程序富文本解析点击图片放大_小程序富文本提取图片可放大缩小
- C语言 - 输入x的值,输出y相应的值 x (x<1) y= 2x-1 (1≤x<10) 3x-11 (x≥10)
- AI人工智能入门(浅析AlphaGo的实现)
- matlab在能量守恒中的应用,MATLAB在《大学物理》课程实践教学中的应用分析
- echarts蚊香图
- 前端 html 的使用手册
- 微博国际版 android,新浪微博国际版
热门文章
- 【技术学习】一次Node.js站点渗透
- win10下c/c++隐藏进程
- Centos 7 上 查看MySQL当前使用的配置文件my.cnf的方法
- 2、HTML <img>标签(插入图片)
- 5、MySQL修改数据库:ALTER DATABASE用法简介
- 力扣 136. 只出现一次的数字 【异或运算】
- Tomcat启动窗口
- 北京计算机在职研究生双证学校,北京在职研究生目前有哪些学校开设了双证专业?...
- IDEA 2020 本土化,真的是全中文了,新手,开心了!
- (Java)注解和反射