Static关键字 :一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一 起。所以尽管从未创建那个类的一个对象,仍能调用一个 static方法,或访问一些 static数据
public class TestSomething {
static int i=30;
public static void main(String [] args) {
System.out.print(TestSomething.i);//直接调用static 声明的成员
}
"别名现象":
class Number{
int i;
}
public static void main(String [] args) {
Number n1 = new Number();
Number n2 = new Number();
n1.i = 9;
n2.i = 47;
System.out.println(n1.i);//这个时候N1=9
System.out.println(n2.i);//N2=47;
n1 = n2;
n2.i = 15;//改变了N2的值N1也跟着改变了
System.out.println(n1.i);// 都是为15
System.out.println(n2.i);// 都是为15
这是由于无论n1 还是n2都包含了相同的句柄,它指向相同的对象(最初 的句柄位于 n1内部,指向容纳了值9 的一个对象。在赋值过程中,那个句柄实际已经丢失;它的对象会由 “垃圾收集器”自动清除)。
将一个对象传递到方法内部时,也会产生别名现象
class Letter{
char c;
}
public class TestSomething {
static void f(Letter y)
{
y.c = 'z';
}
Letter x = new Letter();
x.c ='a';
System.out.println("1:x.c: "+x.c);//x.c=a
f(x);//这个方法传递了一个Letter的对像结果X实例的值也跟着改变了
System.out.println("2:x.c: "+x.c);//x.c=z