您的位置:首页 > 编程语言 > Java开发

java基础系列:(一)初始化与清理

2017-06-16 00:00 316 查看

1、用构造器确保初始化

在java中,通过提供构造器,类的设计者可以确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。

如何命名构造器方法?

(1)所取的任何名字都可能与类的某个成员名称相冲突;

(2)调用构造器是编译器的责任,所以必须让编译器知道应该调用哪个方法。

考虑在初始化期间要自动调用构造器,构造器采用与类相同的名称。

public class Demo {

Demo() {

System.out.println("test");

}

}

在创建对象时,new Demo();将会为对象分配存储空间,并调用相应的构造器。这就确保了在你能操作对象之前,它已经被恰当的初始化了。在java中,“初始化”和“创建”捆绑在一起,两者不能分离。

不接受任何参数的构造器叫做默认构造器,也称无参构造器。

2、重载

(1)区分重载方法的规则很简单,每个重载的方法都必须有一个独一无二的参数类型列表。

(2)不能以返回值区分重载方法。

例如:

int demo(int size);

double demo(int size);

如果像下面这样调用方法:

demo(1);

此时java没法判断该调用哪一个demo(int size)。

3、thist关键字

如果有同一类型的两个对象,分别是a和b。你可能想知道,如何才能让这两个对象都能调用peel()方法呢?

如果只有1个peel(int i)方法,它是如何知道是被a还是被b所调用的呢?

为了能用简便、面向对象的语法来编写代码,编译器做了一些幕后操作。它暗自把“所操作对象的引用”作为第一个参数传递给peel(int i)。所以上述两个方法的调用就变成了这样:

peel(a, 1);

peel(b, 2);

这是内部的表现形式,我们并不能这样写代码,并试图通过编译;但这种写法的确能够帮助你了解实际所发生的事情。

假设你希望在方法的内部获得对当前对象的引用。由于这个引用是编译器“偷偷“传入的,所以没有标识符可用。但是,为此有个专门的关键字:this。this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。this的用法和其他对象的引用并无不同。但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。

this可以用在构造器中调用其他构造器。通常写this的时候,都是指“这个对象”或者“当前对象”,而且它本身表示对当前对象的引用。在构造器中,如果为this添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确使用,这样,调用其他构造器就有了直接。尽管可以用this调用一个构造器,但却不能调用两个,此外,必须将构造器调用置于最起始处,否则编译器会报错。

4、static的含义

了解了thist关键字之后,就能更全面的理解static的含义。static方法就是没有this的方法,在static方法的内部不能调用非静态方法,反过来倒是可以的。static的主要用途是在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。

5、清理:终结处理和垃圾回收

java有垃圾回收期负责回收无用对象占据的内存资源。但也有特殊情况:假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些由new分配的内存,所以它并不知道该如何释放该对象的这块“特殊”内存。为了应对这种情况,java允许在类中定义一个名为finalsize()的方法。它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalsize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

6、成员初始化

java尽力保证:所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,java以编译时错误的形式来贯彻这种保证。

类的数据成员都会有一个初始值,基本数据类型初始值如下:

boolean false

char []

byte 0

short 0

int 0

long 0

float 0.0

double 0.0

在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null。

无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初值;如果它是一个对象引用,那么它的默认初始化值就是null。

静态初始化只在必要时刻才会进行,只有在第一个对象被创建(或者第一次访问静态数据)的时候,它们才会被初始化。此后,静态对象不会再次被初始。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: