从一段代码看java对象初始化中属性的初始化

在java代码中,当new一个对象的时候,先是创建了一个属性为零值的对象,然后进行初始化:

```java
public class Test {
private Date date = new Date();
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
for (int i = 0; i < 5; i++) {
Thread.sleep(1000);
System.out.println(t.date.toString());
}
}
}
```

该代码运行结果:

```bash
Tue Jun 05 15:56:46 CST 2018
Tue Jun 05 15:56:46 CST 2018
Tue Jun 05 15:56:46 CST 2018
Tue Jun 05 15:56:46 CST 2018
Tue Jun 05 15:56:46 CST 2018
```

也就是说在创建Test类的对象t的时候,其date属性被初始化成当前时间,后续再调用date属性的时候会得到固定的值。而如果再次创建Test类的对象,则date属性会发生变化:

```java
public class Test {
private Date date = new Date();
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
for (int i = 0; i < 5; i++) {
System.out.println(t.date.toString());
}
System.out.println("--------------------------------------------");
Thread.sleep(1000);
t = new Test();
for (int i = 0; i < 5; i++) {
System.out.println(t.date.toString());
}
}
}
```

该代码运行结果:

```bash
Tue Jun 05 16:02:25 CST 2018
Tue Jun 05 16:02:25 CST 2018
Tue Jun 05 16:02:25 CST 2018
Tue Jun 05 16:02:25 CST 2018
Tue Jun 05 16:02:25 CST 2018
--------------------------------------------
Tue Jun 05 16:02:26 CST 2018
Tue Jun 05 16:02:26 CST 2018
Tue Jun 05 16:02:26 CST 2018
Tue Jun 05 16:02:26 CST 2018
Tue Jun 05 16:02:26 CST 2018
```

而如果将date属性设置为static的话,则即使再次创建Test类的对象, date属性也不会发生变化:

```java
public class Test {
private static Date date = new Date();
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
for (int i = 0; i < 5; i++) {
System.out.println(t.date.toString());
}
System.out.println("--------------------------------------------");
Thread.sleep(1000);
t = new Test();
for (int i = 0; i < 5; i++) {
System.out.println(t.date.toString());
}
}
}
```

该代码运行结果:

```bash
Tue Jun 05 16:07:41 CST 2018
Tue Jun 05 16:07:41 CST 2018
Tue Jun 05 16:07:41 CST 2018
Tue Jun 05 16:07:41 CST 2018
Tue Jun 05 16:07:41 CST 2018
--------------------------------------------
Tue Jun 05 16:07:41 CST 2018
Tue Jun 05 16:07:41 CST 2018
Tue Jun 05 16:07:41 CST 2018
Tue Jun 05 16:07:41 CST 2018
Tue Jun 05 16:07:41 CST 2018
```

结论:

1. 针对同一个对象,其属性会初始化一次,如果只是读取这个属性,这个属性不会发生变化;
2. 如果创建一个类的不同实例,其属性值有可能不同,而如果属性值是static的话则是相同的。

原文地址:https://www.cnblogs.com/cord/p/9226681.html

时间: 2024-10-28 06:22:47

从一段代码看java对象初始化中属性的初始化的相关文章

IntelliJ IDEA平台下JNI编程(五)—本地C代码创建Java对象及引用

本文学习如何在C代码中创建Java对象和对象数组,前面我们学习了C代码中访问Java对象的属性和方法,其实在创建对象时本质上也就是调用构造函数,因此本文知识学习起来也很轻松.有了前面学习数组创建的方法后,C代码创建对象数组同样很容易,下面开始学习吧~ 1. C代码创建Java对象 创建Java对象本质就是调用构造函数,这与上一篇文章中提到的调用方法使用方法一致.下面直接贴代码: package com.huachao.java; /** * Created by HuaChao on 2017/

java 对象转JSON 属性为空

Java 对象转JSON 属性为空,请检查 类中属性是否带有标准的GET和SET方法 for example: public class example  implements Serializable { public String entityName; public String dataSourceName; public String entityVarName; public String pcChName; public String pcName; public List<DBC

从一段代码看fork()函数及其引发的竞争

首先来看一段从<UNIX环境高级编程>中摘录的一段非常有意思的代码.借此我们再来谈谈fork()函数的一些问题. #include "apue.h" static void charatatime(char*); int main(void) { pid_t pid; if((pid=fork())<0){ err_sys("fork error"); }else if(pid==0){ charatatime("output from

利用Apache的commons-beanutils和commons-collections包实现Java对象的按属性排序

在日常工作中经常用到需要对java对象集合或者Map集合中的某个属性做排序,这个需求可以利用Apache的commons-beanutils和commons-collections包来实现,主要实现方式如下: public static <T> void sort(List<T> list, String property, boolean asc) { Comparator<?> comparator = ComparableComparator.getInstanc

初学者必看——Java在现实中的应用

现实生活中的Java应用 在现实生活中,很多地方都用到了Java,从商业上的电子商务网站到安卓App,从科学应用到经济应用,如电子交易系统,从游戏如<我的世界>到桌面应用,如Eclipse.Netbeans.Interllij,从开源类库到J2ME应用.让我们更详细地看一下它们. 1)安卓应用 如果你想弄清楚Java用在什么地方,你离这个目标不是太远.打开你的安卓手机和任何一款App,它们是使用Java语言.基于Google Android API(和JDK类似)开发的.数年的安卓支持已经有了

同样的代码在java和c++中结果不同

1 #include <iostream> 2 using namespace std; 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 class A { 5 public: 6 void m() { 7 n(); 8 } 9 10 public: 11 virtual void n() { 12 cout<

javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

1 function test(){ 2 var bt = document.getElementById("bt"); 3 bt.addEventListener("click",function(){ 4 5 var str = "dafdsjkfnaiesdaadsllllllkkkkk444444444444444"; 6 var obj = []; // 存放结果集的数组,结果中存放 key-value 对象 7 for(var i =

lua代码设置unity对象的基础属性

设置对象的父节点: wall.transform:SetParent(GameObject.Find("Walls").transform) 设置颜色: wall:GetComponent("Image").color = UnityEngine.Color(111/255, 89/255, 89/255, 1) 设置大小: wall.transform.localScale = UnityEngine.Vector3(0.2, 0.2, 1) 设置位置: wall

C++初始化中变量的初始化方法

之前学习C++的时候没有记得做好笔记,现在重新补做!!!!! 1.普通变量的初始化 因为C语言是C++子集,自然包含了所有C语言的特性,所以在C语言的基础之上又新增了属于C++自己特性的初始化方式,以C++11标准来说明: (1)int a = 10;           // 这种是最熟悉的方式,是从C中继承过来的 (2)int a (10);             // 使用一个小括号将初始化的数值括起来,a与小括号之间有无空格都行 (3)int a {10};            //