Javaインフラストラクチャオブジェクト初期化変数の順序の概要
2804 ワード
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
A b = new B(8);
System.out.println(A.aa + " " + B.bb);
}
}
class A {
int a = f();
static int aa = sf();
static {
aa = 11;
System.out.println("A kuai static " + aa);
}
{
aa = 111;
a = 1;
System.out.println("A kuai " + a);
}
A() {
System.out.println("A constract begin. " + a);
}
A(int r) {
System.out.println("A constract begin. " + a);
}
int f() {
System.out.println("A kuai f");
return 2;
}
static int sf() {
System.out.println("A kuai sf");
return 22;
}
}
class B extends A {
static int bb = sfun();
int b = fun();
static {
bb = 44;
System.out.println("B kuai static " + bb);
}
{
b = 4;
System.out.println("B kuai " + b);
}
B() {
System.out.println("B constract begin. " + b);
}
B(int r) {
System.out.println("B constract begin." + b);
}
int fun() {
System.out.println("B kuai fun");
return 3;
}
static int sfun() {
System.out.println("B kuai sfun");
return 33;
}
}
/*
A kuai sf
A kuai static 11
B kuai sfun
B kuai static 44
A kuai f
A kuai 1
A constract begin. 1
B kuai fun
B kuai 4
B constract begin.4
111 44
*/
初期化順序:
親の静的変数、子の静的変数、親のインスタンス変数、親の構築方法、子のインスタンス変数、子の構築方法
静的変数の初期化:
1).定義時、2)静的ブロック;初期化順序は、コード内の順序で初期化されます.
インスタンス変数の初期化:
1).定義時、2)静的ブロック,3).構造方法
ここで1,2は3)より先に実行され,1,2についてはコード中の順序で実行される.
いずれも先に定義し、メモリを開き、初期値(null,0など)を付与し、最後に付与文に従って付与し、最終的な値です.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
System.out.println(A.sf());
}
}
class A {
static A Aa = new A(2);
static int aa = 11;
int a = 1;
static {
System.out.println("static " + aa);
}
{
System.out.println("A kuai " + a);
}
A() {
sf();
System.out.println("A constract begin. " + a + " " + aa + " " + " "
+ sf());
}
A(int r) {
sf();
System.out.println("A constract begin. " + a + " " + aa + " " + " "
+ sf());
}
int f() {
System.out.println("A kuai f " + a);
return a;
}
static int sf() {
System.out.println("A kuai sf " + aa);
return aa;
}
}
/*
A kuai 1
A kuai sf 0
A kuai sf 0
A constract begin. 1 0 0
static 11
A kuai sf 11
11
*/
A kuai 1
どうして出力するの?なぜ静的変数は0なのか、インスタンス変数には値があるのか.
これで上の説明と矛盾しているのではないでしょうか.わからない?通りすがりの大牛に指導してもらいます!ありがとう!