首先说一下super吧,像MyThread3 一样,super(s)也就是调用了Thread 类的一个构造函数.
class MyThread3 extends Thread {
MyThread3(String s){super(s);}
public void run(){
for(int i =1;i<=10;i++){
System.out.println(getName()+": "+i);
if(i%3==0){
join();
}
}
}
}
final在类中只能定义一次,必须赋值且只能赋值一次,static可多次,如下类所示
public static void main(String[] args) {
// String temp = TQExample.s_a;
TQExample test = new TQExample();
}
}
class TQExample {
public static String s_a = "静态变量:直接赋值";
public String n_b = "非静态变量:直接赋值";
public final int nf_i;
public final String nf_s = "我是final对象,直接赋值";
static {
System.out.println(s_a);
s_a = "静态变量:静态块赋值";
}
static//静态块可以有多个。
{
System.out.println("s_a");
}
public TQExample() {
System.out.println(s_a);
System.out.println(n_b);
s_a = "静态变量:构造器赋值";
n_b = "非静态变量:构造器赋值";
nf_i = 1;//注释这行然后在外面打印它看看看看,会对java的自动赋值有一个更具体的感性认识.
// nf_s = "我是final对象,构造器赋值";//这行是错误的,建议你试试.
System.out.println(s_a);
System.out.println(n_b);
System.out.println(nf_s);
}
}
显示结果为:
静态变量:直接赋值
s_a
静态变量:静态块赋值
非静态变量:直接赋值
静态变量:构造器赋值
非静态变量:构造器赋值
我是final对象,直接赋值
static{}块中的语句是属于类的本身,不属于类中的任何方法。所以在类定义的时候就被执行开始执行。
非静态块中的变量在{ }外是不可见的!
String temp = TQExample.s_a;调用了TQExample这个类,在调用过程中执行了静态块,但没有对类进行初始化,故temp最后的值为“静态变量:静态块赋值”。