用static修饰变量或者方法,实际上指定了这些变量或者方法在内存中的位置是固定的,表示了内存的共享,每个对象的实例都指向同一个地址.
对于static的东西, jvm 在加载类时(没有实例化之前),就为这些东西在内存中开辟了空间
1. static 成员变量(基本类型变量和类变量)
2. static方法, 在这种方法中,只能访问其它static成员变量或者方法,不能访问非静态的成员或者方法,因为这时候类还没有被实例化
[code]
public class test {
private int a=1;
public static void main(String[] args) {
System.out.println("a="+String.valueOf(a));
}
}
[/code]
[color=red]Cannot make a static reference to the non-static field a[/color]
但可以在静态方法中访问静态成员变量或者方法
[code]
public class test {
private static int a;
public static void main(String[] args) {
a=1;
System.out.println("a="+String.valueOf(a));
}
}
[/code]
3. static 代码块
[code]
public class test{
public static int i;
public int a;
public test(){
a=1;
System.out.println("a="+String.valueOf(a));
}
public static void main(String[] args){
new test();
}
static{
i=3;
System.out.println("i="+String.valueOf(i));
}
}
[/code]
i=3
a=1
静态代码在类加载时执行,先于实例方法
对于static的东西, jvm 在加载类时(没有实例化之前),就为这些东西在内存中开辟了空间
1. static 成员变量(基本类型变量和类变量)
2. static方法, 在这种方法中,只能访问其它static成员变量或者方法,不能访问非静态的成员或者方法,因为这时候类还没有被实例化
[code]
public class test {
private int a=1;
public static void main(String[] args) {
System.out.println("a="+String.valueOf(a));
}
}
[/code]
[color=red]Cannot make a static reference to the non-static field a[/color]
但可以在静态方法中访问静态成员变量或者方法
[code]
public class test {
private static int a;
public static void main(String[] args) {
a=1;
System.out.println("a="+String.valueOf(a));
}
}
[/code]
3. static 代码块
[code]
public class test{
public static int i;
public int a;
public test(){
a=1;
System.out.println("a="+String.valueOf(a));
}
public static void main(String[] args){
new test();
}
static{
i=3;
System.out.println("i="+String.valueOf(i));
}
}
[/code]
i=3
a=1
静态代码在类加载时执行,先于实例方法