static 代码块

来源:互联网 发布:闪电侠第三季人工智能 编辑:程序博客网 时间:2024/05/22 13:13
static代码块:静态代码块的作用也是完成一些初始工作。首先执行静态代码块,然后执行构造方法。
静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行,
要想调用某个类来生成对象,首先需要将类加载到java虚拟机上,然后由JVM加载这个类来生成对象。
类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次,而构造方法则不然,每次生成一个对象的时候都会调用类的构造方法,所以new一次就会调用构造方法一次。
如果继承体系中既有静态代码块和构造方法,那么首先执行最顶层的类的静态代码块,一直执行到最底层类的静态代码块,然后再去执行最顶层类的构造方法, 一直执行到最底层类的构造方法,注意静态代码块只会执行一次。
public class StaticTest {
public static void main(String[] args) {
//P p = new P();
//P p2 = new P();
new S();
new S();
}
}
class P {
static {//静态代码块
System.out.println("P static block");
}
public P () {
System.out.println("P constructor");
}
}
class Q extends P {
static {//静态代码块
System.out.println("Q static block");
}
public Q () {
System.out.println("Q constructor");
}
}
class S extends Q {
static {//静态代码块
System.out.println("S static block");
}
public S() {
System.out.println("S constructor");
}
}




错误1
不能在一个静态方法里面访问一个非静态的成员变量(a++)。
public class StaticTest {
public static void main(String[] args) {
W.change();//
}
}
class W {
int a = 10;
public static void change() {
a++;
}
}


正确
public class StaticTest {
public static void main(String[] args) {
W.change();//
}
}
class W {
static int a = 10;
public static void change() {
a++;
}
}






正确
public class StaticTest {
public static void main(String[] args) {
W w = new W();
w.change();
}
}
class W {
static int a = 10;
public void change() {
a++;
}
}


静态的只能访问静态的
非静态的可以访问一切。


不能在静态方法中使用this 关键字。





0 0
原创粉丝点击