面接のこと
1361 ワード
これは坑人の面接問題で、コードを見ています.
package com.sprone.classloader1;
印刷結果は何ですか?code 1のコードをcode 2に切り取った結果は何ですか?
1、0カット後1、1
分析:クラスのロード、リンク、初期化プロセス
≪ロード|Load|emdw≫:クラスのバイナリ・データの検索とロード
リンク:検証:ロードされたクラスの正確性を確認する
準備:クラスの静的変数にメモリを割り当て、private static int a=3などのデフォルト値に初期化します.準備フェーズ割当内
メモリ設定0(intのデフォルト)
解析
質問1:対象に対応するClassはいつ発生しますか?実行時と仮定すると、JVMの効率はアリのように、JVMチームも実行時にClassオブジェクトを生成することはできません.コンパイル後です.classファイルの中ですべてコンパイルして、すべてのオブジェクトに対応してすべて1つのClassオブジェクトがあって、このClassはバイトコードファイルで解析して、私达にいくつかの生成オブジェクトのインタフェースを提供して、私达のよく使う反射コードの生成はすべてコンパイルする时に生成しました.
静的コードブロックシーケンス実行aは、準備フェーズでデフォルト値を与える.code 1を実行したときaは1である.次のコードブロックを続け、後には付与値がなく、a=1であり、bには再付与値が0である.
カット後、newの後に最終的な値が構造方法なので、いずれも1
package com.sprone.classloader1;
public class ClassLoader1 {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println("a= " + Singleton.a);
System.out.println("a= " + Singleton.b);
}
}
class Singleton {
private static Singleton singleton = new Singleton();// code1
public static int a;
public static int b = 0;
// code2
private Singleton() {
a++;
b++;
}
public static Singleton getInstance() {
return singleton;
}
}
印刷結果は何ですか?code 1のコードをcode 2に切り取った結果は何ですか?
1、0カット後1、1
分析:クラスのロード、リンク、初期化プロセス
≪ロード|Load|emdw≫:クラスのバイナリ・データの検索とロード
リンク:検証:ロードされたクラスの正確性を確認する
準備:クラスの静的変数にメモリを割り当て、private static int a=3などのデフォルト値に初期化します.準備フェーズ割当内
メモリ設定0(intのデフォルト)
解析
質問1:対象に対応するClassはいつ発生しますか?実行時と仮定すると、JVMの効率はアリのように、JVMチームも実行時にClassオブジェクトを生成することはできません.コンパイル後です.classファイルの中ですべてコンパイルして、すべてのオブジェクトに対応してすべて1つのClassオブジェクトがあって、このClassはバイトコードファイルで解析して、私达にいくつかの生成オブジェクトのインタフェースを提供して、私达のよく使う反射コードの生成はすべてコンパイルする时に生成しました.
静的コードブロックシーケンス実行aは、準備フェーズでデフォルト値を与える.code 1を実行したときaは1である.次のコードブロックを続け、後には付与値がなく、a=1であり、bには再付与値が0である.
カット後、newの後に最終的な値が構造方法なので、いずれも1