java面向对象构造器--学习笔记

什麽是构造器?

构造器就是一种特殊的方法,特殊在:

  • 方法名 == 类名
  • 不能写返回值类

只要声明了这么一个特殊的方法,那么这个方法就不叫方法,叫做构造器了


构造器有什么特点?

  • 创建对象时,对象会去调用构造器
    Student s = new Student();
     执行上面这个语句时会做两个动作,new Student代表在堆区创建一个对象,()其实也代表一个动作,代表告诉前面创建的对象去调用哪个构造器(构造器也分多种,由重载区分,不理解重载可以看这个java方法重载--学习笔记-CSDN博客)执行
    举个栗子:
    这是一个学生类,它长这样:
    public class Student {String name;double score;//无参构造器public Student(){System.out.println("无参构造器执行");}//有参构造器public Student(String name, double score){System.out.println("有参构造器执行");}
    }
     

    然后new一个新对象:
     

    public class Test {public static void main(String[] args) {Student s = new Student();}
    }


    可以看到,在创建对象时,确实会根据小括号决定执行哪个构造器,由于小括号里面并没有填实参,所以调用了无参构造器
    假如我们在小括号里面输入一些参数,再看结果:

    public class Test {public static void main(String[] args) {Student s = new Student("泽予",666);}
    }


    可以看到,确实是根据小括号里面的实参来决定选择哪个构造器


构造器的应用场景:

  • 创建对象时,同时完对象成员变量的初始化赋值,说白了就是创建对象时把对象要处理的成员变量给它 

不使用构造器初始化情况:

        Student s = new Student();s.name = "泽予";s.score = 666;

可以看到是比较繁琐的,只是俩个还好,假如同时给几十上百个成员变量赋初值,难道每个都单独写出来吗?那太麻烦了

再看看使用构造器的情况,先完善一下构造器:

    //有参构造器public Student(String name, double score){this.name = name;this.score = score;System.out.println("有参构造器执行");}

不理解this的可以看这篇:https://blog.csdn.net/m0_71386740/article/details/135257881?spm=1001.2014.3001.5502

然后new一个对象的同时使用构造器赋初值:

Student s = new Student("泽予",666);

可以看到,同样的效果,以前用了三行,现在只需要一句语句就可以完成,非常清爽,优雅


构造器的注意事项:

  • 设计类时,如果不写构造器,java类会自动生成一个无参构造器
    设计一个Teacher类:
    public class Teacher {}

    可以看到,里面什麽都没有,然后我们再调用无参构造器:


    可以看到,这么做是没有任何问题的,我们知道,在new一个对象时小括号不填参数其实会自动调用无参构造器,但是类中并没有写无参构造器,说明在没有写无参构造器时系统确实会帮我们自动创建一个无参构造器

  • 一旦定义了有参构造器,系统就不会帮我们自动生成无参构造器了
    在Teacher中写一个有参构造器:

    可以看到已经开始报错了,我们再看看无参构造器调用语句

    这句话意思就是Teacher类中只有一个带String的有参构造器,你不能去调用无参构造器,所以说,在我们只写了有参构造器的情况下,去调用无参构造器是会报错的,这个时候最好是自己顺手写一个无参构造器

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 学习(二)GPIO

目录 一、GPIO 简介 1.1 GPIO 基本结构 1.2 GPIO 位结构 1.3 GPIO 工作模式 二、GPIO 输出 三、GPIO 输入 1.1 传感器模块 1.2 开关 一、GPIO 简介 GPIO(General Purpose Input Output)即通用输入输出口。 1.1 GPIO 基本结构 如下图&#xff0…

【数据分析】指数移动平均线的直观解释

slavahead 一、介绍 在时间序列分析中,通常需要通过考虑先前的值来了解序列的趋势方向。序列中下一个值的近似可以通过多种方式执行,包括使用简单基线或构建高级机器学习模型。 指数(加权)移动平均线是这两种方法之间的稳健权衡。…

阿里云服务器端口PPTP 1723放行教程

阿里云服务器安装PPTP VPN需要先开通1723端口,阿里云服务器端口是在安全组中操作的,阿里云服务器网aliyunfuwuqi.com来详细说明阿里云服务器安全组开放PPTP VPN专用1723端口教程: 阿里云服务器放行1723端口教程 PPTP是点对点隧道协议&#…

fastadmin传递参数给html和js,通过身份判断动态显示列表头部住店和离店按钮

首先将管理员或者酒店人员的身份传递给html和js做按钮显示权限 roomorder.php index.html {if $admin_id != 1}<a class="btn btn-success btn-change btn-start btn-disabled" data-params=

2023机器人行业总结,2024机器人崛起元年(具身智能)

2023总结&#xff1a; 1.Chatgpt引爆了通用人工智能&#xff0c;最大的受益者或是机器人&#xff0c;2023年最热门的创业赛道便是人形机器人&#xff0c;优必选更是成为人形机器人上市第一股&#xff0c; 可以说2023年是机器人开启智能化的元年&#xff0c;而2024则将成为机器…

Java解析xml文档,判断对象是一个json是jsonArray还是jsonObject

有一篇xml文档&#xff0c;如下&#xff1a; 现在需要解析出其中的内容&#xff0c;首先需要明确的是&#xff0c;文档是由一个个的标签嵌套形成的&#xff0c;例如整个xml文件是由许多DescriptorRecord标签构成&#xff0c; <DescriptorRecord DescriptorClass "1&…

rk3588中编译带有ffmpeg的opencv

有朋友有工程需要&#xff0c;将视频写成mp4&#xff0c;当然最简单的方法当然是使用opencv的命令 cv::VideoWriter writer;bool bRet writer.open("./out.mp4", cv::VideoWriter::fourcc(m, p, 4, v), 15, cv::Size(640, 512), 1); 但是奈何很难编译成功&#xff…

MT8766安卓核心板规格参数_MTK8766核心板模块方案定制

MT8766安卓核心板&#xff1a;高性能、稳定可靠、集成度高的一体化解决方案 MT8766安卓核心板采用联发科MTK8766四核4G模块方案&#xff0c;是一款高度集成的安卓一体板。四核芯片架构&#xff0c;主频可达到2.0GHz&#xff0c;支持国内4G全网通。12nm制程工艺&#xff0c;支持…

【运维】yarn高可用配置详解

文章目录 一. 架构1. RM故障转移( Failover)1.1. 手动切换故障转移1.2. 自动故障转移1.3. RM故障转移的客户端&#xff1a;ApplicationMaster和NodeManager 2. 恢复以前的活动RM的状态 二、部署方式1. 配置说明2. 配置实例3. Admin commandsa. 检查状态b. 手动切换主备 本文主要…

VS2017 搭建opencv工程

VS2017 搭建opencv工程 opencv在处理图像方面具有很强的能力&#xff0c;在使用opencv之前先需要造好轮子。 1、opencv 官网 &#xff0c;下载对应的资源文件包。 根据自身选择。下载包之后&#xff0c;解压。分为build和sources source目录下分别存放&#xff1a; modules: …

Mysqld的关键优化参数

skip-name-resolve 现象 mysql连接很慢&#xff0c;登陆到服务器上查看服务器日志都是正常的&#xff0c;无可疑记录&#xff0c;登陆到mysql服务器上&#xff0c;查看下进程&#xff0c;发现有很多这样的连接&#xff1a; 218 | unauthenticated user | 192.168.10.6:44500 |…

el-radio-button自适应充满盒子的写法

业务场景&#xff1a;当盒子较宽时&#xff0c;希望 el-radio-button 自适应充满盒子。 el-radio-button 自适应充满盒子的写法 <el-form :inline"true" :model"searchForm"><el-form-item style"display: flex; align-items: center;"…