class Test{
static int i = 5;
static{ //这个static是干嘛的。 有什么用。
System.out.println("output=" + i++);
}
}public class TestStatic{
public static void main(String[] args){
System.out.println("output:i=" + Test.i);
}
}
“static方法不能访问与他本身的参数以及static变量分离的任何变量”这句话是什么意思?
static int i = 5;
static{ //这个static是干嘛的。 有什么用。
System.out.println("output=" + i++);
}
}public class TestStatic{
public static void main(String[] args){
System.out.println("output:i=" + Test.i);
}
}
“static方法不能访问与他本身的参数以及static变量分离的任何变量”这句话是什么意思?
static修饰的语句块里不能用非static修饰的变量
{
static int i = 5;
static
{
//这个static是干嘛的。 有什么用。
System.out.println("output=" + i++);
}
}
public class TestStatic
{
public static void main(String[] args)
{
System.out.println("output:i=" + Test.i);
}
}代码中标注的那个块叫做“静态初始化块”,当JVM加载该类的时候,就执行静态初始化块中的语句“static方法不能访问与他本身的参数以及static变量分离的任何变量”这句话是什么意思?因为static方法不需它所属的类的任何实例就可以被调用,因此没有this值,static方法访问非静态变量的尝试会引起编译错误
static修饰的语句块里不能用非static修饰的变量
它调用的时候可以直接用类名.X来调用,不用this!
main方法中,当线程看到打印语句中的Test.i时,此时用到了Test类,于是JVM加载Test类,Test类的静态块中语句开始执行,然后再回到刚才的打印语句中打印出来output:i=6
如果comment掉那个打印语句,整个程序中都没有用到Test类,JVM也就不会加载Test类了