Java基本機能の強化-オブジェクト向けO.O!


O.O.P! オブジェクト向けプログラミング!


現実の世界である製品を製造するとき、部品を先に開発し、それらを一つ一つ組み立ててて完成させた製品のように、ソフトウェアを開発する際にも、まず部品に対応するオブジェクトを作成し、これらのオブジェクトを一つ一つ組み立ててててて完成させたプログラムを作成する方法を、イメージング向けプログラミング(OOP:ObjectOriented Programming)と呼ぶ.
  • 対象言語は?
    1.コードの再利用性が高い.
    新しいコードを作成する場合は、既存のコードを使用して簡単に作成できます.
    2.コード管理が便利です.
    コード間の関係を利用して、少ないワークロードで簡単にコードを変更することができます.
    3.高信頼性プログラミングを可能にする.
    制御者と方法を使用して、データを保護し、正しい値を維持し、コードの重複を解消し、コードの不一致によるエラー行為を防止することができます.
  • 対象とは?


    オブジェクト向けプログラミングでは、基本実行ストリームまたはデータユニットの情報として、属性(フィールド、変数)と機能(方法)から構成される.インスタンスとオブジェクトもオブジェクトと同じです.単純にクラスをメモリ(new)に割り当てる場合をオブジェクトと呼ぶ.

    カテゴリ


    クラスは、オブジェクトを作成する前にJavaソース(*.java)内部コードでオブジェクトの設計図(定義)を作成します.

    クラスの構成

  • フィールド(フィールド):クラスのプロパティ情報
  • インスタンス変数(インスタンス変数):クラス作成(new)からクラスがGCで解除される前に、メモリに割り当てられた情報、クラス内部ジェネレータまたはメソッドがアクセスできます.
  • クラス変数(静的変数):インスタンス変数のようにクラス内部の作成者またはメソッドからクラスにアクセスできますが、プログラムが終了するまでクラス作成(new)の前にプログラムをメモリに割り当てることができます.
  • ジェネレータ(コンストラクション関数):クラス(new)の作成時にクラス内部フィールドを初期化する方法.
  • メソッド(method):クラス固有のタスクを実行する一連の文を組み合わせた作業単位.特定の値を受け入れ、操作を実行して値を返すことができます.
  • 初期化ブロック
  • クラス初期化ブロック(静的初期化ブロック):クラス(静的)変数を初期化するブロック.
  • インスタンス初期化ブロック:インスタンス変数を初期化するブロック.
  • 内部クラス:クラス内で宣言されたクラス.インスタンスクラス、静的クラス、ゾーンクラス、匿名クラスがあります.
  • インスタンス変数は、インスタンスを作成するたびに作成されるため、各インスタンスには異なる値が保持されますが、クラス変数には常に共通の値があります.各インスタンスはストレージ領域(メソッド領域)を共有しているためです.(=共有変数)

    クラス構成コードの説明

    class ClassTest {
        // field
        static int staticValue;    // 1. 클래스 변수
        int instanceValue;         // 2. 인스턴스 변수
    
        // 3. 클래스 초기화 블럭
        static {
            staticValue = 0;
        }
        
        // 4. 인스턴스 초기화 블럭
        {
            instanceValue = 0
        }
        
        // 5. 생성자
        public ClassTest(int instanceValue) {
            this.instanceValue = instanceValue;
        }
        
        // 6. 클래스 메서드
        public static void staticMethod() {
            ...
        }
        
        // 7. 인스턴스 메서드
        public void instanceMethod() {
            ...
        }
        
        // 내부 클래스
        class InnerClass {
        
        }
    
    }
    上記の例は、クラスコンポーネントを作成するコードであり、内部クラスを除く各要素の作成時間を順に示すと、まずクラスを作成する移行順序は1->6->3である.ClassTestクラスがオブジェクトとして作成された場合
    // ClassTest 객체 생성
    ClassTest ct = new ClassTest(1);
    クラス生成後の順序は2->7->4->5である.
  • クラス初期化
  • クラス変数->6.クラスメソッド->3.クラス初期化ブロック
  • インスタンス初期化
  • インスタンス変数->7.インスタンスメソッド->4.インスタンス初期化ブロック->5.ジェネレータ
  • したがって、各変数とメソッドは、まずメモリに割り当てられ、初期化ブロック->ジェネレータを呼び出すことでオブジェクトの作成が完了します.
    メンバー変数の初期化方法
    1.明示的初期化(明示的初期化)
    2.初期化ブロック
    3.コンストラクション関数(コンストラクション関数)
    シーケンスは1、2、3で、明示的な初期化後、初期化ブロックは再初期化され、最後に作成者がオブジェクトを作成するときに初期化されます.明示的な初期化は、変数宣言後すぐに値を割り当てます.
    ex) int value = 0;

    作成者の使用方法


    各クラスは、1つ以上のコンストラクション関数を定義する必要があります.コンストラクション関数が表示されない場合は、コンパイラが提供するデフォルトのコンストラクション関数です.(デフォルトのコンストラクタは、クラスにコンストラクタが定義されていない場合にのみ追加されます.)
  • ジェネレータ定義規則
  • ジェネレータの名前は、クラスの名前と同じである必要があります.
  • ジェネレータには戻り値がありません.
  • すべてのジェネレータに値が返されないため、ジェネレータでvoidキーワードを省略できます.

    デフォルト作成者

    class People {
        String name;
        int age;
    }
    
    People p = new People();
    上記の例でPeopleオブジェクトを作成すると、Peopleクラスはデフォルトジェネレータを呼び出します.現在ジェネレータが定義されていないためです.

    パラメータ付き作成者

    class People {
        String name;
        int age;
        
        People (String n) {
            name = n;
        }
    }
    
    People p = new People("홍길동");
    上記の例は、Peopleオブジェクトの作成時に「洪吉童」というジェネレータを呼び出してnameを初期化する例です.

    this()、thisキーワード


    このキーワードは、クラス内で自分(生成されたオブジェクト)にアクセスするために使用します.上のPeopleクラスでは、これ.nameは、現在生成されているオブジェクトのnameを表します.
    ジェネレータを呼び出すときに、「パラメータ」(argments)の値をPeopleクラスのインスタンス変数と同じ名前のnameとして使用すると、「エラー」と混同されます.
    class People {
        String name;
        int age;
        
        People (String name) {
            this.name = name;
        }
    }
    
    People p = new People("홍길동");
    また、クラス内でオブジェクトの作成者として使用できます.
    class People {
        String name;
        int age;
    
        People () {
        }
        People (String name) {
            this(name, "20");
        }
        People (String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    
    People p = new People("홍길동");
    People p = new People("홍길동", "21");
    上記の例では、異なるコンストラクション関数を呼び出し、このキーワードでより使いやすいと判断できます.

    静的キー


    クラス変数


    クラス変数は、プログラムの実行時にメモリに割り当てられているため、オブジェクトを作成することなくクラスからアクセスできます.
    class StaticTest {
        static int value;
        public static void testStaticMethod() {
           ...
        }
    }
    
    ... 
    
    public static void main(String[] args) {
        // StaticTest 클래스를 생성하지 않아도 사용이 가능
        StaticTest.value = 7;
        StaticTest.testStaticMethod();
    }

    クラス(静的)メソッドの注意事項


    上述したように、静的キーワードを含む関数または変数、および後続のプロシージャのクラスは、mainメソッドが操作を開始する前に、クラスがプログラムドライバをロードするときにメモリに最初に割り当てられる情報である.
    したがって、静的メソッドのブロックではインスタンス変数にアクセスできません.以下の例をさらに説明する.
    class StaticTest {
        int value = 0;
        public static void testStaticMethod() {	// 스태틱 메서드
            value = 1;	// 인스턴스 변수 -> 컴파일 에러 발생!
        }
    }
    上記の例では、コンパイラが静的メソッドからインスタンス変数にアクセスするとエラーが発生することがわかります.mainメソッドを呼び出す前にメモリに割り当てられ、インスタンス変数はクラスがオブジェクトとしてメモリに割り当てられたときにメモリに割り当てられるため、staticキーワードを宣言した変数または関数がメモリに割り当てられて実行されると、インスタンス変数がメモリに割り当てられず、問題が発生します.(インスタンスメソッドも静的メソッドから呼び出すことはできません.)
  • メソッドでインスタンス変数が使用されない場合は、静的貼り付けを考慮します.
    メソッドでstaticキーワードを宣言すると、メソッドを検索するプロセスがインスタンスメソッドよりも短いため、メソッド呼び出し時間が短縮され、パフォーマンスが向上します.
  • 内容を整理する



    この文章はJava言語の基礎を築くために書かれたものです.
    この文書のエラーまたは追加する必要がある内容は次のとおりです[email protected]分かち合えばありがたいです
    この記事を参照または転載する場合は、ソースをリンクしてください:)
    リファレンス
    1. 白旗仙-ジャバステディ
    2.これがJava-信用圏を征服するJavaプログラミング
    3.Javaの定式書3 rd Edition