初始化与清理

初始化与清理正是涉及安全的两个问题

Java引入了构造器地概念,这是一个在创建对象时自动被调用的特殊方法,Java提供了垃圾回收器,。对于不再使用的内存资源,垃圾回收能自动将其释放。

一,用构造器确保初始化

在Java中,通过提供构造器,类的创建者能确保没个对象能够被初始化。创建对象时,如果其类具有构造器,Java会在用户有能力调用对象之前调用响应的构造器,从而保证了初始化的进行。但是还有一个问题,那就是如何为构造器命名呢?有两个问题,那就是所取的任何名字都可能与类的某个成员名称想冲突,以及调用构造器是编译器的责任,必须让编译器知道要调用那个方法,所以这就需要构造器与类的名称相同。考虑到在初始化期间要自动调用构造器,这种做法就顺理成章了。还有,由于构造器的名字与类的一样,所以每个方法首字母小写的编码风格就不适用于构造器了

不接受任何参数的构造器叫默认构造器,Java文档使用的文档叫无参构造器。而且和其他方法一样,构造器也可以带有形式参数。有了形式参数就可以在初始化对象时顺便提供能够形式参数。如果构造器中只有一个这样的构造器那么就不允许用其他任何方式创建对象

构造器是一种特殊类型的方法,因为它没有返回值,加入构造器有返回值,就必须让编译器知道如何处理此返回值

二,方法重载

核心思想:不需要对每一个概念使用不同的词汇--从具体的语境中就可以推断出其含义。要对明显相同的概念使用相同范名字一定会让那个人纳闷

要用多种方式创建一个对象,就必须创建多个方法名相同而形式参数不同的构造器,即方法重载,这种方式也可以用于其他方法

那么如何区分重载方法呢?这要求每一重载方法有不同的参数列表,即使有相同的参数,但顺序不一样,也足以区分,但是一般不会这样做,这样会使代码难以维护。也有人收为啥不可以用返回值得类型来区分呢,此处省略原因,反正就是不可以

如果传入的数据类型小于方法中声明的形式参数类型,实际数据类型就会得到提升。char略有不同,如果找不到恰好可以接收char参数的方法就会将其提升到int类型。如果传入的参数类型过大,就必须在传递参数的时候通过类型转换进行窄化转换,否则就会报错

三,默认构造器

如果你没有写任何类型的构造器,系统会自动为你创建一个,但是如果你写了非默认构造器,系统则不会为你创建默认构造器,这样就相当于你的类中没有默认构造器,你自己刻意放弃了默认构造器

四,this关键字

当前方法中的this会自动引用容一个类中的其他方法,所以没有必要在引用本类其他方法时用this.方法()的方式调用,编译器会自动为你添加this;只有当需要返回对当前对象的引用时,需要使用this

尽管可以用this调用一个构造器,但不能调用两个,而且必须置于方法的开始处,否则编译器会报错。this的另一种用法是由于形式参数的名称可能和数据成员的一样,所以在调用成员变量的时候用this.成员名称加以区分!注意,除了构造器,编译器禁止在其他的任何方法调用构造器

了解了this就可以更加全面的了解static方法。static就是没有this的方法,在static内部不能调用非静态方法,反过来倒是可以。而且可以在没有创建任何对象的情况下就可以通过类本身调用,实际上这就是static方法的主要用途,Java中禁止使用全局方法,但是在类中植入static方法就可以调用其他static方法和static域。static是不是面向对象是有争议的,static方法由于不是通过向对象发送消息的方式来完成的。要是在代码中出现大量出现static方法,就得考虑重新设计这个类。

五,终结处理和垃圾回收

在Java中只有用new建立的对象才会被垃圾回收器回收,也就是说存在不能被回收的对象,而且垃圾回收期并不等于c++中的析构函数

Java允许在类中建立一个finalize()的方法,工作原理为:一旦垃圾回收器开始释放对象所占用的空间,将首先调用finalize()方法

 但是不能用这个方法作为一个通用的清理方法

引用记数技术

自适应的,分代的,停止-复制,标记-清扫 “式垃圾回收器

六,成员初始化

七,构造器初始化

无法阻止自动初始化的进行,将在构造器被调用之前执行,将在任何方法被执行之前进行

初始化的顺序是先静态,然后非静态,用静态块执行静态初始化动作只进行一次

八,数组初始化

编译器不允许指定数组的大小

如果可能的话,请尽量在数组定义的时候初始化

可变参数列表不依赖于自动包装机制  

九,enum枚举

enum有一个特别实用的特性,他可以在switch语句内使用

原文地址:https://www.cnblogs.com/QianYue111/p/10152736.html