“Thinking in Java”有这样一个问题,说在类里面进行初始化和在构造函数里进行初始化有何不同我想不出,大家来说说看。
class init{
String s = "abc";
init(){String ss ="123";}
public static void main(String [] args){
init in = new init();
}
}
class init{
String s = "abc";
init(){String ss ="123";}
public static void main(String [] args){
init in = new init();
}
}
//String s = "abc"; //s在声明时初始化 init() { s = "abc"; } public static void main(String [] args) {
init in = new init();
}}两种方法只是顺序不同, 没有什么本质的区别啊.
String s = "abc";//先初始化
init(){String ss ="123";}//后初始化
public static void main(String [] args){
init in = new init();
}
}
可以验证一下你的说法吗!?
init(){String ss ="123";}//后初始化s 是类的成员变量,而 ss 不是。
APPLET的?
----------------
class fun{
public fun(){
System.out.println("It's fun here!");
}
}
public class test{
fun f = new fun();//f作为实例变量先初始化,即先调用它的构造函数
public test(){
System.out.println("It's test here!");
}
public static void main(String [] args){
test t=new test();
}
}
------------------------
在这里还要注意static变量、方法的初始化问题。另外,那句“创建了一个已经初始化的局部变量"??ambiguous words!!
ABC(int n){System.out.println("ABC"+n);}
}class init{
ABC i1 = new ABC(11);
init(){
System.out.println("init");
ABC i2 = new ABC(22);
}
ABC i3 = new ABC(33);
public void pushout(){
System.out.println("pushout");
ABC i4 = new ABC(44);
}
ABC i5 = new ABC(55); public static void main(String [] args){
init in = new init();
in.pushout();
}
}输出结果为:
ABC11
ABC33
ABC55
init
ABC22
pushout
ABC44由此可知,在类里面进行的变量初始化要先于在方法(包括构造函数)中进行的变量初始化。