Androidシステム復習面接シリーズ(二)反射原理とAndroidクラスロードコア
1769 ワード
Androidシステム復習面接シリーズ(二)反射原理とAndroidクラスロードコア
はんしゃ
反射とは
実行状態において、いずれのクラスに対しても、そのクラスのすべての属性とメソッドを知ることができ、いずれのオブジェクトに対しても、そのいずれかのメソッドを呼び出すことができることを指す.このような動的取得情報と,動的呼び出しオブジェクトメソッドの機能をJava言語の反射メカニズムと呼ぶ.
反射のメリットとデメリット
利点:オブジェクトを動的に作成でき、Javaの柔軟性と欠点を向上させる:パフォーマンスの問題を引き起こす
反射がパフォーマンスに問題をもたらす理由
コンパイラはあなたのコードを最適化できません.それはあなたが何をしたいのか本当に理解できないからです.
はんしゃのげんり
クラス
Classクラスは、コンストラクタ(Constructor)、プロパティ(Field)、メソッド(Method)など、オブジェクトが属するクラスの情報を保存します.クラスのClassオブジェクトを使用すると、目的のプロパティを取得したり、指定したメソッドを呼び出したりすることができます.
Classオブジェクトを取得する方法
入念に選んだ面接問題1、反射の原理 2、反射の長所と短所及びなぜ ダイナミックエージェント
実行中、java反射メカニズムにより、被エージェントクラスのすべてのインタフェースを取得し、エージェントクラスを作成します.
この記事をご覧ください.https://www.jianshu.com/u/736d9715d446
Androidクラスのロードメカニズム
クラスをロードする方法
両親委託モデル
クラス・ローダによってandroidは親委任モデルを採用し、クラス・ローダがClassローダのリクエストを受信した場合、まず自分でこのClassをロードしようとするのではなく、親ローダにリクエストを依頼して完了し、順番に上に進みます.したがって、すべてのクラス・ロード要求は最終的に最上位レベルの起動クラス・ローダに渡されるべきであり、親ローダが検索範囲で必要なClassが見つからない場合、つまりロードが完了しない場合にのみ、サブローダは自分でクラスをロードしようとします.
クラス・ロード・プロシージャ
クラス・ロードには、ロード、接続、初期化の3つのステップがあります.接続は、検証、準備、解析の3つのステップで構成されています.
Androidのクラスローダ
Androidには2つの主要なクラスローダPathClassLoaderとDexClassLoaderがあります.違いはコンストラクション関数です.DexClassLoaderはコンストラクション時にコンパイラによって最適化されたdex格納パスを転送できますが、PathClassLoaderはBaseDexClassLoaderにnullを転送し、システムのデフォルトパスを使用しているので、外部のクラスファイルをロードしたいと思っています.DexClassLoaderのみ使用できます.
また入念に選んだ面接問題1、クラスロードのプロセス、変数初期化はどのステップ であるか.2、PathClassLoaderとDexClassLoaderの違い
はんしゃ
反射とは
実行状態において、いずれのクラスに対しても、そのクラスのすべての属性とメソッドを知ることができ、いずれのオブジェクトに対しても、そのいずれかのメソッドを呼び出すことができることを指す.このような動的取得情報と,動的呼び出しオブジェクトメソッドの機能をJava言語の反射メカニズムと呼ぶ.
反射のメリットとデメリット
利点:オブジェクトを動的に作成でき、Javaの柔軟性と欠点を向上させる:パフォーマンスの問題を引き起こす
反射がパフォーマンスに問題をもたらす理由
コンパイラはあなたのコードを最適化できません.それはあなたが何をしたいのか本当に理解できないからです.
はんしゃのげんり
クラス
Classクラスは、コンストラクタ(Constructor)、プロパティ(Field)、メソッド(Method)など、オブジェクトが属するクラスの情報を保存します.クラスのClassオブジェクトを使用すると、目的のプロパティを取得したり、指定したメソッドを呼び出したりすることができます.
Classオブジェクトを取得する方法
Person person = new Person();
//1、 Object getClass() :( )
Class clazz1 = person.getClass();
//2、 :( )
Class clazz2 = person.class;
//3、 :( )
Class clazz3 = Class.forName("com.xx.Person");
入念に選んだ面接問題
実行中、java反射メカニズムにより、被エージェントクラスのすべてのインタフェースを取得し、エージェントクラスを作成します.
この記事をご覧ください.https://www.jianshu.com/u/736d9715d446
Androidクラスのロードメカニズム
クラスをロードする方法
両親委託モデル
クラス・ローダによってandroidは親委任モデルを採用し、クラス・ローダがClassローダのリクエストを受信した場合、まず自分でこのClassをロードしようとするのではなく、親ローダにリクエストを依頼して完了し、順番に上に進みます.したがって、すべてのクラス・ロード要求は最終的に最上位レベルの起動クラス・ローダに渡されるべきであり、親ローダが検索範囲で必要なClassが見つからない場合、つまりロードが完了しない場合にのみ、サブローダは自分でクラスをロードしようとします.
クラス・ロード・プロシージャ
クラス・ロードには、ロード、接続、初期化の3つのステップがあります.接続は、検証、準備、解析の3つのステップで構成されています.
Androidのクラスローダ
Androidには2つの主要なクラスローダPathClassLoaderとDexClassLoaderがあります.違いはコンストラクション関数です.DexClassLoaderはコンストラクション時にコンパイラによって最適化されたdex格納パスを転送できますが、PathClassLoaderはBaseDexClassLoaderにnullを転送し、システムのデフォルトパスを使用しているので、外部のクラスファイルをロードしたいと思っています.DexClassLoaderのみ使用できます.
また入念に選んだ面接問題