我今天又拾起一个知识点:::
1.初始化的创建:
p = new Person(){{age = 10;name = "张三";}}
这里可以针对没相应构造函数,但又要赋值,注意是双括号!!!!!
2.初始化分类:
初始化分为两种:
1.实例初始化(Inatance Initializers)
用法是 {语句}
2.静态初始化(static Initializers)
用法是static{语句}
在第一次使用这个类时就要执行
但可以肯定的是:静态初始化总要先于实例初始化执行
今天我看到我之前写的一个代码:;
public class InitialTest {
public static void main(String[] args) {
new InitialTest2(6);
}
int n = 10;
{
n++;
System.out.println(n);
}
static int x;
static {
x++;
System.out.println(x);
}
}
class InitialTest2 extends InitialTest {
InitialTest2(int a)
{
this.a = a;
System.out.println(a);
}
int a;
{
System.out.println(this.a);
}
static
{
x++;
System.out.println(x);
}
}
这个代码没有错,可是当我运行结果时,我突然忘了,为什么是这个结果
思索半天,想起来了这个知识点:
静态初始化总要先于实例初始化执行!!!!!
这也就是为什么结果是
1
2
11
0
6
了。
首先,
int n;
{
//语句
}
是实例初始化。而
static
{
//语句
}
是静态实例化。所以优先执行static{语句}
执行完static,然后执行其他
看代码:::
class InitialTest
{
public static void main(String[] args)
{
new InitialTest2(6);
}
int n=10; //step2
{
n++;
System.out.println("InitialTest..."+n);
}
static int x;
static
{
x++;
System.out.println("static..." +x);
}
}
class InitialTest2 extends InitialTest{
InitialTest2(int a){
this.a=a;
System.out.println("this.a=" + a );
}
int a;
{
System.out.println("InitialTest2..."+this.a);
}
static
{
x++;
System.out.println("static2..." +x);
}
}
在看结果::
知识点一定要记住!!!!!