Constructors

构造方法

Constructors

什么是

一个方法, 用于创建对象

创建对象时会被调用

new 类名();
格式

public class 类名 {
    public 类名() {
        ...
    }
}

方法名必须跟类名一样

没有返回值类型

作用

因为创建时会被调用, 所以可以在此机会做初始化的操作

使用前

Player.java

public class Player {
    private int atk;
    private int def;
    private int hp;
    
    public void trace(){
        System.out.println("atk:" + atk + ", def:" + def);
    }
    
    // Getters & Setters
    ...
    
}

Game.java

public class Game {
    public static void main(String[] args) {
        new Game().run();
    }
    
    public void run(){
        Player player1 = new Player();
        Player player2 = new Player();
        
        player1.setAtk(100);
        player1.setDef(100);
        player1.setHp(100);
        player2.setAtk(100);
        player2.setDef(100);
        player2.setHp(100);
        
        int damage = 200;
        player1.setHp(player1.getHp() - damage);
        player2.setHp(player2.getHp() - damage);
    }
}
使用后

Player.java

public class Player {
    private int atk;
    private int def;
    private int hp;
    
    public Player(){
        atk = 100;
        def = 100;
        hp = 100;
    }
    
    public void trace(){
        System.out.println("atk:" + atk + ", def:" + def);
    }
    
    // Getters & Setters
    ...
    
}

Game.java

public class Game {
    public static void main(String[] args) {
        new Game().run();
    }
    
    public void run(){
        Player player1 = new Player();
        Player player2 = new Player();
        
        int damage = 200;
        player1.setHp(player1.getHp() - damage);
        player2.setHp(player2.getHp() - damage);
    }
}
有参初始化

利用方法重载, 构造方法也可以方法重载

Player.java

public class Player {
    private int atk;
    private int def;
    private int hp;
    
    public Player(){
        atk = 100;
        def = 100;
        hp = 100;
    }
    
    public Player(int atk, int def, int hp) {
        this.atk = atk;
        this.def = def;
        this.hp = hp;
    }
    
    public void trace(){
        System.out.println("atk:" + atk + ", def:" + def);
    }
    
    // Getters & Setters
    ...
}

Game.java

public class Game {
    public static void main(String[] args) {
        new Game().run();
    }
    
    public void run(){
        Player player1 = new Player();
        Player player2 = new Player(200, 200, 200);
        
        int damage = 200;
        player1.setHp(player1.getHp() - damage);
        player2.setHp(player2.getHp() - damage);
    }
}
构造方法转接调用
使用前

Player.java

public class Player {
    private int atk;
    private int def;
    private int hp;
    
    public Player(){
        atk = 100;
        def = 100;
        hp = 100;
    }
    
    public Player(int atk, int def, int hp) {
        this.atk = atk;
        this.def = def;
        this.hp = hp;
    }
    
    public void trace(){
        System.out.println("atk:" + atk + ", def:" + def);
    }
    
    // Getters & Setters
    ...
}
转接调用构造方法

使用 this() 在构造方法内调用其它构造方法

Player.java

public class Player {
    private int atk;
    private int def;
    private int hp;
    
    public Player(){
        this(100, 100, 100);
    }
    
    public Player(int atk, int def, int hp) {
        this.atk = atk;
        this.def = def;
        this.hp = hp;
    }
    
    public void trace(){
        System.out.println("atk:" + atk + ", def:" + def);
    }
    
    // Getters & Setters
    ...
}
转接调用其它方法

调用其它方法协助初始化

Player.java

public class Player {
    private int atk;
    private int def;
    private int hp;
    
    public Player(){
        initialize(100, 100, 100);
    }
    
    public Player(int atk, int def, int hp) {
        initialize(atk, def, hp);
    }
    
    public void initialize(int atk, int def, int hp) {
        this.atk = atk;
        this.def = def;
        this.hp = hp;
    }
    
    public void trace(){
        System.out.println("atk:" + atk + ", def:" + def);
    }
    
    // Getters & Setters
    ...
}
规则

构造方法可以调用其它构造方法进行初始化

也可以调用其它方法协助进行初始化

但一般方法不能使用 this() 转接调用构造方法

自动生成
无参自动生成

如果不写任何构造方法

系统自动生成一个无参构造

写了就不生成

如果写了任何构造方法

系统就不自动生成无参构造

这时, 一般会手动补一个无参构造

谁该带入构造方法
出生时必须

出生时必须的需要带入构造方法

为省略后期对象构建的

如果对象创建后, 很多属性都要赋值, 可以考虑使用有参构造快速赋值

特殊情况

其它类型转型

拷贝构造

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值