Java 构造函数的详解

2023-11-09

我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的。那么我们在java里面怎么在对象一旦创建就赋值呢?



1.构造方法的作用:

构造方法作用:对对象进行初始化.

如图:


2.构造函数与普通函数的区别:

(1). 一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容。

(2). 构造函数是在对象建立时由jvm调用, 给对象初始化。一般函数是对象建立后,当对象调用该功能时才会执行。

(3). 普通函数可以使用对象多次调用,构造函数就在创建对象时调用。

(4). 构造函数的函数名要与类名一样,而普通的函数只要符合标识符的命名规则即可。

(5). 构造函数没有返回值类型。

3.构造函数要注意的细节:

(1). 当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,这时默认的构造函数就没有了。

备注:可以通过javap命令验证。

(2).在一个类中可以定义多个构造函数,以进行不同的初始化。多个构造函数存在于类中,是以重载的形式体现的。因为构造函数的名称都相同。

class Perosn{
	private int id;
	
	private String name;
	
	private int age;
	
	public Perosn(){
		cry();
	}
	public Perosn(int id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
	public void cry(){
		System.out.println("哇哇哇....");
	}
	
}

问题:要求每个小孩出生都会哭,这份代码有两个构造函数,如果需要每个小孩出生都要哭的话,那么就需要在不同的构造函数中都调用cry()函数,但是这样子的话造成了代码重复问题,那么怎么解决呢?构造代码块。

4.构造代码块:

构造代码块作用:给所有的对象进行统一的初始化。

class Perosn{
	private int id;
	
	private String name;
	
	private int age;
	
	{
		cry();// 每个Person对象创建出来都会执行这里的代码
	}
	
	public Perosn(){
		cry();
	}
	public Perosn(int id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
	public void cry(){
		System.out.println("哇哇哇....");
	}
	
}

具体作用:

  1:给对象进行初始化。对象一建立就运行并且优先于构造函数。

  2:与构造函数区别

    1:构造代码块和构造函数的区别,构造代码块是给所有对象进行统一初始化, 构造函数给对应的对象初始化。

    2:构造代码块的作用:它的作用就是将所有构造方法中公共的信息进行抽取。

例如孩子一出生统一哭

代码如下:

class Boy {

	String name;
	int age;
	String gender;
     // 构造代码块,给所有对象进行初始化。
	{
		System.out.println("哭。。。");
	}
     
	Boy() {
		System.out.println("无参构造");
	}

	Boy(String n, int a, String g) {
		name = n;
		age = a;
		gender = g;
		System.out.println("有参构造");
	}

	void run() {
		System.out.println("跑...");
	}

}

class Demo9 {

	public static void main(String[] args) {

		System.out.println();
		Boy b = new Boy();

		Boy b2 = new Boy("jack", 1, "男");

	}
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 构造函数的详解 的相关文章

  • 在 Java 中有效地对图像进行颜色循环

    我正在编写一个曼德尔布罗分形查看器 我想以智能的方式实现颜色循环 给定一个图像 我想修改它的 IndexColorModel 据我所知 没有办法修改 IndexColorModel 也没有办法为图像提供新的 IndexColorModel
  • 通过 JDBC 与 CLI 使用 MIT Kerberos 连接到 PostgreSQL 9.4 时出错

    我已经使用 MIT Kerberos 5 设置了 PostgreSQL 9 4 并且可以使用 psql 在 CLI 上连接 提交指纹后 我的委托人是 bgiles postgres REALM pg hba conf 有 host all
  • BigDecimal 中 Divide 方法的 Scale()

    new BigDecimal 37146555 53880000 divide new BigDecimal 1000000 scale 这返回10 但根据API divide method 返回一个 BigDecimal 其值为 这个 除
  • AES BadPaddingException

    如果我使用错误的密钥或错误的盐进行解密 则会引发 BadPaddingException 我希望返回一个不正确的字符串 doFinal 导致解密方法出现异常 信息 This is just an example Unfug S F V s
  • Java 中的 TreeSet 与 C#.net 的等效项

    我有 Java 代码 其中包含TreeSet 我想将代码转换为 C 我可以使用哪个等效集合 如果没有 请提出替代方案 那将是系统 集合 通用 SortedSet
  • IntelliJ Idea,如何从控制台删除java文件目录?

    当您运行文件时 它会打开控制台窗口 并且一直在顶部显示该文件所在的目录 这非常令人恼火 因为现在 为了将其他行与目录混合分开 我必须在启动任何 System out println 命令之前使用 n C Program FILEs 我想摆脱
  • Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

    我可以在 Hibernate 中使用 MySQL 视图 将它们视为表 即 该实体与为表创建的实体没有什么不同 但是 当 Hibernate 设置为验证模型时 我的应用程序将不会部署 因为它找不到视图 因为它假设它是一个表 是否可以在启用部署
  • 从另一个类添加 Swing 组件

    我正在学习java 我正在尝试从另一个类向我的框架添加一个菜单栏 练习将代码划分为多个类以更好地组织程序 这是我的代码示例 public class MainApp public static void main String args C
  • 大型 XML 的 XML 节点到字符串转换

    到目前为止我一直在使用DOM源在我的 Android 应用程序中将 XML 文件转换为字符串 这是我的代码 public String convertElementToString Node element throws Transform
  • Android Google 地图:隐藏整个地图的多边形或形状

    我试图隐藏除一个区域之外的整个地图 因为我使用的多边形在我想要显示的区域中有一个洞 问题在于 根据缩放的不同 空白区域会被多边形的颜色覆盖 或者多边形会失去其颜色 这是代码 polygon hide all world map float
  • Java Swing JEditorPane:操作样式文档

    我的模型是与枚举类型关联的字符串队列 我试图在 JEditorPane 中显示该模型 队列中的每个元素作为一个单独的 HTML 段落 其属性基于关联的枚举类型 但是 我的更新方法并没有达到我想要的效果 我尝试将 HTML 字符串直接写入文档
  • 未从线程接收位置数据

    我尝试使用计时器经常发送包含用户位置的短信 最初 我遇到了空指针异常 这是由于我犯了一个简单的错误 一旦解决了这个问题 一切似乎都运行良好 但是 它永远不会获取我的位置 因此 不断发送的文本显示 无法接收位置 我想问的是为什么它无法获取我的
  • 不想保留一对一的实体

    假设我有两节课Employee and Department In Employee我已经写了 OneToOne fetch FetchType EAGER cascade CascadeType ALL JoinColumn name d
  • 使用 Lint 和 SonarQube 分析 Android 项目

    我真的 溢出 了试图让这些东西一起工作 我按照这里的指示进行操作 http docs sonarqube org display PLUG Android Lint Plugin http docs sonarqube org displa
  • 如何使 RSACryptoServiceProvider 在没有填充(nopadding)的情况下工作?

    我需要使 C 应用程序与 Java 应用程序兼容 Java 应用程序使用Cipher getInstance RSA ECB nopadding 初始化器使密码 ECB 和无填充 但是 在 C 中 您有 2 个填充选项 OAEP 填充或 P
  • System.out.println("嗨"+6+10);打印Hi610?

    为什么要这样做 太令人困惑了 运算符优先级和结合性 两点 操作员 如果一个或两个参数都是字符串 则进行字符串连接 操作员 从左到右工作 所以在你的例子中 Hi 6 is Hi6 and Hi6 10 is Hi610 编辑 正如您在对另一个
  • SecurityContextHolder.getContext().getAuthentication() 返回 null

    我想使用以下代码手动绕过 spring Security 的用户 User localeUser new User UsernamePasswordAuthenticationToken auth new UsernamePasswordA
  • JSF - 实施受限页面过滤器

    我正在关注 BalusC 的回答JSF 2 0 如何获取在浏览器地址栏中输入的 URL https stackoverflow com questions 4105263 jsf 2 0 how to get the url that is
  • JavaFX 中的 MVC 模式与场景生成器

    我是 JavaFX 新手 根据我当前的设置 正在努力创建合适的 MVC 架构 我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类 Startup public class Portal extend
  • 如何使用 Kafka 发送大消息(超过 15MB)?

    我发送字符串消息到Kafka V 0 8使用 Java Producer API 如果消息大小约为 15 MB 我会得到MessageSizeTooLargeException 我尝试过设置message max bytes到 40 MB

随机推荐

  • python list[::2]两个分号代表什么意思

    困扰 是因为智慧不够 深思熟虑才能运筹帷幄 疑惑 python list 2 两个分号代表什么意思 解惑
  • 保定市空气质量分析系统

    保定市空气质量分析系统 此系统有详细的录屏 下面只是部分截图 需要看完整录屏联系博主 系统开发语言python 框架为django 数据库mysql 分为爬虫和可视化分析
  • pytorch Variable与Tensor合并后 requires_grad()默认与修改

    pytorch更新完后合并了Variable与Tensor torch Tensor 能像Variable一样进行反向传播的更新 返回值为Tensor Variable自动创建tensor 且返回值为Tensor 所以以后不需要再用Vari
  • 费曼学习法读后感

    目录 一 概述 二 全书主要内容 2 1 学习的本质 2 2 确立一个学习对象 2 3 理解我们要学习的知识 2 3 1 归类和对比知识的来源 2 3 1 1 将知识有逻辑的系统化 2 3 1 2 筛选和留下最可靠的知识 2 3 1 3 分
  • UOS启用wayland

    目录 系统wayland情况分析 后记 系统wayland情况分析 UOS默认启用的是x11 但是华为L410 L420这种麒麟芯片的机器 默认启用的是wayland 原因后面再推测 所以也想看看非麒麟平台如何能切换到wayland试试效果
  • [转]什么是边缘计算?

    转自 https blog csdn net gui951753 article details 80952907 注 本篇翻译自施巍松教授的论文 Edge Computing Vision and Challenges 目录 文章目录 摘
  • 工程代码_【OPPO手机进入工程模式】代码指令汇总

    来源 故乡往忆 首先要说的是 因为安卓系统版本不同 有的是安卓7 1有的是安卓8 1 因此即便都是vivo手机 可能在具体的代码指令上面 也会稍有不同 但是也都是大同小异 具体请自测 其次 工程模式是工程师测试使用的 若更改了工程模式下的设
  • BART原理简介与代码实战

    写在前面 最近huggingface的transformer库 增加了BART模型 Bart是该库中最早的Seq2Seq模型之一 在文本生成任务 例如摘要抽取方面达到了SOTA的结果 本次放出了三组不同的预训练权重 bart large 基
  • 通过STM32单片机控制直流电机实现位置速度电流PID三闭环,让电机精准控制!

    今天我们将会为大家带来一个非常实用的主题 那就是如何通过STM32单片机控制直流电机实现位置速度电流PID三闭环 让电机精准控制 首先 我们需要准备一台直流电机和一块STM32单片机开发板 接下来 我们将会通过C语言代码来实现PID三闭环控
  • HTTP 413错误解决方法

    环境 Ubuntu 16 04 nginx 1 5 6 通过post上传文件过大时 会出现413错误码 前端打开开发者模式 在输出台的位置会出现 Failed to load resource the server responded wi
  • 教你如何用VB做控件*.ocx

    教你如何用VB做控件 ocx 一个控件有很多事件如 Click MouseDown MouseUp MouseMove等 要触发这些事件都需要你加入代码 在控件的声明处加入Public Event Click 就表明该控件有一 Click
  • win7安装linux子系统,linux系统装win7系统安装教程【图文教程】

    说到linux系统可能很多人都不是特别的了解 因为在我们接触电脑用的最多的还是Windows系统 linux系统是一个基于POSIX多用户和多任务的一种CPU操作系统 但是一般人在选择的时候 还是会倾向于Windows系统 那么对于电脑安装
  • Linux下搭建zabbix的客户端,zabbix客户端linux下安装

    一 自定义安装zabbix agentd 临时目录 mkdir mnt tmp cd mnt tmp 下载zabbix管理程序 因为里面有我们要使用的客户端配置文件 建议单独保存 不然每次都下 可不好玩 wget http ncu dl s
  • 全球及中国航空发动机市场动态前景及十四五项目专项调研报告2021-2027年版

    全球及中国航空发动机市场动态前景及十四五项目专项调研报告2021 2027年版 HS HS HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年10月 搜索鸿晟信合研究院查看官网更多内容 第一章 航空
  • 使用LSTM进行预测,有一对一、多对一、多对多的预测,其中有一些疑问一起探讨(一)

    数据说明 我的数据是1万6千多的数据 想用4个特征 这个特征未加输出 预测2个输出 也就是多对多的预测 使用LSTM 一对一的预测 先用对一的预测简单一些 就是用一段时序数据取预测 代码例子看的MATLAB工具箱的例子 代码测试可行 大致看
  • 深入浅出MYSQL索引实现机制

    一 什么是索引 提到数据库索引 我想你并不陌生 在日常工作中会经常接触到 比如 我们的某一个SQL查询语句响应很慢 你可能第一反应是 给这个SQL 加个索引吧 那么到底什么是索引昵 今天我们就来聊一下这个话题 本文以MYSQL 5 6 为例
  • Redis使用总结(二、缓存和数据库双写一致性问题)

    首先 缓存由于其高并发和高性能的特性 已经在项目中被广泛使用 在读取缓存方面 大家没啥疑问 都是按照下图的流程来进行业务操作 但是在更新缓存方面 对于更新完数据库 是更新缓存呢 还是删除缓存 又或者是先删除缓存 再更新数据库 其实大家存在很
  • Flutter 升级2.5之后报错?

    Q Flutter执行命令升级新版本后 用flutter doctor命令检查时存在如下问题 按照提示键入命令后 再次出现报错 A 当我们升级SDK后 执行flutter doctor 这里是提示我们需要安装Android开发的命令行工具
  • iPhone/iPad用iTunes“同步”不等于“备份”

    一个很 基础 却很 重要 很多人 搞不清楚 解释又很花时间的问题 就是 iPhone 跟电脑 iTunes 同步 和 备份 有什么不同 首先 Sync 翻译成中文 同步 本来就是一个定义 认知有点模糊的中文动词 尤其对电脑不是很熟悉的朋友
  • Java 构造函数的详解

    我们人出生的时候 有些人一出生之后再起名字的 但是有些人一旦出生就已经起好名字的 那么我们在java里面怎么在对象一旦创建就赋值呢 1 构造方法的作用 构造方法作用 对对象进行初始化 如图 2 构造函数与普通函数的区别 1 一般函数是用于定