要想学好Java编程,构造器、方法重载、this关键字、垃圾回收机制,这4关一定要过!

有人说,你应该关注时事、财经,甚至流行的电影、电视剧,才有可能趁着热点写出爆文;有人说,你别再写“无聊”的技术文了,因为程序员的圈子真的很小,即便是像鸿祥那样的招牌大牛,文章是那么的干货,浏览量有多少?不到万吧;有人说,你别妄想在写作上面知识变现了,因为你写的文章真的很不优秀,我都不爱看!

我想说,你们说的话我都不爱听!我也懒得反驳,因为我没有成功,也就没有话语权,多说无益。我只想做一名执拗的程序员,静静地写文,哪怕只有一个读者——有时候,做一件事,并不是想要结果,仅仅只是因为心底那种狂热的喜欢。

今天,我打算聊聊Java编程中的初始化。

01、使用构造器来确保对象初始化

Java编程中,无论是对象,还是基本类型,都不允许在未经初始化的情况下使用它们;否则,Java编译器就会热情地提醒你——请初始化后再使用。

那,Java是通过什么机制来确保对象初始化呢?

答案就是“构造器”——类的对象要被正确的初始化,就必须先过构造器这一关。

程序清单1-1:一个带有构造器的简单类

class Writer {
    public Writer() {
        System.out.println("我是一名写作爱好者");
    }

    public static void main(String[] args) {
        new Writer();
    }
}

当使用关键字new来创建一个对象Writer时,就会调用构造器(与类名Writer相同的方法Writer())进行初始化,因此上述程序就会输出“我是一名写作爱好者”。

构造方法Writer()没有参数,因此被称为无参构造器;事实上,无参构造器是可以省略的——编译器会自动创建一个无参构造器,被称为“默认构造器”(Java设计者真的无比明智啊——帮助程序员省去了创建默认构造器的麻烦)。

程序清单1-2:默认构造器

class Writer {
    public static void main(String[] args) {
        new Writer();
    }
}

默认构造器并不会一直“默认”存在,如果已经定义了一个构造器,无论有参还是无参,编译器将不再自动创建默认构造器。

程序清单1-3:不会一直存在的默认构造器

class Writer {
    public Writer(String name) {
        System.out.println(name + "是一名写作爱好者");
    }

    public static void main(String[] args) {
        new Writer();
        new Writer("沉默王二");
    }
}

一旦定义了一个有参构造器,那么在创建对象的时候就必须传递构造器需要的参数,否则编译器会提示“The constructor Writer() is undefined”(使用new Writer()创建对象对)——这样做的好处就是,确保对象在初始化的时候符合类设计的初衷(上例中,Writer需要指定作者姓名,所以你在创建Writer对象时不能不传递作者姓名)。

02、参差不齐乃幸福本源

读王小波的《沉默的大多数》,我喜欢上了一句话:“参差不齐乃幸福本源”。王小波的意思可能是想说:一个能容忍不同观点与不同的生活方式的社会,才是一个幸福的社会。那么,在Java的世界里,也有一个幸福的社会。

由于构造器的特殊性(不能与其他成员方法的名字冲突),导致构造器的名字必须和类名保持一致,也就是说,一个类,只能有一个构造器名。这似乎局限了构造器的使用方式。但其实不然,Java允许方法重载——可以只有一个方法名,但方法的参数列表可不尽相同;哎,问题就这么巧妙的解决了。

程序清单2-1:构造方法的重载

class Writer {
    private String name;
    private String bookName;

    public Writer(String name) {
        this.name = name;
        System.out.println(name + "是一名写作爱好者");
    }

    public Writer(String name, String bookName) {
        this.name = name;
        this.bookName = bookName;

        System.out.println(name + "不仅是一名写作爱好者,还出版了书籍" + bookName);
    }

    public static void main(String[] args) {
        new Writer("沉默王二");
        new Writer("沉默王三", "《Web全栈开发进阶之路》");
    }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfgwg.html