Thinking in Java-タイプ情報[反射]

2263 ワード

Javaプログラミング思想という本はシロにあまり友好的ではなく、基本的な文法を話さないのが一般的だと言わざるを得ません.この章を前にJava反射について知らなかったら、この章を読んだことがありませんか.まず基本文法を勉強してからこの本を読むことをお勧めします.ネット上の多くの人はこの本を直接読むのは読めないと言っていますが、普通は2、3年働いてから読むと読めます.
  • 名詞解釈:
  • RTTI(Run-Time Type Identification)は、実行時タイプ情報プログラムがベースクラスのポインタまたは参照を使用して、これらのポインタまたは参照が指すオブジェクトの実際の派生タイプをチェックすることができる.
    使用の意味:
    汎用+コンテナを使用すると、コンテナは物事をObjectとして所有し、結果を自動的にShapeに変換します.すべてのタイプの変換は実行時に正確性チェックを行います.次にコードをどのように正確に実行するか、[マルチステートメカニズム]は参照によって制御されます.
    [外部チェーン画像の転送に失敗し、ソース局に盗難防止チェーン機構がある可能性があり、画像を保存して直接アップロードすることを提案する(img-TCvSgqPp-1577624207919)(BFC 2 B 9 B 961864958 BA 0 DF 400 CFB 9 A 278)]
    public class Shapes {
        public static void main(String[] args) {
            List shapeList = Arrays.asList(
                    new Circle(),new Square(),new Triangle()
            );
            
            for (Shape shape : shapeList){
                System.out.println(shape.draw());
            }
        }
    }
    

    Classオブジェクト
    Classクラスのオブジェクトは、クラスのタイプ情報の表示を実現します.クラスを作成するために使用されるすべての一般オブジェクト
    クラスごとにClassオブジェクトがあり、新しいクラスを作成するたびにClassオブジェクトが生成されます.[同じ名前の.classファイルに保存]新しいクラスのオブジェクトを生成するために、JVMはクラスローダを使用して生成されます.[クラスローダにはクラスローダチェーンが含まれており、オリジナルローダが1つしかありません.[後でJVMの本を読みに行きます].
    JVMはすべてのクラスを完全にロードするのではなく、すべてバイトコードにコンパイルされ、[その静的メンバーを使用する場合]に使用するときにロードするかどうかを確認し、ロードされていない場合にロードされます.
    構築方法はデフォルトでstaticなのでnewオブジェクトの場合もロード
    ロードはstaticコードブロックを実行することを意味し、staticコードブロックはクラスロード時に一度だけ実行されます.
            
    1.    2.    3.    
    
    //         Class   ,      ,            
    Class.forName("  "); //      static   [   ]   
    
    //   FanToy.class [     ]  Class         ,                   
    FanToy.class //           static,                         。[            ]
    
    new   ;  //  new        static           
    
    

    Classは汎用型を使用して強転を必要としない[コンパイラはタイプを決定したが、>superは強転extendを必要としない]
    コンパイラが特定のタイプを特定できるかどうかによって異なります.
    Instanceof[Class.isInstance]
    あるタイプまたはサブクラスかどうかを判断するために使用される実装クラス.[==,equals]Classオブジェクトが等しいかどうかを判断するしかない.
    equals、==、HashCodeの違いを拡張します
    equalsオブジェクトを比較する際にclassがequalsメソッドを書き換えたか否かを判断し,equalsメソッドで等しいと判断し,書き換えなければ==効果と同様である.
    ==は参照[アドレス]が同じかどうかを比較し,hashcodeが同じとは限らず,hashcodeが重複する可能性がある.
    equalsが等しい場合HashCodeは必ず等しいので,クラスのequalsメソッドを書き換える際にはhashcodeメソッドを書き換える[これは規範である]と併せなければならない.