public class test {
public static void main(String[]args){
T t1 = new T();
T t2 = new T();
System.out.println("t1's = "+t1.i+" and j = "+t1.j);
System.out.println("t2's = "+t2.i+" and j = "+t2.j);
}
}
class T{
static int i=0;
int j=0;
T(){
i++;
j++;
}
}
public static void main(String[]args){
T t1 = new T();
T t2 = new T();
System.out.println("t1's = "+t1.i+" and j = "+t1.j);
System.out.println("t2's = "+t2.i+" and j = "+t2.j);
}
}
class T{
static int i=0;
int j=0;
T(){
i++;
j++;
}
}
1,0static定义的变量是长住内存的,有储存功能,我手机上的,新手上路,各位见笑了
初始化时机不一样:static 是在类加载时初始化的,没 static 是在对象产生时初始化的。
t1's = 2 and j = 1
t2's = 2 and j = 1
这个i是类的变量,所以它的值每次都会变。
int j=0;
是实例的变量,不产生一个新实例,都是从0开始。
t1's = 2 and j = 1
t2's = 2 and j = 1静态变量每次类加载时自动调用,并且这个值是不会变的,也就是说每次你调用构造函数的时候它都会加1,只要程序不结束,它的值就不会变,那么下一次你调用构造函数的时候(也就是创建类时),它的值是1然后再加1,就变2了。而非静态变量每次类加载时都会初始化(也就是每次都执行int j=0),然后再执行构造函数(加1),所以没重新创建类它都是1(即0+1)
t2's = 2 and j = 1static 只有一份。生命周期提前。
t2's = 2 and j = 1
恩,仔细一点就是这样了
t2's = 2 and j = 1static 是类变量,类的所有对象共有的变量。当其中一个对象改变类变量,其他对象访问到的是改变后的泪变量。而lz题中的j是对象的变量,是每个对象自己拥有的变量。没在对象间共享。
不专业,但很通俗。
t2's = 2 and j = 1
t1's = 2 and j = 1
t2's = 2 and j = 1
当每次你调用构造函数的时候它都会加1,只要程序不结束,它的值就不会变,那么下一次你调用构造函数的时候(也就是创建类时),它的值是1然后再加1,就变2了。而非静态变量每次类加载时都会初始化(也就是每次都执行int j=0),然后再执行构造函数(加1),所以没重新创建类它都是1(即0+1)
static 是作用整个类的。
t2's = 2 and j = 1可以理解i是公用的一个变量,
而j是成员变量,根据实例的不同开辟了不同的空间。
第二个输出是2和1以为i是static。
t2's = 2 and j = 1
static的值由最终的那个值是什么就是什么,因为调用了两次,所有i加了两次,最终为2, 所有的i此时都为2
二j,不是静态的,所以,第一次调用j=0,加1后为1;第二次,j又归为0后,又J++所以还是1;
2 1两次构造以后 static 变量是共用的,已经是2了。
非static是对象内部使用的,所以都是1。
这种问题还是有用的,是基本功,不能忽略。