构造方法是用来创建一个新的对象的,与new组合在一起用,使用new+构造方法创建一个新的对象。你new一个东西的时候,实际上你调用的是一个构造方法,构造方法就是把自己构造成一个新的对象,所以叫构造方法,构造一个新对象用的方法叫构造方法。
构造方法比较特殊,构造方法的名字必须和类的名字完全一模一样,包括大小写,并且没有返回值。如原来定义的一个person类,在类里面声明了两个成员变量id与age,这时候你可以再为这个person类定义一个它的构造方法person(int n,int i),这个方法的名字和类名完全相同,并且没有返回值,也就是在这个方法前面不能写任何的方法的返回类型修饰符,连void都不可以写。
构造方法范例:
1 public class Person {
2 int id; //在person这类里面定义两个成员变量id和age,
3 int age=20; //给成员变量age赋了初值为20
4
5 /**这里就是person这个类的一个构造方法
6 * 构造方法的规则很简单,和类名要完全一样,一点都不能错,包括大小写。
7 * 并且没有返回值,不能写void在它前面修饰
8 * @param _id
9 * @param _age
10 */
11 public Person(int _id,int _age ) {
12 id = _id;
13 age = _age;
14 }
15 }
构造方法写好后就和new组合在一起使用,new的作用是构建一个新对象,创造一个新对象,所以new的时候实际当中调用的是构造方法。只有调用了这个构造方法才能构造出一个新的对象。例如:
1 public static void main(String[] args) {
2 Person tom = new Person(1, 25); // 调用person这个构造方法创建一个新的对象,并给这个对象的成员变量赋初始值
3 }
下面是在main方法里面调用person构造方法时的内存分析情况:
当方法调用完成之后,栈里面为它分配的空间全部都要消失,即把这个方法调用时分配给它的内存空间释放出来,所以这个构造方法person调用完成之后,栈内存里面分配的两小块内存_id和_age自动消失了。这样就把它们所占的空间让了出来,让其他的方法去占用。而new出来的对象则永远留在了堆内存里面。
声明一个类,若没有在类中指定其构造方法(构造函数)时,编译器会为这个类自动添加形如类名( ){ }的构造函数。
如:
1 class point{//这里声明一个类时并没有给它指定其构造方法。
2 int x;
3 int y;
4 }
但在main方法里面我们却可以这样使用:
1 public static void main(String[] args){
2 point p = new point();
3 }
这里这样写是可以的,当没有给这个类指明构造方法时,系统会默认地给这个类加上point ( ) { }这样一个空的构造方法。所以才可以在main方法中使用
point p = new point(); 实际上你调用的就是编译器默认给它加上的point ( ) { }这个构造方法,在这个构造方法当中,默认地把类里面的成员变量x和y初始值设为0。正是因为系统给它默认加上这么一个构造方法,所以才能在main方法里面调用。但要记住一点,一旦给这个类里面指定了构造方法,那么系统就不会再给这个类添加构造方法了。
|
|