オブジェクト向けの4つの特性(1):抽象(2)


2.クラスメンバーvsオブジェクトメンバー=静的メンバーvsインスタンスメンバー


オブジェクトは唯一存在するエンティティであるため、属性には値があり、クラスは概念であり分類体系であるため、属性には値がありません.しかし、以下の質問をしてみましょう.
  • メートルのネズミのしっぽはいくつありますか?
  • ジェリーのしっぽはいくつありますか?
  • ネズミのしっぽはいくつありますか?
  • 答えはすべて一つです.末尾はオブジェクトのプロパティですが、すべてのオブジェクトに同じ値があるため、クラスで質問できます.
    プログラムでこのような状況を記述すると仮定します.Mouseという名前のクラスとMickey、Jerryという名前のクラスのオブジェクトを別々に作成できます.ただし、すべてのMouseオブジェクトは「末尾数」プロパティで同じ値を持っていますが、メモリの無駄はMouseオブジェクトの数と同じです.この場合、ネズミのしっぽの数を一つの場所に保存したいだけです.따라서 같은 유형(클래스)의 모든 객체가 같은 값을 가지고 있다면 그 값을 클래스에 저장하는 것은 어떨까?は、このような汎用属性のために使用される.JAvaのコードは、静的キーワードをプロパティに貼り付ける前に、次のように記述できます.
    package abstraction;
    
    public class Mouse {
        public String name;
        public int age;
        public static int countOfTail = 1;
        
        public void sing() {
            System.out.println(name + " 찍찍!!!");
        }
    }
    countOfTailプロパティは、Tメモリの스태틱 영역に1つのストレージ領域しかありません.countOfTailプロパティにアクセスするには、オブジェクト参照変数を使用します.countOfTailを使用してクラス名にアクセスまたは使用します.countOfTail、すなわちMouse.countOfTailでアクセスできます.このようなstaticキーワードを持つ属性を클래스 멤버 속성と呼ぶ.静電付着のない属性を객체 멤버 속성と呼ぶ.属性だけでなく、メソッドも静的キーワードが貼り付けられているかどうかによって、クラスメンバーメソッド、インスタンスメンバーメソッドに分けられます.クラスメンバーはstaticキーワードとともに使用され、Tメモリのstatic領域に存在するため、static(静的)メンバーとも呼ばれる.オブジェクトメンバーは、クラスのインスタンスであるため、インスタンスメンバーとも呼ばれます.
    したがって、デフォルトでは、クラス内のすべてのオブジェクトが同じ値を持っている場合に静的プロパティが使用されます。

    では、静的な方法を使うのはいつがいいのでしょうか.静的メソッドは、オブジェクトが存在するかどうかにかかわらず使用できるメソッドです.まず、main()メソッドは静的メソッドでなければなりません.Tメモリの初期化後、オブジェクトが存在するため、オブジェクトメンバーメソッドは使用できません.これらの論理に加えて、静的変数のアクセス者メソッド(getter)と設定者メソッドとして使用することもできます.実際の動作では、Mathクラスの多くの静的メソッドは、クラスインスタンスを作成するのではなく、主に静的メソッドで構成されています.
    また、静的属性の場合、クラスをTメモリの静的領域に配置すると、クラス内部にメモリ領域が保持されます.ただし、オブジェクトのプロパティはプロパティ名のみで、実際のメモリ領域はありません.オブジェクト属性は、hip領域にオブジェクトを配置すると、各オブジェクト内のメンバー属性にメモリ領域が割り当てられます.
    また、領域変数は個別に初期化され、クラス属性とオブジェクト属性(メンバー変数)は自動的に初期化されます.整数型は0、浮動小数点型は0.0、論理型はfalse、オブジェクトはnullに初期化されます.
    リファレンス
  • Javaオブジェクト向けSpringの入門原理と
  • を理解する