Androidシステム復習面接シリーズ(二)反射原理とAndroidクラスロードコア

1769 ワード

Androidシステム復習面接シリーズ(二)反射原理とAndroidクラスロードコア
はんしゃ
反射とは
実行状態において、いずれのクラスに対しても、そのクラスのすべての属性とメソッドを知ることができ、いずれのオブジェクトに対しても、そのいずれかのメソッドを呼び出すことができることを指す.このような動的取得情報と,動的呼び出しオブジェクトメソッドの機能を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");

入念に選んだ面接問題
  • 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の違い