Javaでメソッドを呼び出すときの明示的なパラメータと暗黙的なパラメータ

2310 ワード

JavaBeanクラス、BankAccount.java、テストクラス、Test.javaがあります.
public class  BankAccount{
	private double balance;       //    

	public BankAccount(){
		balance = 0;
	}
	public BankAccount(double initMoney){
		balance = initMoney;
	}
	
	//    
	public void deposit(double nums){
		balance = balance + nums;
	}
	//    
	public void withdraw(double nums){
		if(balance >= nums)
			balance = balance - nums;
	}
	//      
	public double getBalance(){
		return balance;
	}
}

 
public class Test{
       public static void main(String[] args){
	BankAccount bankAccount = new BankAccount();
	bankAccount.deposit(1000);
	bankAccount.withdraw(400);
	System.out.println(bankAccount.getBalance().toString());
        }
}
  

 
 
    BankAccountクラスを作成するオブジェクトごとに、このオブジェクトに対応するインスタンスフィールドbalanceがあることはよく知られています.BankAccountオブジェクトを介してBankAccountクラスの共通メソッドを呼び出してインスタンスフィールドを操作するたびに、Javaコンパイラはオブジェクトとインスタンスフィールドをどのように対応させるのでしょうか.
 
    実はこの中に暗黙的なパラメータの概念があります.メソッドを呼び出すときの表示パラメータは、メソッドカッコのパラメータ値であることを知っています.暗黙的なパラメータは、メソッドを呼び出すオブジェクトです.
 
    私は方法を改造するともっと分かります.
    BankAccount bankAccount1 = new BankAccount();
    bankAccount1.deposit(1000);
    BankAccount bankAccount2 = new BankAccount();
    bankAccount2.deposit(1000);
 
    bankAccount 1オブジェクトがdepositメソッドを呼び出すと、depositメソッドは次のようになります.
   //預金方法    public void deposit(double nums){          bankAccount1.balance = bankAccount1.balance + nums;    }
    bankAccount 2オブジェクトがdepositメソッドを呼び出すと、depositメソッドは次のようになります.
   //預金方法    public void deposit(double nums){          bankAccount2.balance = bankAccount2.balance + nums;    }
 
    したがって、対応するインスタンスフィールドは暗黙的パラメータによって操作され、暗黙的パラメータはメソッドを呼び出すオブジェクトです.
 
    暗黙的なオブジェクトは、直接オブジェクト名で表さなくてもよいし、thisキーワードで次のように表すこともできます.
    public void deposit(double nums){          this.balance = this.balance + nums;    }    これは、メソッドを呼び出す現在のオブジェクトを表します.
 
 
    もう1つの特殊な現象は、構造方法間で相互に呼び出され、上記の構造方法を以下のように変更することもできる.
    public BankAccount(){        this(0);    }    public BankAccount(double initMoney){        balance = initMoney;    }    最初のコンストラクションメソッドのthis(0)は、呼び出された別のコンストラクションメソッドです.コンストラクションメソッドのthis呼び出しは、現在のオブジェクトではなく、コンストラクションメソッド間の相互呼び出しです.