ホームページ >Java >&#&チュートリアル >静的変数、変数、コンストラクターの初期化とインスタンス化のプロセス

静的変数、変数、コンストラクターの初期化とインスタンス化のプロセス

php是最好的语言
php是最好的语言オリジナル
2018-07-28 11:23:161483ブラウズ

この記事では、Javaにおける静的変数、変数、コンストラクタの初期化の実行シーケンスを紹介し、クラスの初期化についての理解を深めます~ 一般に、クラスには静的変数、変数、コンストラクタ、メソッドが存在します。 (実際、コンストラクターはこれをある程度静的メソッドとして扱うことができます) これらを結合すると、次のクラスが形成されます:

class Art{
static String ar1,ar2,ar3;
static{
ar1 = "良い";
ar2 = "完璧";
ar3 = "美しい";
System.out.println(ar1);
System.out.println(ar2);
System.out.println(ar3);
) システム.out.println(art2 );
System.out.println(art3);
}
Art(){
System.out.println("Art コンストラクター...");
}
}

皆さんと同じようにプロジェクトの開発プロセスでは、Java の主要な機能である継承をよく使用します。したがって、Art を基底クラスとして理解し、それを継承する多数のサブクラスがあるため、別のサブクラスを取得します。 Drawing

class Drawing extends Art{
static String dra1,dra2,dra3;
static{
dra1 = "window ";

dra2 = "フレイ";

dra3 = "flool";

System.out.println(dra1);

System.out.println(dra2);
System.out.println(dra3);
}
文字列cc1,cc2,cc3;
System.out.println(cc2 ); out.println (CC3);
}
drawing () {
System.Out.println ("描画コンストラクター ..."); Drawing クラス Cartoon の別のサブクラスを作成します
public class Cartoon extends Drawing{
static String car1,car2,car3;
static{
car1 = "one";
car2 = "two";
car3 = "three ";
System .out.println(car1);
System.out.println(car2);
System.out.println(car3);
}
文字列 info1,info2,info3;
{
info1 = "info1" ;
info2 = "info2";
info3 = ""info3";

System.out.println(info1);

public static void main(String[] args) {
使用する 使用する 使用する アウト アウト アウト スルーアウト スルー アウト スルーアウト スルーアウト スルーアウト スルーアウト‐ ‐ void main(String[] args)

Cartoon クラスで、Cartoon をインスタンス化します。変数とコンストラクターがどのようにインスタンス化されるかを段階的に分析してみましょう。
メイン関数
new Cartoon() が表示されると、JVM は Cartoon クラスを探します。ただし、Drawing クラスはキーワード extends に基づいて見つかりました。次に、彼は Art クラスを見つけたので、それを探しました。 Art クラスでは extends キーワードが見つからないため、JVM は独自のルールに従ってさらに検索します。extends が使用されていない場合、Java はデフォルトで基本クラスの Object クラスを追加します。検索は完了しています。このとき、JVM は static キーワードを持つ静的変数を検索しますが、Object クラスでは static キーワードを持つ静的変数が見つからないため、JVM はダウンして Art クラスに移動します。 , static を持つ変数ブロックが見つかり、これらの変数がメモリブロック(スタック)に割り当てられ、対応する値が代入されます
static String ar1,ar2,ar3;
static{
ar1 = "good" ;
ar2 = "完璧な";
ar3 = "美しい";
System.out.println(ar1);
System.out.println(ar2);
System.out.println(ar3);
}

その後、JVM はパスに到達し、Drawing クラスに到達すると、静的キーワード

static String dra1,dra2,dra3;

static{
dra1 = "window";
dra2 = "flay" ;
dra3 = "flool" を持つ静的変数ブロックが見つかりました。 ;
} System.out.println(dra1);
System.out.println(dra2);
System.out.println(dra3);
}

ここまで来ると、JVM は次のことを行います。 Art クラスで行うこと。変数値をメモリ (スタック) に割り当て、System.out.print() メソッドを実行して値を出力し、さらに下に進んで Cartoon クラスでそれを見つけます。行うことは、Drawing クラスで行うことと同じです。静的キーワードの静的変数をメモリ (スタック) に代入して出力します。

static String car1,car2,car3;
static{

car1 = "one";

car2 = "two";
car3 = "three";
System.out.println(car1);
System.out.println (car2);
System.out.println(car3);
}

JVM がこのアクションを完了した後、2 番目のステップとしてオブジェクトをインスタンス化するアクションの実行が開始され、JVM は

から上位に移動し始めます。 Cartoon ——> Drawing——> Art ——> オブジェクト

まず Object クラスで変数をインスタンス化し、オブジェクトのコンストラクター関数を実行します

実行が完了したら、Art クラスに沿って実行しますArt クラスで、変数ブロックを

String art1,art2,art3;
{
art1 = "art1";
art2 = "art2";
System.out.println (art2);
System.out.println( art3);
}

ヒープに値を代入し、print ステートメントを実行し、Art クラスのコンストラクター メソッドを実行します。コンストラクター メソッドが実行された後、引き続き実行します。Drawing クラスでは、次のことがわかりました。 Drawing クラスには次の変数があります: String cc1,cc2,cc3;
{
cc1 = "aaa";
cc2 = "bbb";

cc3 = "ccc";

System.out。 System.out.println(cc2);
System.out.println(cc3);
}

JVM はメモリ ヒープ内のこれらの変数を初期化します。基本型があり、値が割り当てられていないことが判明した場合は、デフォルト値が割り当てられます。他の型に値が割り当てられていない場合は、その変数が割り当てられます。デフォルト値 null の場合、JVM は Drawing クラスのコンストラクターを実行します。その後、JVM はダウンを続けて Cartoon クラスに到達し、繰り返されるアクションを実行します
変数をインスタンス化します
String info1,info2,info3;
{
Info1 = "info1";
info2 = "info2";
info3 = " info3";
System.out.println(info1);
System.out.println(info2);
System.out.println(info3);
}

それをヒープメモリ上に割り当てて、対応する Print を転送しますプログラム全体を以下に示します。その後、プログラムを再度実行して、理解した内容がプログラムの結果と一致しているかどうかを確認します。



class Art extends Object{

static String ar1,ar2,ar3;

static{
ar1 = "良い";
ar2 = "完璧";
ar3 = "美しい";
System.out.println(ar1) ;
System .out.println (ar2); art3 = "art3" ;
System.out.println(art1);
System.out.println(art2) .");
}
}

class Art{
static String dra1,dra2,dra3;
static{
dra1 = "窓";
dra2 = "フレイ";
dra3 = "床";
System .out.println(dra1);
System.out. println(dra2);
System.out.println(dra3);
}
String cc1,cc2,cc3;
{

cc1 = "aaa";

cc2 = "bbb";
システム.out.println (CC1);
System.out.println (CC2);
Systemm .out.println("描画コンストラクター...");
} }

public class Cartoon extends Drawing{
static String car1,car2,car3;
static{
car1 = "one";
car2 = "two ";
car3 = "three";
System.out.println(car1 );
System.out.println(car2);
{
info1 = "info1";
info2 = ""info2";
info3 = " "info3" out.println(info3 );
}
public static void main (String[] args) {
Cartoon Cartoon = new Cartoon();
}
}

以下にプログラムの実行結果を投稿します

良い
完璧
美しい

フレイ

1
2
3
art1
art2
art3
アートコンストラクター...
aaa
bbb
ccc
描画コンストラクター...
info1
info2
info3

関連記事:

Javaにおける静的変数の初期化を完全解析

Javaクラスの静的メンバー、静的コードブロック、通常メンバー、通常コードブロック、コンストラクターメソッドの初期化実行順序を詳しく解説

関連ビデオ:

静的変数とメンバー変数の違い - JAVA 初心者向けビデオチュートリアル

以上が静的変数、変数、コンストラクターの初期化とインスタンス化のプロセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。