【Java】对象的构造和初始化
创始人
2025-05-31 08:06:20

对象的构造和初始化

  • 如何初始化对象
  • 构造方法
    • 概念
    • 特性
  • 默认初始化
  • 就地初始化

如何初始化对象

在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。

在这里插入图片描述
要让上述代码通过编译,非常简单,只需在正式使用a之前,给a设置一个初始值即可。

如果是对象:
需要调用之前写的SetDate方法才可以将具体的日期设置到对象中。

//Data类
class Data {public int year;public int month;public int day;public void setData(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}public void printData() {System.out.println(this.year + "/" + this.month + "/" + this.day);}
}public class test {public static void main(String[] args) {Data data = new Data();data.printData();data.setData(1998, 9, 18);data.printData();}
}

通过上述例子发现两个问题:

  1. 每次对象创建好后调用SetDate方法设置具体日期,比较麻烦,那对象该如何初始化?
  2. 局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?

构造方法

概念

构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且
在整个对象的生命周期内只调用一次。

class Data {public int year;public int month;public int day;// 构造方法:// 名字与类名相同,没有返回值类型,设置为void也不行// 一般情况下使用public修饰// 在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次public Data(int year, int month, int day) {this.year = year;this.month = month;this.day = day;System.out.println("调用了一次还有三个参数的构造方法");}public void printData() {System.out.println(this.year + "/" + this.month + "/" + this.day);}
}public class test {public static void main(String[] args) {Data data = new Data(1998, 9, 18);//调用构造方法data.printData();}
}

在这里插入图片描述

注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。

特性

  1. 名字必须与类名相同
  2. 没有返回值类型,设置为void也不行
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
  4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
  5. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。
  6. 用户一旦定义过构造方法 则编译器将不在自动生成
class Date {public int year;public int month;public int day;//含有三个参数的构造方法public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;System.out.println("调用了一次还有三个参数的构造方法");}//不含参数的构造方法public Date(){this.year = 1900;this.month = 1;this.day = 1;}//三个参数的构造方法和不含参数的构造方法之间形成了重载public void printDate() {System.out.println(this.year + "/" + this.month + "/" + this.day);}
}

例如这里的Date类中有一个三个参数的构造方法 此时如果在创建一个对象但是不传参数则会报错 因为编译器不会再给你创建一个无参数的构造方法 此时必须自己才实现一个无参数的构造方法才还可以继续使用

默认初始化

为什么局部变量在定义时要初始化 而成员变量则可以不初始化呢?

要搞清楚这个过程,就需要知道 new 关键字背后所发生的一些事情:

Date d = new Date(2021,6,9);

在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:

  1. 检测对象对应的类是否加载了,如果没有加载则加载

  2. 为对象分配内存空间

  3. 处理并发安全问题
    比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

  4. 初始化所分配的空间
    即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值,比如:


在这里插入图片描述

  1. 设置对象头信息

  2. 调用构造方法,给对象中各个成员赋值

就地初始化

class Date {public int year = 1998;public int month = 1;public int day = 1;//在定义时就初始化public void printDate() {System.out.println(this.year + "/" + this.month + "/" + this.day);}
}

相关内容

热门资讯

STM32产品命名规则,系统结... 产品系列 STM32系列芯片是由意法半导体(ST Microelectronics&...
souho(搜猴浏览器下载) ... 今天给各位分享souho的知识,其中也会对搜猴浏览器下载进行解释,如果能碰巧解决你现在面临的问题,别...
什么是金棘末(金棘末什么危害)... 今天给各位分享什么是金棘末的知识,其中也会对金棘末什么危害进行解释,如果能碰巧解决你现在面临的问题,...
徐州周边100公里自驾游景点(... 本篇文章极速百科给大家谈谈徐州周边100公里自驾游景点,以及徐州周边100公里自驾游景点有哪些对应的...
帮帮侠热评:盲人被撞前一秒被公... 本篇文章极速百科给大家谈谈帮帮侠热评:盲人被撞前一秒被公交司机拉回,以及盲人被撞前1秒被公交司机拉回...
【教程】使用ChatGPT制作... 目录 描述 代码 效果 说明 描述         给ChatGPT的描述内容: ...
centos7安装mysql5... centos7安装mysql5.7.40 1.先去下载安装包 下载地址 Tip:使用迅雷下载会快一点...
牛客C/C++刷题笔记(六) 153、函数的递归调用不过是一个函数直接或间接地调用它自身。() 15...
100个常见车标大全新版,10... 今天给各位分享100个常见车标大全新版,100种常见的轿车车标和图片的知识,其中也会对50个常见车标...
奥迪a5敞篷是哪款?奥迪a5敞... 今天给各位分享奥迪a5敞篷是哪款?奥迪a5敞篷多少钱一辆的知识,其中也会对奥迪a5敞篷是哪款车型进行...
...天津北京重庆今日宣布公共... 本篇文章极速百科给大家谈谈...天津北京重庆今日宣布公共交通放宽查验核酸报告,以及对应的知识点,希望...
奥迪a6降价25万(奥迪a6降... 今天给各位分享奥迪a6降价25万的知识,其中也会对奥迪a6降价25万是真的吗进行解释,如果能碰巧解决...
TU-95 strategic... 苏联武器,外形简洁实用至上。TU-95便是典型代表。今天我们就来浅析一下TU-95的外...
Vue3学习笔记(2.0) const app=Vue.createApp({data(){return{ count:...
22 k8s常用命令 一、k8s网络service网络  pod网络  节点网络 == 》 svc、pod...
[NOIP2003 普及组] ... 题目[NOIP2003 普及组] 乒乓球题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列...
健康码绿码是什么(健康码绿码是... 今天给各位分享健康码绿码是什么的知识,其中也会对健康码绿码是什么样进行解释,如果能碰巧解决你现在面临...
超大陆升级95叫什么,标题建议... 超大陆升级95之后叫泰伯尔斯装备。在游戏地下城与勇士中,超大陆装备是90级史诗装备,升级95级后获得...
等着我荣郅隆侄女是谁(等着我 ... 本篇文章极速百科给大家谈谈等着我荣郅隆侄女是谁,以及等着我 荣郅隆对应的知识点,希望对各位有所帮助,...
2019年起北京电子停车收费标... 今天给各位分享2019年起北京电子停车收费标准及缴费app支付流程的知识,其中也会对北京电子停车收费...
后端——分布式系统知识点总结 目录 1.分布式id 2.分布式锁 3.分布式系统的幂等 1.分布式id 在数据库中每一个数据表都有...
回流和重绘 系列文章目录 前端系列文章——传送门 JavaScript系列文章——传送门 文章目录系列文章目录...
Linux-磁盘管理介绍 Linux-磁盘管理介绍 计算硬盘介绍 硬盘是计算机主要存储媒介之一,由一个或者多个铝...
物理里电荷量q等于多少,电荷量... 在物理学中,电荷量q是一个表示带电粒子所带电量的物理量。其单位是库仑(C)。电荷量可以是正数也可以是...
宜春是哪个省 极速百科网 极速... 宜春市,江西省辖地级市,位于江西省西北部,地处东经113°54′—116°27′,北纬27°33′—...
己所不欲勿施于人是什么意思,己... 所不欲,勿施于人尊重他人、不伤害他人的行为准则,也是建立和谐人际关系的重要原则。 这个准则强调...
什么是电压什么是电流,**电压... 电压,也称作电势差或电位差,是衡量单位电荷在静电场中由于电势不同所产生的能量差的物理量。电压的国际单...
lazada按关键字搜索商品 ... item_search-按关键字搜索商品  lazada.item_search 公共参数 请求地...
华为p10闪存怎么检测华为p ... 首先,非常感谢您对华为P10的关注。为了检测华为P10的闪存情况,您可以按照以下步骤进行操作: ...
广州哪里可以学做咖啡,广州学做... 1. 咖啡学院:专业的咖啡学院提供全面的咖啡课程,包括咖啡豆知识、咖啡制作技巧、咖啡品尝和评估等。在...