java隐式的初始化是指什么?

和显式有什么区别?... 和显式有什么区别? 展开
 我来答
无语翘楚1
推荐于2016-06-15 · 知道合伙人生活技巧行家
无语翘楚1
知道合伙人生活技巧行家
采纳数:649 获赞数:14203
毕业于广州中山职业技术学院,平时喜欢去图书馆读些关于生活健康类的书籍,对于这类知识有着很深的了解。

向TA提问 私信TA
展开全部

1.Java对象何时被初始化

Java对象在其被创建时初始化,在Java代码中,有两种行为可以引起对象的创建。其中比较直观的一种,也就是通常所说的显式对象创建,就是通过new关键字来调用一个类的构造函数,通过构造函数来创建一个对象,这种方式在java规范中被称为“由执行类实例创建表达式而引起的对象创建”。
当然,除了显式地创建对象,以下的几种行为也会引起对象的创建,但是并不是通过new关键字来完成的,因此被称作隐式对象创建,他们分别是:

● 加载一个包含String字面量的类或者接口会引起一个新的String对象被创建,除非包含相同字面量的String对象已经存在与虚拟机内了(JVM会在内存中会为所有碰到String字面量维护一份列表,程序中使用的相同字面量都会指向同一个String对象)

● 自动装箱机制可能会引起一个原子类型的包装类对象被创建;

● String连接符也可能会引起新的String或者StringBuilder对象被创建,同时还可能引起原子类型的包装对象被创建,比如(本人试了下,在mac ox下1.6.0_29版本的javac,对待下面的代码会通过StringBuilder来完成字符串的连接,并没有将i包装成Integer,因为StringBuilder的append方法有一个重载,其方法参数是int);


2.Java如何初始化对象

当一个对象被创建之后,虚拟机会为其分配内存,主要用来存放对象的实例变量及其从超类继承过来的实例变量(即使这些从超类继承过来的实例变量有可能被隐藏也会被分配空间)。在为这些实例变量分配内存的同时,这些实例变量也会被赋予默认值。

上面的代码中,Foo和Bar中都定义了变量i,在main方法中,我们用Foo引用一个Bar对象,如果实例变量与方法一样,允许被覆盖,那么打印的结果应该是1,但是实际的结果确是0。
但是如果我们在Bar的方法中直接使用i,那么用的会是Bar对象自己定义的实例变量i,这就是隐藏,Bar对象中的i把Foo对象中的i给隐藏了,这条规则对于静态变量同样适用。

在内存分配完成之后,java的虚拟机就会开始对新创建的对象执行初始化操作,因为java规范要求在一个对象的引用可见之前需要对其进行初始化。在Java中,三种执行对象初始化的结构,分别是实例初始化器、实例变量初始化器以及构造函数。

QQMSD8
推荐于2016-03-31 · 知道合伙人软件行家
QQMSD8
知道合伙人软件行家
采纳数:6788 获赞数:13239
没有做不到,只有想不到,帮助别人的同时也是对自己的提升

向TA提问 私信TA
展开全部
显式意图就是你知道是哪个class直接
例如 Intent intent = new Intent(context, MainActivity.class);
你知道要激活MainActivity,这种就叫显式意图
但是有些你不知道是哪个Activity呢
例如你要调用系统的相机,或者调用系统的文件选择,又或者调用系统的网络设置等等
你根本不知道是哪个Activity,这时候就要用隐式意图
Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sthov
活跃答主

2015-08-07 · 以软件项目文档为主,兼顾技能知识手册。
sthov
采纳数:205 获赞数:280

向TA提问 私信TA
展开全部
比如:
complex<double> cd;
...
complex<float> cf = cd; // 是隐式初始化
complex<float> cf(cd); // 是显示初始化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式