黑马程序员技术交流社区
标题:
构造方法的调用问题
[打印本页]
作者:
m529031854
时间:
2014-5-30 11:52
标题:
构造方法的调用问题
package com.zhujl.test1.zhujl;
public class MethodOverload {
public static void main(String[] args) {
MethodDemo1 md = new MethodDemo1();
}
}
class MethodDemo1{
String name;
String age;
public MethodDemo1(){
System.out.println(1);
}
public MethodDemo1(String name,String age){
this();//调用指定的构造方法
this.name=name;
this.age=age;
System.out.println(2);
}
public MethodDemo1(String name){
this(name,age);//调用指定的构造方法(此处是错的,报错:不能引用实例字段的年龄而显式调用构造函数)
this.name=name;
this.age=age;
System.out.println(3);
}
/*问题:
* 如果想在一个构造方法中
调用另外一个构造方法,那么可以使用 this()的方式调用,this()
括号中的参数表示目标构造方法的参数。this()必须要作为构
造方法的第一条语句,换句话说,this()之前不能有任何可执
行的代码
* 一 为什么我那样调用行呢?
* 二 把全局变量 改成静态的 就可以啦 为什么?
*
*/
}
复制代码
谢谢!!!
作者:
More
时间:
2014-5-30 12:28
构造函数的第一句话默认是super();也就是默认调用父类的无参数构造器,你这个这样调用到底想实现什么??
作者:
饥渴ing
时间:
2014-5-30 13:30
类变量是类加载时就存在栈中的所以构造方法可以调用,而成员变量是new后才存在堆中的。你都没存在怎么可能让你使用
作者:
不似侽紸角.
时间:
2014-5-30 15:56
public MethodDemo1(String name){ /*注意,这里你的构造方法中并没有age这个变量,所以没办法给给age初始化,所以会报错,因为如果 你创建了这个对象 MethodDemo1 md = new MethodDemo1("张三");age是没有值,更别说调用了。但静态会现在加载进内存就可以*/
23.
24. this(name,age);//调用指定的构造方法(此处是错的,报错:不能引用实例字段的年龄而显式调用构造函数)
25. this.name=name;
26. this.age=age;
27. System.out.println(3);
作者:
田富丰
时间:
2014-5-30 23:31
public MethodDemo1(String name){
this(name,age);//这个age是对象的,当你用这个构造时,这个对象没有对age进行初始化,
//所以程序不知道你这个age是什么?你把这个age变成static,这个age就是类的成员了,所以没问题!!不过不知道你这为什么要调用这个双参的构造方法!!
this.name=name;
this.age=age;
System.out.println(3);
}
复制代码
作者:
hamiguadjs
时间:
2014-5-31 01:23
在创建对象的时候,会调用构造方法,而方法是在对象调用的时候才会在内存中,调用完成后,方法就会释放,而创建的对象的成员变量存放在堆中,两者的生命周期不同,所以声明是static,就会使得成员变量的声明周期加长,从而使得方法能正常的使用。
作者:
提菩--空
时间:
2014-5-31 02:02
public MethodDemo1(String name){
this(name,age);//调用指定的构造方法(此处是错的,报错:不能引用实例字段的年龄而显式调用构造函数)
this.name=name;
this.age=age;
System.out.println(3);
}
只是当把age变成静态后,静态的age会先于public MethodDemo1(String name)构造函数运行,静态变量优先于构造方法初始化,和声明周期长短没有关系。所以当程序新建一个只带name参数的对象调用public MethodDemo1(String name)构造函数时,this(name,age)中的age已先初始过了,就会顺利执行下去。而不声明为static,因为age没有初始化就会报错。自己的一点见解,供楼主参考。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2