【Java核心技术13】Java中的构造器与析构器:深入解析与代码示例

引言

所有文章均为原创验证,您随手的 关注点赞收藏 是我创作最大的动力。
示例代码地址:https://gitee.com/code-in-java/csdn-blog.git

在面向对象编程语言中,构造器和析构器是类生命周期管理的关键部分。构造器负责初始化新创建的对象,而析构器则负责清理不再使用的对象。然而,在Java中,析构器的概念与C++等其他语言有所不同。

本文将深入探讨Java中的构造器,以及它如何替代传统意义上的析构器——垃圾回收机制。

一、Java中的构造器

  • 构造器是一种特殊的方法,用于初始化一个新创建的对象。
  • 每个类都可以有一个或多个构造器,但至少需要一个默认构造器。
  • 构造器的名称与类名相同,没有返回类型,并且不能被static、final、abstract 或 native 修饰。
  • 构造器有两种类型:默认构造器和自定义构造器。当类中没有定义任何构造器时,Java编译器会自动提供一个无参的默认构造器。如果类中定义了任何构造器,即使它们都是无参的,编译器也不会再提供默认构造器。

1. 代码示例:


public class Person {
    private String name;
    private int age;

    // 默认构造器
    public Person() {
        this.name = "默认构等器";
        this.age = 20;
    }

    // 自定义构造器
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

	 //打印结果
	public static void main(String[] args) {
	    Person person1 = new Person(); // 使用默认构造器
	    System.out.println("我是:" + person1.name + ", 年龄:" + person1.age);
	
	    Person person2 = new Person("自定义构造器", 35); // 使用自定义构造器
	    System.out.println("我是:" +person2.name + ", 年龄:" + person2.age);
	}
}

2. 执行结果:

在这里插入图片描述

二、Java中的析构器——垃圾回收

在C++等语言中,析构器是用于在对象销毁前执行清理工作的特殊方法。然而,在Java中,并没有直接的析构器概念。Java使用垃圾回收机制来 自动管理内存,因此通常不需要程序员手动释放资源。不过,有时我们可能需要在对象被垃圾回收前执行一些特定的清理操作,比如 关闭文件句柄断开数据库连接 等。为此,Java提供了一个名为 finalize() 的方法,它会在对象被垃圾回收器回收之前被调用。

需要注意的是,finalize() 方法的使用在现代Java编程中并 不推荐,因为它不是确定性的(即你不能保证它何时会被调用),且可能会影响垃圾回收的性能。更好的做法是使用 try-with-resources 语句或显式地关闭资源。

1. 代码示例:

public class Resource {
    private final String resourceName;

    public Resource(String resourceName) {
        this.resourceName = resourceName;
        System.out.println("Resource created: " + resourceName);
    }

    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("Resource finalized: " + resourceName);
    }

    public static void main(String[] args) {
        Resource resource = new Resource("MyResource");
        resource = null; // 使对象置空
        System.gc(); // 请求垃圾回收
    }
}

在上述代码中,我们创建了一个 Resource 对象,并在 main 方法中使其置空。然后我们请求垃圾回收,但请注意,垃圾回收的具体时间是不确定的,因此 finalize() 方法的调用也不确定。

结束语:

Java中的 构造器 是初始化对象的关键,而 析构器 的概念则由垃圾回收机制替代。了解这些概念对于有效地使用Java进行面向对象编程至关重要。尽管 finalize() 方法存在,但在现代Java开发中,我们应该避免依赖它,而是采用诸如 try-with-resources 等更安全、更高效的方法来管理资源。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

邂逅Three.js探秘图形世界之美

可能了解过three.js等大型的3D 图形库同学都知道啊,学习3D技术都需要有图形学、线性代数、webgl等基础知识,以前读书学的线性代数足够扎实的话听这节课也会更容易理解,这是shader课程,希望能帮助你理解着色器,也面向第…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇域控系统提权NetLogonADCSPACKDC永恒之蓝CVE漏洞

红队内网攻防渗透 1. 内网横向移动1.1 横向移动-域控提权-CVE-2020-1472 NetLogon1.2 横向移动-域控提权-CVE-2021-422871.3 横向移动-域控提权-CVE-2022-269231.4 横向移动-系统漏洞-CVE-2017-01461.5 横向移动-域控提权-CVE-2014-63241. 内网横向移动 1、横向移动-域控提权-…

Excel 宏录制与VBA编程 —— 11、工作表及工作簿操作(附:Worksheets与Sheets区别)

代码1 - Worksheets与Sheets区别 Worksheets表示普通工作表;Sheets即可表示普通工作表也可表示图标工作表。 下面模块中代码结果是一样的,大家理解时可结合上面区别说明进行了解 Sub Test()Worksheets("Sheet1").Range("A1").Value 100Sheets("Sheet…

python桌面应用

py文件 import osimport wx import wx.html2class MyFrame(wx.Frame):def __init__(self, parent):wx.Frame.__init__(self, parent, title"启动啦", size(1000, 700))# 创建一个Web视图组件self.browser wx.html2.WebView.New(self)# 加载本地HTML文件# self.brow…

Python重拾

1.Python标识符规则 字母,下划线,数字;数字不开头;大小写区分;不能用保留字(关键字) 2.保留字有哪些 import keyword print(keyword.kwlist)[False, None, True, and,as, assert, async, await…

在 The Sandbox 体验韩剧《碰撞搜查线》的刺激!

风靡全球的韩国电视剧《碰撞搜查线》现已登陆 The Sandbox 元宇宙! ASTORY 的电视剧《碰撞搜查线》以充满动作喜剧色彩的方式,讲述了一个交通犯罪调查小组打击公路上的恶棍的故事。该剧迅速成为 Disney 最受欢迎的节目之一! 在 The Sandbox体…

CSS阴影优化气泡框样式

<body> <div class"pop">气泡框</div> </body>body{display: flex;justify-content: center;align-items: center;height: 100% } .pop{display: flex;justify-content: center;align-items: center;background: #409eff;width: 150px;heigh…

python+unity实现数字人跟随运动

效果如下 设计思路 1 python通过摄像头提取人物肢体关键点信息 2 通过UDP将获取到人体信息发送给Unity 3 unity将获取的的人物信息进行解析 4 将解析的数据赋值给模型骨架 代码获取

GNSS接收机的工作原理

GNSS接收机的工作原理如下&#xff1a; 信号接收&#xff1a;GNSS接收机通过天线接收来自卫星导航系统的信号&#xff0c;这些信号包含卫星的位置、时间和健康状态等信息。 信号处理&#xff1a;接收的信号首先经过前置放大器放大&#xff0c;然后经过滤波器滤除噪声。接收机会…

iptables(6)扩展匹配条件--tcp-flags、icmp

简介 前面我们已经介绍了不少的扩展模块,例如multiport、iprange、string、time、connlimit模块,但是在tcp扩展模块中只介绍了tcp扩展模块中的”--sport”与--dport”选项,并没有介绍”--tcp-flags”选项,那么这篇文章,我们就来认识一下tcp扩展模块中的”--tcp-flags”和i…

【linux kernel】一文总结linux输入子系统

文章目录 一、导读二、重要数据数据结构&#xff08;2-1&#xff09;struct input_dev&#xff08;2-2&#xff09;input_dev_list和input_handler_list&#xff08;2-3&#xff09;struct input_handler 三、input核心的初始化四、常用API五、输入设备驱动开发总结(1)查看输入…

Linux:基础IO(三.软硬链接、动态库和静态库、动精态库的制作和加载)

上次介绍了基础IO&#xff08;二&#xff09;&#xff1a;Linux&#xff1a;基础IO&#xff08;二.缓冲区、模拟一下缓冲区、详细讲解文件系统&#xff09; 文章目录 1.软硬链接1.1硬链接1.2软链接使用场景 2.动态库和静态库1.1回顾1.2静态库的制作和使用为什么要有库制作者角度…

搜维尔科技:「案例」NBA新科冠军与Xsens运动捕捉的缘分

北京时间昨日&#xff0c;凯尔特人在主场106比88击败独行侠&#xff0c;以总比分4比1获胜&#xff0c;夺得队史第18冠&#xff0c;超越湖人队&#xff08;17冠&#xff09;成为历史上夺冠次数最多的球队。凯尔特人队上一次夺冠还是在2007-2008赛季。 凯尔特人队主力Jayson Tat…

Kotlin明明很优秀,为啥没像Java那样火?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;因为 kotlin 优化一件事&…

太全了吧?CISP全类别详细介绍,看完不迷惑

今天聊聊CISP&#xff0c;注册信息安全专业人员证。 很多人以为说CISP就是个证书&#xff0c;没这么简单&#xff0c;这里面区别可大了。 CISP根据工作领域和实际岗位需要&#xff0c;分为综合型、攻防领域、IT审计、软件开发、数据治理、电子取证和云安全领域等17项证书。 这么…

基于Openmv的追小球的云台

介绍 在这篇文章&#xff0c;我会先介绍需要用到且需要注意的函数&#xff0c;之后再给出整体代码 在追小球的云台中&#xff0c;比较重要的部分就是云台&#xff08;实质上就是舵机&#xff09;的控制以及对识别的色块位置进行处理得到相应信息后控制云台进行运动 1、舵机模…

LeetCode.32最长有效括号详解

问题描述 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 解题思路1 有效的括号字符串意味着每一个左括号 ( 都可以找到一个相匹配的右括号 )。栈可以帮助我们追踪尚未匹配的括号&#xff0c;并有效地处理…

推荐一款AI修图工具,支持AI去水印,AI重绘,AI抠图...

不知道大家有没有这样的一个痛点&#xff0c;发现了一张不错的“素材”&#xff0c; 但是有水印&#xff0c;因此不能采用&#xff0c;但找来找去&#xff0c;还是觉得初见的那个素材不错&#xff0c;怎么办&#xff1f; 自己先办法呗。 二师兄发现了一款功能强大的AI修图工具…

猫头虎 AI 前沿科技探索之路(持续更新):ChatGPT/GPT-4 科研应用、论文写作、数据分析与 AI 绘图及文生视频实战全攻略

猫头虎 AI 前沿科技探索之路(持续更新)&#xff1a;ChatGPT/GPT-4 科研应用、论文写作、数据分析与 AI 绘图及文生视频实战全攻略 背景介绍 随着人工智能技术的飞速发展&#xff0c;AI 的应用已经渗透到各个领域&#xff0c;从商业决策到医疗健康&#xff0c;再到日常生活中的…

win10改远程桌面端口,Windows 10 修改远程桌面端口号的专业指南

在Windows 10系统中&#xff0c;远程桌面&#xff08;Remote Desktop&#xff09;功能允许用户从一台计算机远程访问和控制另一台计算机。为了增加远程连接的安全性&#xff0c;减少潜在的安全风险&#xff0c;修改默认的远程桌面端口号是一个常见的安全措施。以下是在Windows …