Java学习指南(10) 类

本文是《Java学习指南》原书的网络版,作者邵发,拥有本书的全部权利。相关视频课程在此查看

目录

第10章 对象的创建与销毁

10.1 构造方法

10.2 对象的销毁


第10章 对象的创建与销毁

10.1 构造方法

本章引入一种特殊的方法:构造方法。

在前面几章的练习中,当要初始化一个类的时,我们是这么做的。先定义一个类Student,

public class Student
{
    public String id;
    public String name;
    public boolean sex;
}

然后创建对象,并初始化各个属性的值,

Student s = new Student();
s.id = "20180001";
s.name = "邵发";
s.sex = true;

下面,我们引入一个新的方式,可以创建对象的同时对属性的值做初始化。

10.1.1 添加构造方法

构造方法和普通方法类型,例如,

public class Student
{
    public String id;
    public String name;
    public boolean sex;

    // 添加一个构造方法
    public Student(String id,String name,boolean sex)
    {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }
}

在这里,添加了一个构造方法,其形式上基本和普通方法一样,但有以下区别:

(1) 构造方法的名字,必须和类名相同

(2) 构造方法不能加返回值,即使是void也不能加

如果一个方法符合上述两条特征,那么就称它为构造方法。

10.1.2 构造方法的作用

构造方法用于对象的初始化,在new出对象的时候会调用它。

例如,

Student s = new Student("20180001", "邵发", true);

这样,在创建Student对象时,同时传入了这3个参数。这些参数会传递到构造方法里。

10.1.3 构造方法的重载

一个类可以加多个构造方法,只要参数列表不同就没问题。这称为构造方法的重载。

例如,

public class Student
{
    public String id;
    public String name;
    public boolean sex;

    public Student(String name)
    {
        this.id = "0000";
        this.name = name;
    }

    public Student(String id,String name,boolean sex)
    {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }
}

这样就是重载了2个构造方法,第一个的参数列表为(String),第二个参数列表为(String, String, boolean)。

在创建对象时,可以有2种选择,

Student s1= new Student("小李");
Student s2 = new Student("20180001", "邵发", true);

显然,由参数列表不同,在执行时它们会对应上不同的构造方法。

10.1.4 默认构造方法

如果有一个构造方法没有带参数,则称为默认构造方法。或者也可以直接叫无参构造方法。

比如,

public class Student
{
    public String id;
    public String name;
    public boolean sex;

    public Student()
    {
        this.id = "0000";
        this.name = "无名";
        this.sex = true;
    }
}

在此例中,有一个构造方法没有带参数,所以称为默认构造方法。

现在有一个问题:如果一个类里没有添加任何构造方法,那么这种情况怎么解释呢?这种情况下,编译器会自动生成一个空的默认构造方法。

 

10.1.5 构造方法的访问控制

一般情况下,构造方法应该用public修改,但在某些特殊情况下(比如单例设计)也可以用private。例如,

public class Example
{
    private int number = 10;

    private Example() // 构造方法是private的!
    {
    }
}

像这种用private的构造方法也是可以的,但并不常见。初学者了解即可,不必掌握。

 

10.2 对象的销毁

在Java语言,程序员只管创建对象,不管销毁对象。对象的销毁由系统自动完成的。比如,使用new可以创建一个对象,

Student  stu =  new Student();

创建完了,就使用它即可。当对象不再被使用时,会由Java的垃圾回收机制自动回收。( 注:垃圾回收,简称GC,Garbage Collection ) 。

那么,什么情况下对象是“不再被使用呢”?准确地讲,指的是当一个对象失去引用的时候。在第五章和第六章中已经介绍过什么叫“失去引用”。例如,

Student stu = new Student();

stu = new Student();

这里就创建了两个对象,但是第一个对象没有人引用它,它就是“失去引用”了,所以它将被GC自动回收。

关于对象的销毁,并不需要我们了解太深,因为它是一个自动的过程。大家只需要对GC这个术语有个印象就够了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿发你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值