*JAVA-クラスメソッドとインスタンスメソッド


1.クラスを設計するときに、メンバー変数のすべてのインスタンスに共通の静的を加えます。

  • を生成する各インスタンスは互いに独立しているため、各インスタンス変数(iv)は異なる値を維持する.ただし、すべてのインスタンスで同じ値を維持する必要がある変数については、staticを貼り付けてクラス変数として定義する必要があります.
  • 2.クラス変数はインスタンスを作成することなく使用できます。

  • の静的変数は、クラスがメモリに入ると自動的に生成されます.
  • 3.クラスメソッドではインスタンス変数は使用できません。

  • インスタンス変数はインスタンスが存在しなければ使用できません.クラスメソッドはインスタンスを作成する必要がないため、クラスメソッド呼び出し時にインスタンスが存在しない可能性があります.したがって、メソッドではインスタンス変数の使用は禁止されます.
  • 逆に、インスタンス変数またはインスタンスメソッドでは、常に静的メンバーを使用できます.インスタンス変数の存在は、静的変数がメモリに存在することを意味します.

    4.メソッドでインスタンス変数が使用されていない場合は、静的変数の貼り付けを検討します。

  • メソッドの作業内容にインスタンス変数が必要な場合は、静的を貼り付けることはできません.逆に、インスタンス変数が必要ない場合はstaticを貼り付けます.
  • メソッドの呼び出し時間を短縮することで、パフォーマンスが向上します.staticが貼り付けられていないメソッドでは、実行時に呼び出す必要があるメソッドを検索するのに余分な時間がかかります.
  • クラスのメンバー変数のうち、すべてのインスタンスで共通値を維持する必要があるものがあるかどうかを確認している場合はstaticが貼り付けられます.
  • で記述された方法では、インスタンス変数またはインスタンスメソッドを使用しない方法に静的に貼り付けることが考えられる.
  • クラスメンバーとインスタンスメンバー間の参照と呼び出し


    同じクラスに属するメンバー間では、個別のインスタンスを作成することなく、相互参照または呼び出すことができます.ただし、クラスメンバーがインスタンスメンバーを参照または呼び出す場合は、インスタンスを作成する必要があります.
    これは、インスタンス・メンバーが存在する場合、クラス・メンバーは常に存在しますが、クラス・メンバーが存在する場合、インスタンス・メンバーは存在しない可能性があります.
    class TestClass{
    	void instanceMethod(){}			// 인스턴스 메서드
        static void staticMethod(){} 	// static 메서드
        
        void instanceMethod2()
        {
        	instanceMethod();			// 다른 인스턴스 메서드를 호출
           staticMethod();				// static 메서드를 호출
        }
    	static void staticMethod2()
       {
       	instanceMethod();				// 에러! 인스턴스메서드 사용 불가
           staticMethod();				// static메서드는 호출 가능
       }
    }	//end of class
    オブジェクトの作成や参照変数を必要とせずに、同じクラスのメソッドを直接呼び出すことができますが、静的メソッドではインスタンスメソッドを呼び出すことはできません.
    class TestClass2{
    	int iv;				//인스턴스 변수
        static int cv;		// 클래스 변수
        
        void instanceMethod()			// 인스턴스 메서드
        {
        	System.out.println(iv);		// 인스턴스 변수 호출
            System.out.println(cv);		// 클래스 변수 호출
        }
        
        static void staticMethod2()		//static 메서드
        {
        	System.out.println(iv);		//에러! 인스턴스변수 사용 불가
            System.out.println(cv);		//클래스 변수는 사용 가능
        }
    }	//end of class
    今回は変数とメソッドの呼び出しです.メソッド間の呼び出しと同様に、インスタンスメソッドではインスタンス変数を使用できますが、静的メソッドではインスタンス変数を使用できません.
    class MemberCall{
    	int iv = 10;
        static int cv = 20;
        
        int iv2 = cv;
        
        //static int cv2 = iv;		
        //에러. 클래스변수는 인스턴스 변수 사용 불가능
        
        static int cv2 = new MemberCall().iv;	
        //이처럼 객체를 생성해야 사용 가능.
        
        static void staticMethod1()
        {
        	System.out.println(cv);
            
            //System.out.println(iv);
            //에러. 클래스메서드에서 인스턴스변수를 사용 불가.
           
            MemberCall c = new MemberCall();
            System.out.println(c.iv);
            // 객체를 생성한 후에야 인스턴스변수의 참조 가능.
        }
        
        void instanceMethod1()
        {
        	System.out.println(cv);
            System.out.println(iv);
            //인스턴스메서드에서는 인스턴스변수를 바로 사용가능.
        }
        
        static void staticMethod2()
        {
        	staticMethod1();
            
            //instanceMethod1();
            //에러. 클래스메서드에서는 인스턴스메서드를 호출할 수 없음.
            
            MemberCall c = new MemberCall();'
            c.instanceMethod1();
            //인스턴스를 생성한 후에야 호출 가능.
            
        }
        
        void instanceMethod2()	    
        {
            //인스턴스메서드에서는 인스턴스메서드와 클래스메서드
       		//모두 인스턴스 생성없이 바로 호출이 가능하다.
        	staticMethod1();
            instanceMethod();
        }
    
    }
  • クラスメンバーは常に参照または呼び出すことができるため、インスタンスメンバーがクラスメンバーを使用するのは問題ありません.
  • クラスメンバー間の参照または呼び出しに問題はありません.
  • ただし、インスタンスメンバーは、オブジェクトの作成後に参照または呼び出す必要があるため、クラスメンバーはインスタンスメンバーを参照または呼び出すためにオブジェクトを作成する必要があります.
  • ですが、インスタンスメンバー間の呼び出しには問題はありません.
  • にはインスタンスメンバーが存在します.これは、インスタンスが作成されたことを意味します.つまり、他のすべてのインスタンスメンバーが存在します.
  • 実際には、同じクラスでは、クラスメンバーがインスタンスメンバーを参照または呼び出す必要はほとんどありません.この場合、クラスメソッドを使用してインスタンスメソッドとして記述すべきメソッドを記述したかどうかを考慮する必要があります.