public class TextStatic{
static Y1 y1 = new Y1();
//Y1 y2 = new Y1();
public static void main(String[] args){
}
}
class Y1{
Y1(){
System.out.println("a");
}
}如果注释了那句加上static,运行就会输出2个 a;不加只有个a。
就是这里不加static,这句运行吗?解释下!
static Y1 y1 = new Y1();
//Y1 y2 = new Y1();
public static void main(String[] args){
}
}
class Y1{
Y1(){
System.out.println("a");
}
}如果注释了那句加上static,运行就会输出2个 a;不加只有个a。
就是这里不加static,这句运行吗?解释下!
一个是静态的,在类加载(即在构造方法调用之前初始化)的时候运行了一次打印出一个a
另一个是在你new对象的时候打印的a
不知道这样解释你明白不 总之就是有static的方法当类被加载的时候就会执行,楼主说的不加static 的那句是不运行的
private static A a = new A(); private A a = new A();
}class A {
public A() {
System.out.println("a");
}
}public class Test {
public static void main(String[] args) {
B b1 = new B(); //第一次装载类B,static执行.所以输出两次a
B b2 = new B(); //不是第一次装载类B,static不执行,所以输出一次a
//总共是输出三次a,这样你应该可以看到过程了吧,一个类第一次被调用的时候,static被加载到内存中的代码区,以后的调用过程中,该类的static不再执行
}
}
非static的,当你创建一个新的对象的时候会进行初始化,这种直接的定义初始化会在构造方法里面的语句之前来执行。
我理解是,Y1 y2 = new Y1(); 在栈中创建y2,在堆创建new TextStatic();
当只有在main方法调用new TextStatic();才执行构造方法。
不知道是不是理解正确?