类的构造函数

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

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

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

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;
    }
}

 

 

posted on 2012-10-06 00:01  kiny  阅读(316)  评论(0编辑  收藏  举报