1、用构造器确保初始化

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

        如何命名构造器方法?

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

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

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

1. public class Demo {

2.     Demo() {

3.         System.out.println("test");
4.     }
5. }

        在创建对象时,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以编译时错误的形式来贯彻这种保证。

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

1.             boolean    false
2.             char           []
3.             byte           0
4.             short          0
5.             int              0
6.             long           0
7.             float           0.0
8.             double       0.0

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

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

        静态初始化只在必要时刻才会进行,只有在第一个对象被创建(或者第一次访问静态数据)的时候,它们才会被初始化。此后,静态对象不会再次被初始。