Javaブラウズ


Java Master Bookを読むとき、javaの基本的な内容を整理しました.
JAvaの特徴

  • オブジェクト向け
    拡張性と再利用性

  • プラットフォームの独立性
    JVMという仮想環境上で動作するため、オペレーティングシステムとは独立しています.

  • 卓越した生態系
    優れたライブラリとミドルウェア、良好なJavaエコシステム
  • JAvaの3つのバージョン
  • Java SE : Standard Edition. 最も標準的です.
  • PCまたはサーバ上で実行するアプリケーションに適用
  • Java EE : Enterprise Edition.
  • Webサービス、サーバ間通信、メール送信を含むサーバに必要な機能
  • Java ME : Micro Edition.
  • 組み込みシステム用
    Javaの2つの環境
  • JRE : Java Runtime Environment. Javaファイル(JARまたはクラスファイル)の実行環境
  • JDK : Java Development Kit. Java開発環境.コンパイラとデバッガ、および実行を含む
    ->デバッグにJDKが必要な場合があります.
  • Java実行順序
  • Javaソース(.java)作成
  • コンパイラは(.java)->(.class)クラスファイル
  • にコンパイルされた.
  • 各オペレーティングシステムのJVM上で(.class)ファイルを解析し、
  • を実行する
    JAva修飾子

  • アクセス制限

  • abstract
    文字通り抽象クラスやメソッドの前に貼る
    インスタンス化できず、継承および実装可能
    abstractメソッドはabstractクラスにのみ存在します

  • static
    クラスをインスタンス化せずにアクセス

  • final
    フィールド:フィールド値の変更を禁止
    方法:クロスカントリー禁止
    ≪クラス|Class|ldap≫:クラスの継承を禁止します

  • transient
    クラスをシリアル化すると、シリアル化ターゲットから除外されます.不要なデータはシリアル化しないでください.
    シーケンス化:インスタンス化されたJavaオブジェクトをバイト列に変換

  • volatile
    マルチスレッド環境でのアクセスを禁止するフィールド

  • synchronized
    このメソッドまたはブロックに対しては、一度に1つのスレッドしかアクセスできません.
  • 命名規則
    変数は名詞です.方法は動詞です
    ->フィールドでisXXXに同じ名前を付けないでください!!このメソッドの名前
    Javaは静的言語です
    すなわち、変数の宣言時にデータ型を決定する->コンパイル時に一貫性を決定する.
    動的タイプ言語は、変数を宣言するときにデータ型を特定しない->実行時に一貫性を判断します.
  • 基本型:long、int、char、boolean、...
  • リファレンス:
  • タイプ、インスタンスを格納するポインタ
    // 기본형
    int i = 1;
    
    // 참조형
    String name = new String("hi");
    String name = "hi";
    エンベロープクラス
    RAPPERクラスを使用したデータ型の各種機能
    Integer num1 = new Integer(1);
    Integer num2 = Integer.valueOf(1);		// 캐시된 객체 반환, -128~127은 캐싱되어 있음
    
    int num = num2.intValue();
    RAPPERクラスはnullを持つことができますが、デフォルトのタイプはnullを持つことはできません.
    Integer numInteger = null;		// 가능
    int numInt = null;		// 불가능. 무조건 초기값은 0 -> 혼란 초래 할 수 있으니 Integer 쓰자
    匿名クラス
    匿名クラスは名前のないクラスです
    クラスの一次定義とインスタンス化
    //  TaskHandler 라는 인터페이스 구현하고 인스턴스화
    TaskHandler taskHandler = new TaskHandler() {
        public boolean handle(Task task) {
        	// 익명 함수 내용 구현,,,
        }
    }
    equalsおよびhashCodeequalsという関数を使用して、オブジェクトの値が同じかどうかを判断します.このときequals関数を上書きすることで,等価性をどの基準で処理するかを決定できる.
    このとき一緒に宣言しなければならない関数はhashCodeです!hashCode関数は、オブジェクトの内容をハッシュ値に戻します.すなわち、オブジェクトが同じ値を有する場合、同じハッシュ値を有する.しかし、同じハッシュ値が同じ値を持つオブジェクトとは限らない!
    なぜ
  • equalsを使用するときにhashCodeを同時に使用するのですか?
  • equalsメソッドは各値を検証するため,計算時間が長い.逆に、ハッシュ値は、ハッシュ値に変換されるプロセスと、ハッシュ値を比較するプロセスだけが、オブジェクトが同じかどうかをより迅速に判断することができる.
    hash値で比較->hash値が同じ場合equalsを使用してより正確な比較
    上記の手順は、HashMapおよびHashSetにも適用されます.
    class Point{
        int x;
        int y;
        
        Point(int x, int y) {
        	this.x = x;
            this.y = y;
        }
        
        @Override
        public boolean equals(Object obj) {
        	if (this == obj)
            	return true;
            if (obj == null)
            	return false;
            if (getClass() != obj.getClass())
            	return false;
            Point other = (Point) obj;
            if (x != other.x)
            	return false;
            if (y != other.y)
            	return false;
        }
        
        @Override
        public int hashCode() {
        	final int prime = 31;
            int result = 1;
            result = prime * result + x;
            result = primt * result + y;
            return result;
        }
        
        // 자바 7부터 hash 메소드 사용 가능
        @Override
        public int hashCode() {
        	return Objects.hash(this.x, this.y);
        }
    }
    なぜpublic static finalではなくenumを使うのですか?
    1.タイプは安全です.
    enum自体はスキップされるので、タイプが一致しないパラメータはスキップされません.
    2.public static finalを使用する場合、定数クラスの定数の値を変更すると、クラスの定数の値は変更されない場合があります.
    //  상수 클래스 쪽의 정의
    public static final String SELECTED_COLOR = "blue";
    
    // 이용 클래스 쪽의 정의
    public String coloe = SELECTED_COLOR;
    上記の場合、SELECTED_COLOR = "red";に変更されます.
    ただし、変更した部分がコンパイルされず、使用クラスのみがコンパイルされている場合はredに変更されず、blueとして保持されます.
    Enumはstatic finalと異なり,使用者のクラスは値を展開しないため,使用者のクラスも再コンパイルする必要はない.