Java筆記試験-2020-9-19の5つの質問

Java筆記試験-2020-9-19の5つの質問

  1. 次のどれがJavaクラスの読み込みプロセスの一部ではありませんか?

正しい答え:Bあなたの答え:A(間違っている)

生成java.lang.Class对象
int类型对象成员变量赋予默认值
执行static块代码
类方法解析

分析:

Dを選択するべきではありませんが、Bを選択する必要があります

クラスのロードには、ロード、検証、準備、分析、および初期化が含まれます。

オプションA:java.lang.Classオブジェクトはロード時に生成されます。メソッド領域でこのクラスのさまざまなデータのアクセスエントリとしてClassオブジェクトを生成します。

オプションB:オブジェクトメンバーであるため、オブジェクトがインスタンス化された後に存在する必要があります。オブジェクトメンバーではなく、クラスが読み込まれたときに初期値を与えるのはクラス変数です。

オプションC:これが呼び出されます。リフレクションでテストできます。

オプションD:クラスメソッドの解析は、解析プロセス中に発生します。

  1. 次のコードが出力されます
 public static void main (String[] args) {
    
     
    String classFile = "com.jd.". replaceAll(".", "/") + "MyClass.class";
    System.out.println(classFile);
}

正しい答え:Cあなたの答え:B(間違っている)

com. jd
com/jd/MyClass.class
///MyClass.class
com.jd.MyClass

分析:

C. replaceAllメソッドの最初のパラメータは正規表現であり、「。」は正規表現の任意の文字を表すため、前の文字列のすべての文字が「/」に置き換えられます。「。」だけを置き換えたい場合は「\。」と書いてください

  1. どちらが正しい

正解:ACD正解:ACD(正解)

abstract类只能用来派生子类,不能用来创建abstract类的对象。
final类不但可以用来派生子类,也可以用来创建final类的对象。
abstract不能与final同时修饰一个类。
abstract类定义中可以没有abstract方法。

分析:

1.抽象クラスを使用して抽象クラスのオブジェクトを作成する
ことはできません。2。finalで変更されたクラスは継承できないため、finalクラスを使用してサブクラスを派生させることはできません。3。2で説明した
ように、finalは抽象と同時にクラスを変更できません。抽象クラスは継承に使用されます;
4.抽象で装飾する必要があるクラスに抽象メソッドがありますが、抽象クラスに抽象メソッドがなくてもよく、インターフェースに抽象メソッドがあってもかまいません。

  1. 次のJavaのClassLoaderの説明のうちどれが間違っていますか。()

    正解:BDF正解:BDF(正解)

    默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System
    一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的
    类装载器需要保证类装载过程的线程安全
    ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null
    ClassLoader的父子结构中,默认装载采用了父优先
    所有ClassLoader装载的类都来自CLASSPATH环境指定的路径
    

分析:

A. Javaでのクラスの読み込みには5つのプロセスがあります。読み込み、検証、準備、分析、初期化です。これらはクラスの読み込みの5つのプロセスであり、クラスローダーのタスクは、クラスの完全修飾名に従ってこれを読み取ることです。クラスのバイナリバイトはJVMにストリーミングされ、ターゲットクラスに対応するjava.lang.Classオブジェクトインスタンスに変換されます。仮想マシンには、BootstrapクラスローダーやExtensionクラスなどの3種類のローダーが用意されています。ローダー、システム(システム)クラスローダー(アプリケーションクラスローダーとも呼ばれます)。Aは正しい

B.クラスが異なるクラスローダーインスタンスによってロードされる場合、2つの異なるクラスがメソッド領域に生成され、互いに見えなくなり、異なるClassインスタンスがヒープに生成されます。したがって、Bの前半部分は正しく、インターフェースの後半部分は実際には試行されません。大男が説明するのを待ちます。

C.クラスローダーはスレッドの安全性を確保する必要がある; Cは正しい

D.存在しないクラスをロードする場合、親のロードモードが採用されているため、強制ロードは直接エラーを報告します。Dエラー

java.lang.SecurityException:禁止されているパッケージ名:java.lang

E.親委任モードはJava 1.2以降に導入されました。その動作原理は、クラスローダーがクラス読み込み要求を受け取った場合、最初にそれを読み込まず、親クラスの読み込みに要求を委任することです。親クラスローダーがまだ親クラスローダーを保持している場合、さらに上位に再帰的に委任し、要求は最終的に最上位のスタートアップクラスローダーに到達します。親クラスローダーがクラスの読み込みタスクを完了できれば、正常に戻ります。親クラスローダーが読み込みタスクを完了できない場合、子ローダーは自分でそれを読み込もうとします。これは、親の委任モードです。つまり、すべての息子は怠惰であり、彼が仕事をするたびに、父親にそれを与えるように父親に与えます私がこれを行うことができない場合、息子は自分でそれを行う方法を見つけたので、デフォルトは親のロードであり、Eは正しい

F.カスタムクラスローダーは継承ClassLoaderを実装し、指定されたパスでクラスをロードするようにfindClassメソッドを書き換えます。Fエラー

  1. ランタイム定数プールに関して、次のステートメントのどれが正しいですか

    正解:BCD正解:BC(誤り)

    运行时常量池大小受栈区大小的影响
    运行时常量池大小受方法区大小的影响
    存放了编译时期生成的各种字面量
    存放编译时期生成的符号引用
    

分析:

JDK1.8より前は、ランタイム定数プールはスレッド共有に属するメソッド領域に配置されていました。JDK1.8より後は、メタスペースがメソッド領域に置き換わり、ランタイム定数プールもメタスペースに配置されました。ランタイム定数プールは主に格納されていました、クラスファイルメタ情報の説明、コンパイル済みコード、参照型データ、クラスファイル定数プール。いわゆるランタイム定数プールは、コンパイルされたクラス情報を実際に実行時に領域に配置して、クラス情報を動的に取得します。クラスのロード後にランタイム定数プールが完成し、各クラス定数プールの参照値のシンボルがランタイム定数プールをダンプします。つまり、各クラスはクラスを解析した後にランタイム定数プールを持ちます、シンボリック参照を直接参照に置き換えます。直接参照は、グローバル定数プールの参照値と一致します。ランタイム定数プールはメソッド領域の一部です。クラスバージョン、フィールド、メソッド、インターフェイスなどの説明情報に加えて、クラスファイルには定数プール情報も含まれます(コンパイル中に生成されたさまざまなリテラルとシンボル参照を格納するために使用されます)

おすすめ

転載: blog.csdn.net/qq_37924905/article/details/108681823