public class TestConstructor {
public static void main(String args[]){ Constructor c = new Contructor(1);
System.out.println(c.j+"/"+c.i);
}
}
class Constructor{
int i;
int j; public Constructor(int i){ }
}
//输出结果:0/0
-------------------------------------------------------------------
问题:《JAVA核心技术》里面说“仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器”,所以我提供了一个带参数的构造器,系统应该不给我提供默认的了。但是我并没有在自己写的构造器里面给域赋值,那么输出结果中的“0/0”是哪来的?
public static void main(String args[]){ Constructor c = new Contructor(1);
System.out.println(c.j+"/"+c.i);
}
}
class Constructor{
int i;
int j; public Constructor(int i){ }
}
//输出结果:0/0
-------------------------------------------------------------------
问题:《JAVA核心技术》里面说“仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器”,所以我提供了一个带参数的构造器,系统应该不给我提供默认的了。但是我并没有在自己写的构造器里面给域赋值,那么输出结果中的“0/0”是哪来的?
(2)使用默认值哈。
int j;public Constructor(int i){}
}首先他会先初始化各个字段然后再调用构造方法。相当于每个字段都初始化了2遍因为你写的是
int i;
int j;
他就帮你默认初始化成0了。
这个构造方法,但你的构造方法里没有对i和j做任何初始化。因此System.out.println(c.j+"/"+c.i);就输出0/0
//按默认情况 i,j,默认情况是 0,0//貌似,楼主的 Constructor c = new Constructor(1); //这个单词写错了//如果:
public Constructor(int i){
this.i = i ; //这样的话结果就不同了, }
我也在学,借LZ贴一用。这里的
Constructor c = new Constructor(1);
和
new Contructor(1);
有何区别?为何构造器要这样写呢?
new Constructor(1);实例化了一个新的对象,这个对象没有被引用,但却存在。(没有以用会被自动回收)
Constructor c = new Constructor(1);
用c来引用了这个新的实例化对象。他俩的区别就是一个你可以使用,另外一个你用不了
可见在调用构造方法之前,成员变量就已经被初始化,而且是按照用户给的值进行初始化的,如果没给就按默认(0、null那些……)LS有几个兄弟说的挺好,大家可以参考3L还有http://topic.csdn.net/u/20111125/17/d7ea8861-9655-4de9-93da-05a134c61d78.html
System.out.println(c.j+"/"+c.i);
}
}
class Constructor{int i;
int j;public Constructor(int i){
System.out.println(i=2);}
}构造器是不会返回任何值的,所以无论你的i怎么变都将是Constructor类的定义值。
再试试,8L提供的方法。
但在主程序里面打印的是i=0.
我的理解是,构造器初始化了i=1,但没有返回到主程序里面去。令人不解。
话说这是构造器初始化的么?为何有的能初始化,有的却不能呢?
如,
class Constructor{int i;
int j;public Constructor(){i=1;//这样就可以初始化i=1了。
int i=1;//为何这样就不能了呢?}
}
这句话是绝对true的