序文
今日、Android ContentSproviderの実装を見るとき、私は突然、Javaクラスの新しいプロセス中に静的ドメイン、静的ブロック、非staticブロック、非staticブロック、および建設的な機能の実行順序を考えました。実際、これは非常に古典的な問題であり、Javaの基本的な知識を把握するために非常に検討されています。面接プロセス中にそのような問題もあり、週末にそれをレビューする時間を活用していると思います。
結論は
これがすべての人への並べ替えの結論です。そして、私は結論を検証するためのプログラムを書きます。 Javaクラスが新しい場合、実行命令は次のとおりです。
継承クラスを実装する過程で、初期化の実行順序は次のとおりです。
ここでは、静的コードブロックと非スタットコードブロックを導入する必要があります。
1。静的コードブロック:
static {
}
2。非スタットコードブロック
{{
}
静的コードブロックと非スタットコードブロックの類似点と相違点は次のとおりです。
結論の検証の最良の検証は、結果を証明するためにコードを書くことです。まず、継承クラスが次のようになったときに、実行の順序を見てみましょう。
public class initodertest {public static stration static_field = "static properties"; -static Properties "; // non -static blocks {system.out.println(field); system.out.println(" non -static code block ");} public initodertest(){system.out.println);} public static void main(string [] args){initodrtest test = new initodertest();}}}実行結果:
次に、Javaクラスが継承されたときに、実行命令が結論に沿っていることを確認しましょう。テストコードは次のとおりです。
class parenttest {parunt distatic_field = "parent-static block static {parent_static_field); String ParentField =「static属性」; pareatttest(){system.out.println( "family -public class initodertests extends pareatttest {public stration static_field =" static属性 "; // static block static {system.out .println(static_field); system.out.println("静的コードブロック ");} public string field =" non -staticプロパティ "; // non -static block {system.out.println(field);system.out.pr。intln(" non -static block ")) ;} public initodertest(){system.out.println( "portomless constructor";}}実行結果は次のとおりです。