构造器是创建类的根本途径,如果一个类没有构造器,这个类通常将无法创造实例。正因为如此,Java 语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器。一旦程序员为一个类提供了构造器,系统将不再为该类提供默认构造器。
构造器是一个特殊的方法,值得指出的是,构造器不能定义返回值类型声明,也不能使用 void 定义构造器没有返回值。如果为构造器定义了返回值类型,或使用了 void 定义构造器没有返回值,编译时没有错,但对于 Java 来说,这就不再是一个构造器了,而是一个普通的方法。
实际上构造器是有返回值的,当我们用 new 关键字来调用构造器时,构造器返回该类的实例引用,可以把该引用当作构造器的返回值,因此构造器的返回值类型总是当前类,因此无须定义返回值类型。但是必须注意:不能在构造器里显式使用 return 来返回当前类的对象,因为构造器的返回值是隐式的。
类是一种引用数据类型。创建对象后,栈内存里的引用变量并未真正存储对象里的属性数据,对象的属性数据实际存放在堆内存里,而引用型变量仅仅只是指向该堆内存里的对象。从这个角度来看,引用型的变量与 C 语言里的指针很像,它们都是存储一个地址值,通过这个地址来引用到实际对象。实际上,Java 里的引用就是 C 里的指针。只是 Java 语言把这个指针封装起来,简化了开发而已。
当一个对象被创建成功以后,这个对象将保存在堆内存中,Java 程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。也就是说,不管是数组、还是对象,都只能通过引用来访问它们。
this 关键字是一个对象的默认引用,总是指向调用该方法的对象,只能出现在实例方法或是构造器中,不能出现在 static 方法中。比如说,我们有一个 Person 类的对象 person,使用 person.eat(); 调用该实例方法时,系统就会隐式的向 eat() 方法传递了一个 this 引用(指针),指向该 person 对象,这样,在 eat() 方法的内部就可以使用 this 引用到当前对象 person,进而调用 person 的资源。
this 可以代表任何对象,当 this 出现在某个方法体中时,它所代表的对象是不确定的,但它的类型是确定的,它所代表的对象只能是当前类;只有当这个方法被调用时,它所代表的对象才能被确定下来:谁在调用这个方法,this 就代表谁。
原文地址:http://blog.csdn.net/u011506951/article/details/41412783