大家都知道,static修饰的变量在类实例之前就已经分配内存,
昨天去某公司面试,突然遇到此问题,心里有些发虚,回来测试了一下
public class StaticTest {
public static byte a1;
public static short a2;
public static int a3;
public static long a4;
public static char b;
public static double c;
public static float d;
public static boolean e;
public static String f;
public static Object g;
public static int[] a_h;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("static byte a1------"+a1);
System.out.println("static short a2-----"+a2);
System.out.println("static int a3-------"+a3);
System.out.println("static long a4------"+a4);
System.out.println("sstatic char b------"+b);
System.out.println("static double c-----"+c);
System.out.println("sstatic float d-----"+d);
System.out.println("static boolean e----"+e);
System.out.println("static String f-----"+f);
System.out.println("static Object g-----"+g);
System.out.println("static int[] a_h-----"+a_h);
}
}
打印结果为:
static byte a1------0
static short a2-----0
static int a3-------0
static long a4------0
sstatic char b------
static double c-----0.0
sstatic float d-----0.0
static boolean e----false
static String f-----null
static Object g-----null
static int[] a_h-----null
若变量前无static修饰,并且没有对变量进行初始化,例如:
public class noStaticTest {
public byte a1=1;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("static byte a1------"+a1);
}
}
编译器会编译不通过:Cannot make a static reference to the non-static field a1