类的构造函数

有的类可以有构造函数,有的可以没有构造函数,如果没有构造函数,编译器会自动给类添加一个默认的构造函数,此构造函数什么也做。

默认构造函数是无参的,因为调用它的时候什么也不需要去做,构造函数提供了在创建对象的时候初始化数据。当然还有一种初始化代码块的方法,

初始化代码块在构造函数之前执行。看代码。

public class TTest {
    public static void main(String[] args) {
        TPerson person; //初始化代码块和构造函数都没执行
        person = new TPerson();
        //打印结果
        //这里是代码初始块。
        //这里是构造函数。
    }
}

class TPerson{
    //初始化代码块
    static{
        //只能初始化静态变量
        System.out.println("这里是代码初始块。");
    }
    
    private double salary;
    
    public TPerson(){
        System.out.println("这里是构造函数。");
    }
    
    public void setSalary(double salary) {
        this.salary = salary;
    }
}

多个构造函数实际学习方法的时候已经知道了,不需要多说,关键是构造函数调用构造函数,使用this()

public class TTest {
    public static void main(String[] args) {
        TPerson person = new TPerson("YUE",31,8888.0);
        System.out.println(person.getName());
    }
}

class TPerson{
    private double salary;
    private String name;
    private int age;
    
    public TPerson(String _name){
        name = _name;
    }
    
    public TPerson(String _name,int _age) {
        this(_name);
        age = _age;
    }
    
    public TPerson(String _name,int _age,double _salary){
        this(_name,_age);
        salary = _salary;
    }
    
    public String getName() {
        return name;
    }
    
    public byte getAge() {
        return age;
    }
    
    public double getSalary() {
        return salary;
    }
}

使用构造函数复制对象

在实际开发中有时候会遇到创建了一个对象后,另一个对象和第一个创建的对象完全一样,这时就需要复制对象。

假如person是TPerson的一个对象,现在person2要和person一样。

TPerson person = new TPerson("YUE",31,8888.0);

TPerson person2 = person    这样是不能复制的。因为person2没有new,没有new是不会执行构造函数的,所以person初始化的数据在person2中是没有的。和预期的结果不相同。如何复制呢?

代码如下:

public class TTest {
    public static void main(String[] args) {
        TPerson person = new TPerson("YUE",31,8888.0);
        TPerson person2 = new TPerson(person);
        //这样person和person2完全一样
    }
}

class TPerson{
    private double salary;
    private String name;
    private int age;
    
    //复制对象
    public TPerson(final TPerson _person){
        salary = _person.salary;
        name = _person.name;
        age = _person.age;
    }
    
    public TPerson(String _name){
        name = _name;
    }
    
    public TPerson(String _name,int _age) {
        this(_name);
        age = _age;
    }
    
    public TPerson(String _name,int _age,double _salary){
        this(_name,_age);
        salary = _salary;
    }
    
    public String getName() {
        return name;
    }
    
    public byte getAge() {
        return age;
    }
    
    public double getSalary() {
        return salary;
    }
}

 

 

转载于:https://www.cnblogs.com/kiny/articles/2712673.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值