【JAVA基础篇】对象初始化过程

我们都知道,创建对象是由 new关键字调用构造方法 返回类实例(实际上还可以通过反射来创建实例)。

例如 : Person jack = new Person();

这句话到底做了什么事情呢 ? 其实就是讲对象的初始化过程。

  • 1、 new 用到了Person.class,所以会先找到Person.class文件,并加载到内存中(用到类中的内容类就会被加载)
  • 2、执行该对象的static代码块(静态初始块)。(如果有的话,给Person.class类进行初始化)
  • 3、在堆内存中开辟空间,分配内存地址
  • 4、在堆内存中建立对象特有属性,并进行默认初始化
  • 5、对属性进行显示初始化(声明成员属性并赋值)
  • 6、执行构造块
  • 7、执行构造函数
  • 8、将内存地址赋值给栈内存中的jack变量

如下图:

下面我们来看两个案例

案例一

以下代码的输出结果是什么?


public class B {public static B t1 = new B();public static B t2 = new B();{System.out.println("构造块");}static {System.out.println("静态块");}public static void main(String[] args) {B t = new B();}
}

答案是:

构造块
构造块
静态块
构造块

答案分析:JVM先加载B这个类,初始化静态域(静态变量、静态块和静态方法,按照代码先后顺序初始化),先初始化t1,t2,所以先输出构造块 构造块;然后执行静态块,所以输出静态块;最后执行new B()输出构造块

案例二

一下代码的输出结果是什么?


public class B {static {i = 100;}public static int i = 1;public static void main(String[] args) {System.out.println(i);}
}

答案是:1

答案分析:静态变量是在类初始化时首先被加载的,JVM会去查找类中所有的静态声明,然后分配空间,注意这时候只是完成了地址空间的分配,还没有赋值,之后JVM会根据类中静态赋值(包括静态类赋值和静态块赋值)的先后顺序来执行。对于程序来说,就是先声明了int类型的地址空间,并把地址传递给了i,然后按照类中的先后顺序执行赋值动作,首先执行静态块中i=100,接着执行i=1,那最后的结果就是i=1了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java基础篇】try catch finally语句包含return语句时的执行过程

网上有很多人探讨Java中异常捕获机制try…catch…finally块中的finally语句是不是一定会被执行? 很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被 try语句没有被执行到,如在…

eclipse指定JDK版本启动,解决version XXX of the JVM is not suitable for this product.Version:XXX 问题

问题描述:启动eclipse时,提示version 1.7.0 of the JVM is not suitable for this product.Version:1.8 or greater is required. 原因分析:原因是我的笔记本安装了多个JDK版本,但是现在我的JAVA_HOME配置的是jdk1.7的路径&#x…

【JAVA基础篇】Socket编程

一、Socket的概念 Socket是一种通讯机制,通常称为套接字。英文原意是插座,顾明思义,Socket像是一个多孔插座,可以提供多个端口的连接服务 ps:至于socket在计算机术语中怎么就翻译成了“套接字”这个令人费解的词,这真…

【JAVA基础篇】注解

一、什么是注解? 注解是元数据,所谓元数据就是描述数据的数据。 在annotation诞生之前(jdk1.5诞生了注解),甚至之后,xml被广泛的由于描述元数据。但是后来,有一些应用开发工程师和架构师觉得它…

【JAVA基础篇】IO流

一、流的概念 “对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务。” ――《Think in Java》 无论是系统、还是语言的设计中IO的设计都是异常复杂的。面临的最大的挑战一般是如何覆盖所有可能的因素,我们不仅仅要考虑文件、…

SpringMVC注解

一,RequestMapping 可以用在类和方法上 1.1 作用: 将客户端请求映射到可匹配的类和方法中 1.2 属性: name 给映射指定一个名字 path(同value相同) 请求的url,path{"/mixedAttribute1","/mixedA…

【JAVA基础篇】运算符

一、表达式 表达式由运算符和操作数组成 例如: 5 num1 num1num2 sumnum1num2 二、运算符分类 算数运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符、位运算符 三、算数运算符 四、赋值运算符 格式:变量表达式 例如:int n3…

a4纸网页打印 table_打印模板不愁人,你还在打印单调的A4纸吗?

软件介绍早在几年前,社会上就已经开始了数字化、无纸化的推广,但是就算再怎么无纸化,纸张还是有它必要的存在,在工作、学习过程中,打印的需求也必不可少的。但是一般的打印都是比较平庸的,要做会议记录&…

IP地址、子网掩码、网关、默认网关、DNS的理解

IP地址 Internet上为了区分数以亿计的主机而给每个主机分配一个专门的地址,通过IP地址可以访问到每台主机。 子网掩码 子网掩码又称网络掩码、地址掩码、子网络遮罩。它是用来指明一个IP地址哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位…

上证指数30年k线图_技术预判2020:上证指数要突破3500点才会“井喷”

2019年的行情很快就要收官了,截止目前,上证指数今年的涨幅是20.5%,不过可能有部分投资者今年的收益率还没达到大盘指数的平均水平。不管怎样,今年很快就要翻篇了,关键是看2020年股市能不能迎来更好的行情了。而总结得失…

【JAVA基础篇】基本数据类型及自动类型转换

一、8种基本数据类型以及占用内存空间大小 boolean 1byte或4byte byte 8bit/1byte char 16bit/2byte short 16bit/2byte float 32bit/4byte int 32bit/4byte long 64bit/8byte double 64bit/8byte 二、自动类型转换 …

的优缺点_浅谈桉木家具的优缺点

家具现在的材质是有很多的,木质的,石材的,还有真空充气的,都是很不错的类型。桉木家具是现在很多人都喜欢的一种材质,但是很多人对桉木家具的优缺点不是很清楚,为了能够让大家更加清楚的了解桉木家具&#…

【算法篇】递归

一、递归的概念 程序调用自身的编程技巧称为递归。 递归的核心思想就是将一个大规模复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 二、递归的优点 使用递归的好处是只需要少量的代码就可以描述出求解问题过程中多次重复的计算,大大减少了程序…

客户说发货慢怎么回复_女生微信说身体不舒服怎么回复关心她?

当你不在女生身边,女生微信给你说身体不舒服,肯定需要说点话来安慰她了。多喝热水肯定是不行了,一点用处都没有,还会让女生觉得你根本不重视她,是在敷衍她,那女生微信说身体不舒服怎么回复关心她呢&#xf…

【算法篇】八种内排序算法

常用的八种内排序算法分别是: 交换排序:冒泡排序、快速排序选择排序:简单选择排序、堆排序插入排序:直接插入排序、希尔排序归并排序基数排序 内排序巧记:选(选择)舰(简单选择)队(堆)的时候脚(交换)毛(冒泡)快(快速)&…

数据分析专题报告范文6篇_小学生看图写话范文:小熊玩跷跷板?(6篇),让孩子参考练习...

​范文01:小熊跷跷板一天,天气晴朗,胖乎乎的小熊和小白兔一起玩跷跷板。小熊一屁股坐在地上,小白兔说:“啊!我有恐高症哇!”小熊说:“我比你重,所以你没有办法把我翘起来…

PL/SQL

1 PL/SQLPL/SQL:过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环…

20sccm_SCCM 2012安装图解教程(一步一步详细步骤)

本系列文章的环境架构如下图所示:所有服务器安装的操作系统都是windows Server 2008 R2 中文企业版。计算机名软件、版本及角色SC-DC.SC.COMwindows Server 2008 R2 Enterprise /Active Directory 2008 R2SC-SQL.SC.COMSQL Server 2008 R2 EnterpriseSC-SCCM.SC.COM…

【Java中级篇】Dom4j解析xml数据

一、依赖 <dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency> 二、test.xml <?xml version"1.0" encoding"UTF-8"?> <students>…

redis 附近的人_使用redis—geo api实现搜索附近的人,自己写的一个composer包

安装如果是应用在项目当中的话找到根目录&#xff0c;需要和 composer.json同级composer require gaopengfei/redis_lbs基本操作初始化require_once __DIR__./vendor/autoload.php;$lbs new \LBS\Services\LBSService();添加$add_params [[name > yabao_road,long > 11…