49天精通Java,第35天,Java初始化、构造器、对象创建的过程

news2025/1/16 8:20:40

在这里插入图片描述

目录

    • 一、初始化与清理
    • 二、用构造器保证初始化
      • 1、无参构造器
      • 2、有参构造器
    • 三、成员初始化
      • 1、显式初始化
      • 2、隐式初始化
      • 3、初始化块
    • 四、对象创建的过程

大家好,我是哪吒。

🏆本文收录于,49天精通Java从入门到就业。

全网最细Java零基础手把手入门教程,系列课程包括:基础篇、集合篇、Java8新特性、多线程、代码实战,持续更新中(每周1-2篇),适合零基础和进阶提升的同学。

一、初始化与清理

初始化和清理正是导致不安全编程的两大因素。许多错误都源于程序员忘记初始化变量。特别是使用依赖库时,用户可能不知道如何初始化库的组件,甚至不知道要初始化它们。

清理也需要特别关注,因为当你不再使用一个元素时,就不再关注它,所以很容易忘记它,如果不及时清理,这个元素使用的资源会一直被占用,结果就是资源很容易被耗尽。

二、用构造器保证初始化

1、无参构造器

在Java中,没有无参构造器。Java中的构造器是一个特殊的方法,它在创建对象时被调用。构造器可以接受任何数量的参数,但是它们必须在创建对象时传递。

public class Test {  
    //  构造器代码  
}

在这个例子中,我们定义了一个名为Test的类,它有一个无参构造器。在这个构造器中,我们可以编写任何必要的代码来初始化对象。

2、有参构造器

在Java中,有参构造器(parameterized constructor)是指一个类中带有参数的构造方法。与无参构造器不同,有参构造器接受参数来初始化对象的成员变量。

有参构造器的语法格式为:

public class Test {
    public Test(int param1, String param2) {
        // 构造器代码
    }
}

在上面的例子中,Test类定义了一个有参构造器,该构造器接受一个int类型的参数和一个String类型的参数。当创建Test类的对象时,需要传递对应的参数值来调用该构造器来初始化对象。

使用有参构造器可以方便地对对象进行初始化,并且避免了在创建对象后再一一设置每个成员变量的值的繁琐过程。通常情况下,建议在定义类时同时定义无参构造器和有参构造器,以方便使用者根据自己的需求选择合适的构造器来创建对象。

三、成员初始化

Java 成员初始化是一种在类初始化过程中执行的操作,它可以对类的实例变量或方法进行赋值。这些操作可以包含赋值,运算表达式或其他复杂的表达式。

在 Java 中,成员初始化可以通过以下方式实现:

1、显式初始化

在类定义中直接对成员变量进行赋值。

public class Test {  
    public int id = 1;  
    public String name = "哪吒编程";  
}

2、隐式初始化

在创建对象时,使用默认值对成员变量进行初始化。

public class Test {  
    public int id;  
    public String name;  
      
    public Test() {  
        // 默认构造函数使用默认值进行成员变量初始化  
        this.id = 0; // 0为默认值  
        this.name = null; // null为默认值  
    }  
}

3、初始化块

可以在类定义中添加初始化块来对成员变量进行初始化。初始化块可以包含任意数量的语句,这些语句将在对象创建时执行。

public class InitializeTest {
    public int id;
    public String name;

    // 初始化块
    {
        this.id = 10; 
        this.name = "哪吒编程";
    }
}

初始化块中的语句将先于构造函数执行。

猜猜看下面这段代码会输出什么?

public class InitializeTest {
    public int id;
    public String name;

    // 初始化块
    {
        this.id = 10;
        this.name = "哪吒编程";
    }

    // 构造函数
    public InitializeTest() {
        this.id = 0;
        this.name = null;
    }

    public static void main(String[] args) {
        InitializeTest initializeTest = new InitializeTest();
        System.out.println(initializeTest.id);
        System.out.println(initializeTest.name);
    }
}

四、对象创建的过程

1、创建对象时,或者第一次访问类的静态方法或静态字段时,Java解释器会搜索类路径来定位class文件。

2、当class被加载后,将创建一个class对象,它的所有静态初始化工作都会执行。

因此,静态初始化只在class对象首次加载时发生一次。

3、当使用new创建对象时,首先会在堆上为对象分配足够的存储空间,这块存储空间会被清空,然后自动将对象中的所有基本类型设置为其默认值,比如int的默认值为0,Integer的默认值为null。

4、执行所有初始化操作。

5、执行构造器。


在这里插入图片描述

🏆本文收录于,49天精通Java从入门到就业。

全网最细Java零基础手把手入门教程,系列课程包括:基础篇、集合篇、Java8新特性、多线程、代码实战,持续更新中(每周1-2篇),适合零基础和进阶提升的同学。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

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

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

相关文章

微服务开发系列 第三篇:OpenFeign

总概 A、技术栈 开发语言:Java 1.8数据库:MySQL、Redis、MongoDB、Elasticsearch微服务框架:Spring Cloud Alibaba微服务网关:Spring Cloud Gateway服务注册和配置中心:Nacos分布式事务:Seata链路追踪框架…

多维时序 | MATLAB实现GA-GRU遗传算法优化门控循环单元多变量时间序列预测

多维时序 | MATLAB实现GA-GRU遗传算法优化门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现GA-GRU遗传算法优化门控循环单元多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 多维时序 | MATLAB实现GA-GRU遗传算法优化门控循环单元多变量时间…

OSPF 邻居关系 附实验

实验目的 通过对 OSPF 邻居关系建立进行相关的实验,从中学习到如何调整 OSPF Hello 包间隔,Dead 间隔,以及影响 OSPF 邻居建立的因素,例如 RID,MTU,OSPF 认证。并且将总结 OSPF在不同网络类型上的不同行为…

FPGA纯verilog实现CameraLink视频接收和发送,附带工程源码和技术支持

目录 1、前言2、CameraLink协议基础3、目前我已有的CameraLink收发工程4、设计方案5、CameraLink解码模块详解6、CameraLink编码模块详解7、vivado工程详解8、上板调试验证9、福利:工程代码的获取 1、前言 FPGA实现CameraLink视频编解码目前有两种方案:…

C++基本介绍

文章目录 🥭1.C基本介绍🧂1.1 C是什么🧂1.2 C发展史 🍒2. C的优势🥔2.1 语言的使用广泛度🥔2.2 C的应用领域 🫒3. C学习计划 🥭1.C基本介绍 🧂1.1 C是什么 C是一种通用…

用streamlit,几行代码就可以拥有漂亮图表!

大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。 所以建议大家加个星标,就能第一时间收到推送。&#x1f44…

FastAPI 和 fastapi-amis-admin:强大而可扩展的后台管理解决方案!

大家好,我是安果! 我们都知道 Django 生态丰富,功能强大,适用于中、大型项目,并且自带了后台管理系统;而 FastAPI 更适用于构建高性能的 API,后台管理系统需要另外开发 本篇文章将介绍 FastAPI…

完犊子!原单位的离职证明丢了,下周要入职了,用AI做一个行不行?

弄丢了离职证明怎么办? 一位网友哀叹: 完犊子!原单位的离职证明丢了,下周要入职了,现在怎么办?用AI做一个行不行? 有相同经历的网友安慰他,离职证明没了没事,新公司会要求…

打卡智能中国(五):博士都去哪儿了?

《打卡智能中国》系列更新了几期,有读者表示,很爱看这类接地气的真实故事,也有读者反映,不是电工,就是文员、农民、治沙人,人工智能不是高精尖学科吗?那些学历很高的博士都去哪儿了?…

用数据讲故事:十大统计学/机器学习魔法指数

统计学和机器学习为数据分析提供理论基础,入门时我看过很多统计学相关书籍,复杂的公式和推导过程让我一度陷入迷茫。对于数据科学/分析师来说,如何使用统计学知识并应用到我们的分析场景中更为重要。本文主要基于数据分析工作中的实际应用场景…

1000本!计算机经典书籍分享

闲话少说,列表如下。 编程语言类书籍 包含:Java、C、C、Python、Go等语言 Java电子书大全https://www.yingyanshe.cn/5275.htmlC电子书大全https://www.yingyanshe.cn/5284.htmlC语言类电子书https://www.yingyanshe.cn/5293.htmlC#电子书https://www…

chatgpt赋能Python-python_fg

Python FG: 优秀的Python工程师一定要知道的资源 如果你是一名Python工程师,那么你一定会喜欢Python FG资源。Python FG是一个在线平台,提供海量的Python API文档、教程、实例、以及与Python有关的各种工具和资源,让Python工程师轻松学习和使…

盘点!Instruction Tuning 时代的大模型

作者 | Kevin吴嘉文 整理 | NewBeeNLP 公众号 https://zhuanlan.zhihu.com/p/616830127 Alpaca,ChatGLM 等模型的效果可以接受,下文总结部分笔记,为训练自定义小型化(7B)模型提供点知识储备。包括模型论文 LaMDA, Mup…

纯净版Win10系统重装教程(超详细)

本博客详细讲解纯净版Win10系统重装,步骤齐全,小白可实操。 纯净版Win10系统重装教程 系统安装前准备下载安装工具更新重装 制作U盘为启动盘 重装Win10进入Boot模式选择系统版本分区系统安装中新系统配置 系统安装前准备 ➢ 准备8G或8G以上的空U盘。&a…

POSTGRESQL 10个使用POSTGRESQL 需要避免的错误 (译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

EOS网络基金会大战Block.One

微信公众号修改了推送规则,请各位亲爱的读者给刘教链公众号添加星标🌟,以便及时收到每日最新文章推送! 星标🌟添加方法:【1】点击标题下方“刘教链 刘教链”的第二个“刘教链”,打开公众号主页&…

chatgpt赋能Python-python_field

Python在Field上的应用 Python作为一门高级编程语言,在众多领域中扮演着应用广泛、易于学习、使用简便、速度出色的角色。在本文中,我们将重点关注Python在Field上的应用。 Field是什么? Field指的是“领域”,包括科学、工程、…

活动报名|分布式人工智能:可扩展性、效率和泛化性

2023年05月25日(星期四)14:00-15:30,智源社区「智源Live 第42期」线上活动将在线举办,「阅读原文」报名即可参加。 活动主题:分布式人工智能:可扩展性、效率和泛化性 安波 安波是新加坡南洋理工大学校长委员…

chatgpt赋能Python-python_for_end

Python for End: 介绍 Python是一种高级编程语言,由Guido van Rossum创建于1989年,并在1991年正式发布。Python是一种多范式编程语言,可以用于面向对象、函数式和过程式编程。它拥有简单易懂的语法以及扩展性强的库,从而使得开发…

见证ES6革命:深入学习let、const、var的区别、解构赋值、箭头函数等常用知识点,开创全新开发模式。

let、const、var的区别 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。使用const声明的是常量,在后面出现的代码块中,不能在修改改常量的值。 var let const 函数级作用域 块级…