`
李灵晖-raylee
  • 浏览: 135887 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-4.7 构造器初始化(2)

 
阅读更多

这一章节我们接着上一章节的内容。

(3)静态数据的初始化

a.静态数据只会执行一次

package com.ray.testobject;

public class Test {
	private static Book book1 = new Book(1);
	private static Book book2 = new Book(2);

	public Test() {
		System.out.println("create test");
		book1.say();
		book2.say();
		Book book3 = new Book(3);
		book3.say();
	}

	public static void main(String[] args) {
		new Test();
		new Test();
	}
}

class Book {
	private int id;

	public Book(int id) {
		this.id = id;
		System.out.println("create book:" + id);
	}

	public void say() {
		System.out.println("hi, my name is book-" + id);
	}
}


输出:

create book:1
create book:2
create test
hi, my name is book-1
hi, my name is book-2
create book:3
hi, my name is book-3
create test
hi, my name is book-1
hi, my name is book-2
create book:3
hi, my name is book-3


从结果可以看见,book1和book2只在第一次创建Test的时候创建了一次,然后再次创建Test时就不再创建book1和book2。

b.如果不被引用或者不new,对象里面的静态属性域不会创建。

我们修改一下上面的代码:

package com.ray.testobject;

public class Test {

	public Test() {
	}

	public static void main(String[] args) {
	}
}

class Book {
	private int id;

	public Book(int id) {
		this.id = id;
		System.out.println("create book:" + id);
	}

	public void say() {
		System.out.println("hi, my name is book-" + id);
	}
}

class GroupOfBooks {
	private static Book book;

	public static Book getBook() {
		book = new Book(99);
		return book;
	}
}


上面的代码是不会执行new Book(99)这一行的。

我们再进行修改,给出两种执行new Book(99)的例子:

package com.ray.testobject;

public class Test {

	public Test() {
	}

	public static void main(String[] args) {
		new GroupOfBooks();
	}
}

class Book {
	private int id;

	public Book(int id) {
		this.id = id;
		System.out.println("create book:" + id);
	}

	public void say() {
		System.out.println("hi, my name is book-" + id);
	}
}

class GroupOfBooks {
	private static Book book;

	public static Book getBook() {
		book = new Book(99);
		return book;
	}
}


package com.ray.testobject;

public class Test {

	public Test() {
	}

	public static void main(String[] args) {
		GroupOfBooks.getBook();
	}
}

class Book {
	private int id;

	public Book(int id) {
		this.id = id;
		System.out.println("create book:" + id);
	}

	public void say() {
		System.out.println("hi, my name is book-" + id);
	}
}

class GroupOfBooks {
	private static Book book;

	public static Book getBook() {
		book = new Book(99);
		return book;
	}
}


上面两段代码同样输出:

create book:99

这里总结一下对象创建的过程:

1.查询.class文件的路径

2.载入.class文件,执行对象的静态方法或者静态属性域

3.new对象,然后分配内存空间(内存空间清零,则对象回收,引用变成null)

4.执行属性域初始化

5.执行构造器

总结:这一章节主要讨论了静态属性域的初始化。

这一章节就到这里,谢谢。

-----------------------------------

目录

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    mchange-commons-java-0.2.11.zip

    在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...

    eclipse-java-2021-12-R-win32-x86_64.zip

    用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...

    api-ntrip-java-client-master.zip_android_ntrip_ntrip java实现_ntr

    标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...

    aip-java-sdk-4.2.0

    2. **aip-java-sdk-4.2.0.jar**:这是核心的AIP Java SDK库文件,包含了所有用于与百度AI平台交互的类和方法。开发者需要引入这个jar文件到他们的Android项目中,才能使用SDK提供的功能。 3. **json-20160810.jar**...

    手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip

    【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...

    nextcomps5.9.1_201306 for D7-XE4.7z

    【标题】"nextcomps5.9.1_201306 for D7-XE4.7z"指的是一个专为Delphi开发者设计的组件包,版本号为5.9.1,并且发布于2013年6月。这个组件包是针对Delphi D7(Delphi 7)到XE4(Embarcadero Delphi XE4)版本的,它...

    aspose-words-java-23.6-jdk17.jar.zip

    【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...

    java-Swing外观包

    Java Swing是Java GUI(图形用户界面)开发的一个重要组件,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。Swing提供了丰富的组件库,允许开发者创建美观且功能丰富的交互式用户界面。在这个...

    java-sdk-master.zip_leancound集成第三方插件_即时通讯

    接下来,根据Leancound的API文档,编写代码来初始化SDK,设置必要的认证信息,然后调用相应的API接口进行操作。 例如,要发送一条文本消息,开发者可能需要如下步骤: 1. 创建一个Leancound客户端对象,设置API密钥...

    java-多文件上传dome

    在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。

    Java---笔试题大全

    6. **Servlet生命周期**:Servlet的生命周期包括初始化(init)、服务(service,通过doGet、doPost等方法处理请求)、销毁(destroy)三个阶段。Servlet在服务器中保持活跃,可以处理多个请求,而CGI每次请求都会...

    java-lib

    2. **数据库操作**:JDBC(Java Database Connectivity)是Java标准的数据库连接库,允许程序与各种类型的数据库进行交互。除此之外,还有像Hibernate和MyBatis这样的对象关系映射(ORM)框架,它们简化了SQL查询,...

    curso-java-pildorasInf:从头开始学习Java

    【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...

    使用渲染脚本实现模糊视图背景 - Java - 下载.zip

    2. **示例应用**:可能包含一个简单的Java应用,演示如何使用库来创建模糊视图背景,这对于开发者理解和学习如何使用库非常有帮助。 3. **文档**:可能有README文件或其他形式的文档,解释库的用法、安装步骤、依赖...

    易语言静态变量初始化

    初始化静态变量通常有两种方式:显式初始化和隐式初始化。在声明变量时,我们可以直接赋值,这就是显式初始化。例如: ```易语言 .静态整数 变量名 = 10 ``` 在这里,我们创建了一个名为“变量名”的静态整数变量...

    java-pdf&word-jar.zip

    Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...

    ks-java-lib:包含 Java 的 KS 库

    【标题】"ks-java-lib:包含 Java 的 KS 库" 提供的是一个专门为 Java 开发者设计的库,它扩展了 Java 的功能,为开发者在处理特定任务时提供了便利。这个库可能包含了丰富的类和方法,旨在简化开发过程,提高代码的...

    数据结构单链表初始化c/c++语言代码实现

    2. 动态初始化:动态初始化在运行时完成,通过`new`操作符分配内存来创建头节点,并将其`next`设为`nullptr`。这种方法适用于在程序执行期间动态创建链表: ```cpp ListNode* head = new ListNode; head->data = 0; ...

Global site tag (gtag.js) - Google Analytics