广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java有参构造方法与无参构造方法(完全理解)
  • 113
分享到

Java有参构造方法与无参构造方法(完全理解)

javaintellij-idea开发语言 2023-08-16 18:08:15 113人浏览 薄情痞子
摘要

文章目录 前言有参构造方法无参构造方法定义四个类说明情况(如果还不清晰请看)Lombok的基本使用 前言 遇到了就简单写一下吧,如果能够对你有帮助,点个赞吧。首先清晰明了的了解到有参构造方法与无参构造方法、以及应用,然后实战

前言

遇到了就简单写一下吧,如果能够对你有帮助,点个赞吧。首先清晰明了的了解到有参构造方法与无参构造方法、以及应用,然后实战项目一般会使用的Lombok,不会手动再生成get、set。
定义:
在编写一个类时没有添加无参构造方法,那么编译器会自动添加无参构造方法;(如果自己手动添加构造函数,无论有参数或是没参数,默认构造函数都将无效)
编写时添加有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法。
如果需要使用无参构造方法,一定要在类里面添加。

有参构造方法

在之前我们要为一个对象赋值,先要创建好对象之后然后“对象名.属性名”或者调用属性的setter为属性赋值。但是在很多时候觉得这样做很麻烦,最好的做法是在创建对象的时候完成属性的初始化操作,此时需要使用到有参数构造方法方能完成该功能(有人把构造方法叫做构造器)。
例子:(idea快捷键Alt+insert生成构造方法和get、set等)
1、定义一个Student类

package com.hn.yuan.common;public class Student {    private String name;    private String age;    public Student(String name, String age) {        this.name = name;        this.age = age;    }    public void setName(String name) {        this.name = name;    }    public void setAge(String age) {        this.age = age;    }    public String getName() {        return name;    }    public String getAge() {        return age;    }    public void start(){        System.out.println("我叫"+name+"今年"+age+"岁了");    }}

2、定义一个Test类,来进行查看运行效果

package com.hn.yuan.common;public class Test {    public static void main(String[] args) {        //使用有参数的构造方法实例化对象        Student st=new Student("张三","18");        st.start();    }}

运行效果
image.png
此时发现了我们不需要像之前一样,要为对象的属性赋值就必须先创建对象再使用“对象名.属性名”或者使用setter 方法去实现了,而是直接使用有参数的构造方法去实现。
3、定义原理呈现
在编写一个类时没有添加无参构造方法,那么编译器会自动添加无参构造方法;(如果自己手动添加构造函数,无论有参数或是没参数,默认构造函数都将无效)
编写时添加有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法。
如果需要使用无参构造方法,一定要在类里面添加。
image.png

无参构造方法

作用:无参构造方法一般是用来初始化:如为变量赋初值、初始化对象等。
在之前我们使用过方法,在调用的方法的是时候需要在方法名称之后加.上小括号,括号里面可以传递实参,那么我们在创建一个对象的时候使用的是“new类名()”的方式去实现,其实上这也是一种方法,但是这个方法我们没有明确的去定义,那为什么可以调用呢?观察代码。
例子:
1、首先,我们定义一个Student类

package com.hn.yuan.common;public class Student {    private String name;    private String age;    //含有 无参构造方法    public Student() {        System.out.println("调用了无参构造方法");    }    public void setName(String name) {        this.name = name;    }    public void setAge(String age) {        this.age = age;    }    public String getName() {        return name;    }    public String getAge() {        return age;    }    public void start(){        System.out.println("我叫"+name+"今年"+age+"岁了");    }}

2、定义一个Test类,来进行查看运行效果

package com.hn.yuan.common;public class Test {    public static void main(String[] args) {        //使用有参数的构造方法实例化对象        Student st=new Student();        System.out.println(st);    }}

运行效果
image.png

定义四个类说明情况(如果还不清晰请看)

类Person1 自己不手动添加任何无参或有参数构造方法 (实例化对象时:编译通过)
类Person2 自己添加无参的构造方法 (实例化对象时:编译通过)
类Person3 有参数的构造方法 (实例化对象时:不通过)
类Person4 自己添加无参的构造方法,和有参数的构造方法 (实例化对象时:编译通过)

//定义类Person1   自己不手动添加任何无参或有参数构造方法class Person1{    private int age;    private String name;    private String sex;}//定义类Person2   自己添加无参的构造方法class Person2{    private int age;    private String name;    private String sex;        public Person2(){        System.out.println("无参构造方法被调用");    }}//定义类Person3   有参数的构造方法class Person3{    private int age;    private String name;    private String sex;        public Person3(String name, String sex, int age ){        this.name = name;        this.sex = sex;        this.age = age;    }}//定义类Person4   自己添加无参的构造方法,和有参数的构造方法class Person4{    private int age;    private String name;    private String sex;        //不带参数的构造函数,可以被重载    public Person4(){        System.out.println("无参构造方法被调用");    }        //带参数对的构造函数    public Person4(String name, String sex, int age ){        this.name = name;        this.sex = sex;        this.age = age;    }}public class ObjectInit_2 {    public static void main(String[] args) {        Person1 person1 = new Person1();//编译通过;①实例化Person对象    ②自动调用构造方法Person( )        Person2 person2 = new Person2();//编译通过;打印: 无参构造方法被调用        // 这样写,编译器会报错,原因是系统默认的无参构造方法被有参构造方法覆盖,编译器不能再提供无参构造方法        Person3 person3 = new Person3();        //Person4 person4 = new Person4();//编译通过;打印: 无参构造方法被调用        Person4 person4 = new Person4("qzz", "man", 18);//编译通过;        }}

使用构造器时
1、构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)
2、每个类可以有一个以上的构造器
3、构造器可以有0个、1个或1个以上的参数
4、构造器没有返回值
5、构造器总是伴随着new操作一起调用
父类有有参构造方法有两种情况,一只有有参构造,那么子类的构造方法中的第一句必须调用父类的有参构造方法,也就是“super(…);”,…为你传入的参数如:

class Father {    public Father(String lastname) {    }}class Son extends Father {    public Son() {        super("aaaa");// 这句必须有// 可以写其他代码    }}

二有有参也有无参构造方法,这时子类不显示调用super,这会默认自动调用父类无参的构造方法,

class Father {    public Father() {    }    public Father(String lastname) {    }}class Son extends Father {    public Son() {        super();// 这句可以有也可以没有,没有写的话会自动调用        // 可以写其他代码    }}

Lombok的基本使用

首先我们要了解的信息:
IntelliJ idea 2020.3及以上版本已经内置Lombok plugin了,所以不需要安装插件,只需要在项目添加Lombok依赖就能用了。(如果按照其它人给的办法通过非官方渠道安装Lombok plugin,反而可能出现版本兼容问题,所以IDEA 2020.3及以上版本的不要瞎搞去安装Lombok plugin了)
同时:lombok在2020.2就开始断更了,所以idea2021及之后的marketplace就不开始支持lombok了
信息来源1(IDEA 2020.3的更新说明):https://www.jetbrains.com/idea/whatsnew/2020-3/
image.png

开始应用:
注意:下载的版本要与idea版本对应,要不然可能会报错
1、官方下载之前对应idea版本的lombok
第一种:直接lombok官方:lombok各个版本下载地址
image.png
第二种:打开IDEA的File——setting——Plugins,搜索lombok,应用即可。
(一般内网状态下,会给你个Lombok压缩包,引入-应用-即可)
image.png
2、使用Lombok
第一种引入方式:直接在Maven中添加依赖

                    org.projectlombok            lombok                    

第二种引入方式:在需要的类上面加注解@Data,会爆红
爆红之后,鼠标移到爆红位置,选择添加add ‘lombok’ to classpath即可,maven会自动帮我们添加依赖。

例子:

package com.hn.yuan.common;import lombok.AllArgsConstructor;import lombok.Data;@Data@AllArgsConstructorpublic class Student {    private String name;    private String age;}

常用注解作用:
@Data
等价于@Setter、@Getter、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode

@NoArgsConstructor
@NoArgsConstructor在类上使用,这个注解可以生成无参构造方法,如下所示:

@RequiredArgsConstructorpublic class Student() {    private String name;    private String age;}public class Student() {    private String name;    private String age;        public Student() {    }}

@AllArgsConstructor
@AllArgsConstructor在类上使用,这个注解可以生成全参构造函数,且默认不生成无参构造函数。
不过需要注意的是,这里所说的全参并不包括已经被初始化的被final关键字修饰的字段,因为字段一旦被final关键字修饰被赋值后就不能再被修改,如下所示:

@RequiredArgsConstructorpublic class Student() {    private final String gender;    private final Integer ages = 18;        private String name;    private String age;}public class Student() {    private final String gender;    private final Integer ages = 18;        private String name;    private String age;        public Student(String gender, String name, String age) {            this.gender = gender;        this.name = name;        this.age = age;    }}

@AllArgsConstructor :注在类上,提供类的全参构造
@NoArgsConstructor :注在类上,提供类的无参构造
@Setter :注在属性上,提供 set 方法
@Getter :注在属性上,提供 get 方法
@EqualsAndHashCode :注在类上,提供对应的 equals 和 hashCode 方法
@Log4j/@Slf4j :注在类上,提供对应的 Logger 对象,变量名为 log

点赞.jpg

各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。

免责声明:本文章仅用于学习参考

来源地址:https://blog.csdn.net/SoulNone/article/details/129350499

--结束END--

本文标题: Java有参构造方法与无参构造方法(完全理解)

本文链接: https://www.lsjlt.com/news/371863.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java有参构造方法与无参构造方法(完全理解)
    文章目录 前言有参构造方法无参构造方法定义四个类说明情况(如果还不清晰请看)Lombok的基本使用 前言 遇到了就简单写一下吧,如果能够对你有帮助,点个赞吧。首先清晰明了的了解到有参构造方法与无参构造方法、以及应用,然后实战...
    99+
    2023-08-16
    java intellij-idea 开发语言
  • java构造器 默认构造方法及参数化构造方法
    目录1、构造器1.1 权限修饰符是public 1.2 显示定义构造器1、构造器 构造器也叫构造方法、构造函数,是一种特殊类型的方法,负责类中成员变量(域)的初始化。构造器的用处是在...
    99+
    2022-11-12
  • php构造方法和java构造方法有哪些区别
    这篇文章主要介绍“php构造方法和java构造方法有哪些区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php构造方法和java构造方法有哪些区别”文章能帮助大家解决问题。区别:1、重写子类构造函...
    99+
    2023-06-29
  • php构造方法和java构造方法有什么区别
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php构造方法和java构造方法有什么区别早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象。PHP的面向对象语法是从JAVA演化...
    99+
    2021-01-17
    php
  • Java构造器方法深入理解
    目录重载1.构造器的重载2.方法的重载(overload)重写重载 1.构造器的重载 因为构造器的名字必须与类名相同,所以同一个类的所有构造器名肯定相同,构成重载;为了让系统能区分不...
    99+
    2022-11-12
  • 详解JAVA中的构造方法
    目录 一、构造方法的概念 二、构造方法的特性 一、构造方法的概念         构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时由编译器自动调用,并且在整个对象的生命周期内只调用一次。 代码演示:...
    99+
    2023-09-07
    java
  • Java构造方法和方法重载详解
    目录第一 构造方法的作用第二 构造方法的特点方法重载总结类的结构包括 : 1. 成员变量 2. 成员方法 3. 构造方法 4. 代码块 5. 内部类 第一 构造方法的作用 主要有以下...
    99+
    2022-11-13
  • Java构造方法有什么作用?
    构造方法的作用:即给重要属性赋初始值。 Java构造方法本身并不神秘,通常它只是去完成一些初始化的工作。构造方法本身并不能去创建出一个对象,真正创建对象的是Java平台,构造方法只是...
    99+
    2022-11-13
    Java 构造方法
  • Java 构造方法的使用详解
    目录1. 看一个需求2. 基本语法3. 基本介绍4. 快速入门5. 注意事项和使用细节6. 练习1. 看一个需求 看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给...
    99+
    2022-11-12
  • Socket与ServerSocket类构造方法有哪些
    这篇文章主要介绍“Socket与ServerSocket类构造方法有哪些”,在日常操作中,相信很多人在Socket与ServerSocket类构造方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Soc...
    99+
    2023-06-22
  • java方法中的构造方法与普通方法的区别
    普通方法大家肯定都见过,有修饰符修饰的方法可以有返回值,也有的没有返回值。而构造方法呢?举个例子应该很快就懂了,当一个类实例化对象的时候,用到的方法就是构造方法,我们可以看到在一个类里面的构造方法并不是从别的类里面引进来的,而是自己本身就有...
    99+
    2021-03-16
    java入门 java 构造方法 普通方法 区别
  • java构造方法的作用有哪些
    Java的构造方法主要有以下几个作用: 创建对象:构造方法用于创建对象的实例,通过调用构造方法可以在内存中分配空间,并初始化对象...
    99+
    2023-10-26
    java
  • java构造方法的特点有哪些
    Java构造方法的特点有以下几个:1. 构造方法与类同名。构造方法的名称必须与类的名称相同。2. 构造方法没有返回类型。构造方法没有...
    99+
    2023-08-23
    java
  • 构造器与java方法的对比示例
    这篇文章主要介绍了构造器与java方法的对比示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应...
    99+
    2023-06-14
  • JAVA构造函数(方法)示例详解
    目录 一、什么是构造函数二、构造函数的特点三、示例四、默认构造函数五、构造函数的重载六、构造函数的使用构造函数的特点总结 一、什么是构造函数 Java构造函数,也叫构造方法,是JAV...
    99+
    2022-11-12
  • 关于Java类的构造方法详解
    ​Java语言中,类的构造方法是一种很特殊的方法。关于构造方法要记忆和理解的知识点其实挺多的,下面我们就来详细的讲讲构造方法,相信看过这篇文章之后,你会对构造方法有一个比较深刻的认识...
    99+
    2023-01-28
    java类的构造方法 java类的构造方法有什么作用 java类的构造函数怎么写
  • java构造方法的调用方式有哪些
    Java构造方法的调用方式有以下几种:1. 通过new关键字调用:使用new关键字创建对象时,会自动调用该类的构造方法。```MyC...
    99+
    2023-09-01
    java
  • java构造方法和成员方法有什么区别
    Java构造方法和成员方法的区别如下: 特殊性质:构造方法是用于创建对象时调用的特殊方法,而成员方法是对象创建后调用的普通方法。...
    99+
    2023-10-24
    java
  • Java构造方法和方法重载有什么特点
    这篇文章主要介绍了Java构造方法和方法重载有什么特点的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java构造方法和方法重载有什么特点文章都会有所收获,下面我们一起来看看吧。类的结构包括 : 成员变量 成员方...
    99+
    2023-06-26
  • php构造方法与成员方法的区别有哪些
    本篇内容主要讲解“php构造方法与成员方法的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php构造方法与成员方法的区别有哪些”吧!区别:1、一个类只能有一个构造方法,但是可以有多个成...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作