前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【测开技能】Java系列(二十 三)构造方法

【测开技能】Java系列(二十 三)构造方法

作者头像
雷子
发布2022-09-29 20:20:50
2080
发布2022-09-29 20:20:50
举报

Java系列分享

【测开技能】Java语言系列(一)Java入门

【测开技能】Java语言系列(二)Java基础语法

【测开技能】Java语言系列(三)变量和数据类型

【测开技能】Java语言系列(四) 整数运算

【测开技能】Java语言系列(五) 浮点数运算

【测开技能】Java语言系列(六) 布尔运算

【测开技能】Java语言系列(七) 字符和字符串

【测开技能】Java语言系列(八)数组类型

【测开技能】Java语言系列(九)输入和输出

【测开技能】Java语言系列(十)if判断

【测开技能】Java语言系列(十一)switch多重选择

【测开技能】Java语言系列(十二)while循环

【测开技能】Java语言系列(十三)dowhile循环

【测开技能】Java语言系列(十四)for循环

【测开技能】Java语言系列(十五)break和continue

【测开技能】Java语言系列(十六)简单知识训练

【测开技能】Java语言系列(十七)数组操作--遍历与排序

【测开技能】Java语言系列(十八 )多维数组

【测开技能】Java语言系列(十九 )命令行参数

【测开技能】Java系列(二十 )初识面向对象编程

【测开技能】Java系列(二十 一)面向对象编程基础

【测开技能】Java系列(二十 二)方法

正文


上一片,分享了方法,包括方法的定义,方法的传参,用了set get方法,实现了如何正常添加参数,更新字段。这次接着来分享构造方法。

在初始化实例的时候,经常需要初始化对应的字段。

代码语言:javascript
复制
public static void main(String[] args) {
    Food food=new Food();
    food.setBirthcity("beijing");
    food.setPrice(1);
}

但是如果没有调用set方法,去get的时候,是获取不到数据的。必须先set,然后才能进行get。但是,很多时候,更想在实例的时候,就传递了,而不是示例后去给字段赋值。就用到了构造方法。我们在food初始化的时候,就传递参数。看下代码

代码语言:javascript
复制
public class main {

    public static void main(String[] args) {
        Food food = new Food("beijing", 1);
        System.out.println(food.getBirthcity());
        System.out.println(food.getPrice());
    }
}

class Food {
    private String birthcity;
    private float price;

    public Food(String birthcity, float price) {
        this.birthcity = birthcity;
        this.price = price;
    }

    public String getBirthcity() {
        return birthcity;
    }

    public void setBirthcity(String birthcity) {
        this.birthcity = birthcity;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }
}

其实构造方法的名称就是类名。构造方法的参数没有限制,在方法内部,也可以编写任意语句。但是,和普通方法相比,构造方法没有返回值(也没有void),调用构造方法,必须用new操作符。

看下执行结果

其实构造方法的实现还是很简单的。就是定义一个public 名称和类名一样,然后传递参数,在里面给参数初始化,这样在调用get的时候,就可以获取到类初始化传递的字段的值,不用再实例化后调用set才能get,不然不会有想要的数据。

默认构造方法

是不是任何class都有构造方法?是的。在我们定义后,会执行自定义的构造方法。

在创建构造方法的时候,可以创造有参数的,也可以增加带无参数的。

代码语言:javascript
复制
public class main {

    public static void main(String[] args) {
        Food food = new Food();
        Food food1=new Food("beijing", 1);
    }
}

class Food {
    private String birthcity;
    private float price;
    public  Food(){

    }

    public Food(String birthcity, float price) {
        this.birthcity = birthcity;
        this.price = price;
    }

    public String getBirthcity() {
        return birthcity;
    }

    public void setBirthcity(String birthcity) {
        this.birthcity = birthcity;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }
}
public class main {

    public static void main(String[] args) {
        Food food = new Food();
        Food food1=new Food("beijing", 1);
    }
}

class Food {
    private String birthcity;
    private float price;
    public  Food(){

    }

    public Food(String birthcity, float price) {
        this.birthcity = birthcity;
        this.price = price;
    }

    public String getBirthcity() {
        return birthcity;
    }

    public void setBirthcity(String birthcity) {
        this.birthcity = birthcity;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }
}

这样两个的构造方法都在,在实例化的时候,不传递参数也不会有问题的。那么没有传递参数的字段,打印下,看下对应的get方法能获取到数据吗

代码语言:javascript
复制
public class main {

    public static void main(String[] args) {
        Food food = new Food();
        Food food1=new Food("beijing", 1);
        System.out.println(food.getBirthcity());
        System.out.println(food.getPrice());
        System.out.println("---------");
        System.out.println(food1.getBirthcity());
        System.out.println(food1.getPrice());
    }
}

执行下,看下数据

没有在构造方法中初始化字段时,引用类型的字段默认是null,数值类型的字段用默认值,int类型默认值是0,布尔类型默认值是false

在定义方法的时候,也可以去字段定义自行进行初始化,比如

代码语言:javascript
复制
private String birthcity="beijing";
private float price=1;

在定义类字段的时候,就给字段初始化的值,这样,在后续再传递就是传递的新值。看下如下的代码

代码语言:javascript
复制

public class main {

    public static void main(String[] args) {
        Food food = new Food();
        Food food1=new Food("beijing1", 2);
        System.out.println(food.getBirthcity());
        System.out.println(food.getPrice());
        System.out.println("---------");
        System.out.println(food1.getBirthcity());
        System.out.println(food1.getPrice());
    }
}

class Food {
    private String birthcity="beijing";
    private float price=1;
    public  Food(){

    }

    public Food(String birthcity, float price) {
        this.birthcity = birthcity;
        this.price = price;
    }

    public String getBirthcity() {
        return birthcity;
    }

    public void setBirthcity(String birthcity) {
        this.birthcity = birthcity;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }
}

有了初始化的定义的字段,看下执行结果

在有初始化传递参数的,根据传递的参数展示实例化真正的传递值,如果没有传递对应的参数的值,那么实例化后的对应的字段是默认的初始化的值。

在后续去使用的时候,经常会用到这样的定义方式。比如在实现的时候,初始化值有了,不传递也可以进行调用,在其他地方,根据调用的需要去传递不一样的参数即可。

在之前我们定义了不同的构造参数,其实可以有多个构造方法。比如

代码语言:javascript
复制
class Food {
    private String birthcity="beijing";
    private float price=1;
    public  Food(){

    }

    public Food(String birthcity, float price) {
        this.birthcity = birthcity;
        this.price = price;
    }
    public Food( float price) {
        this.price = price;
    }
    public Food(String birthcity) {
        this.birthcity = birthcity;
        this.price = price;
    }
    public String getBirthcity() {
        return birthcity;
    }

    public void setBirthcity(String birthcity) {
        this.birthcity = birthcity;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }
}

定义了多个的构造方法,但是参数传递不一样,会如何?我们去实现一个方法去看下

代码语言:javascript
复制
public class main {

    public static void main(String[] args) {
        Food food = new Food();
        Food food1=new Food("beijing1", 2);
        Food food2=new Food( 2);
        Food food3=new Food( "beijing2");
        System.out.println(food.getBirthcity());
        System.out.println(food.getPrice());
        System.out.println("---------");
        System.out.println(food1.getBirthcity());
        System.out.println(food1.getPrice());
        System.out.println("---------");
        System.out.println(food2.getBirthcity());
        System.out.println(food2.getPrice());
        System.out.println("---------");
        System.out.println(food3.getBirthcity());
        System.out.println(food3.getPrice());
    }
}

运行结果

可以看到,不同的构造方法传递不一样的参数,如果在实例化的时候没有传递,就会使用定义的字段默认的初始化的值。初始化的时候,传递不一样的参数,就会根据传递,调用不同的构造方法。 编辑器会给我们有提示的。

根据传递的类型,去匹配不一样的字段。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档