用构造函数保证初始化,JAVA的对象创建和初始化是同一个概念,你不能要这个而不要那个。
方法的重载 区分经重载的方法:唯一的参数类型的列表
构造函数:如果没有构造函数,编译器会帮你创建一个无参类型的构造函数,但是如果你构造了一个,那么
不管你构造的是个啥样的,编译器都不会再帮你构造了。
this的用法:this只应用于那些,你明确指明要使用当前对象的reference的特殊情况。举例来说,他常用于
return语句以返回当前对象的reference.
/////////////////////////////////////
public class TestThis
{
int i = 0;
TestThis increment()
{
i++;
return this;
}
void print()
{
System.out.println("i="+i);
}
public static void main(String[] args)
{
TestThis x = new TestThis();
x.increment.increment.increment.print(); //i==3
}
}
/////////////////////////////////////////
编译器不会让你在方法里调用构造函数,但可以在构造函数里调用构造函数。这个时候可以使用this
来进行这种调用。
参数的名字和类的数据成员的名字相同(有时候是刻意如此),可以利用this.x来表示他是
数据成员,而非参数。
static 的用法:是不是真正的“OOP”,留给理论家吧。
垃圾回收和finalize()都是靠不住的。而且用他们的地方和时机都是个问题。不要太在意。有一点要知道
System.gc()可以强制的执行finalize();
成员的初始化:基本数据类型,如果是在方法内部定义的局部变量,则不初始化会出错,而如果是类的数据
成员,则不初始化,编译器会自动负初值。
下面是对基本创建对象做的一个总结,就用dog为例吧:
1,第一次创建dog类的对象(构造函数实际上是个static方法),或者第一次访问Dog类的static的方法或
字段的时候,java解释器会要搜寻classpath,找到Dog.class。
2,装载了Dog.class后,会对所有的static数据进行初始化。这样第一个装载class对象的时候,会先进行
static成员的初始化。
3,用new()创建新对象时,Dog对象的创建进程会先在堆里为对象分配足够的内存。
4,这快内存先被清零,这样就自动的把Dog对象的primitive类型的成员赋上缺省的值(对于数字就是零,或者相应的boolean和char),将reference设为null。
5,执行定义成员数据时所作的初始化。
6,执行构造函数。
ok,今天到这里,明天将学习到的是“隐藏实现”和“复用类”