メソッドの引数
public void setNumber(int number)
{
number = 100;
}
※このメソッドで、引数で渡されたnumberを、100に置き換えようとしているが、変更されない。
int number = 10;
obj.setNumber(number);
System.out.println(number); // 100ではなく10が表示される。
※これは、呼び出し元からnumberという変数を渡すわけではなく、numberに格納されている10という値が
setNumber()メソッドの引数に定義されているnumberにcopyされているため。
※呼び出しもとのnumberとメソッドの引数リストのnumberは別の変数であるため、setNumber()内で
numberを変更しても呼び出し元の変数に影響はない。
- 参照型(配列型やクラス型)を使うと、メソッドにはインスタンスを参照する値を渡すため、変更することが可能
public void setArray(int [] array)
{
for(int i=0; i<array.length; i++)
array[i] = 100;
}
int[] array = {1,2,3,4,5}
obj.setArray(array);
※array[]の各要素はすべて100に置き換わる。
メソッドのオーバーロード
- System.out.println()を呼び出すと、メソッド名は同じだが引数を渡さなかったり、異なる型の引数を渡している。
- System.out.println()を呼び出すと、Systemクラスのoutというスタティックフィールドに格納されているオブジェクトのprintln()を呼び出す。
- outはPrintStream型であるので、println()はもともとPrintStreamクラスで定義されているメソッド。
- PrintStreamではprintln()は数多く定義されている。(JDKのAPIドキュメント参照)
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)
- 同じ名前で引数の数や型の異なるメソッドを定義することをメソッドのオーバーロードという。
- オーバーロードにより引数の異なるメソッドを同じ名前で定義しておくと、コンパイラはそのメソッドの宣言と、メソッドの呼び出しで渡された引数を照合し、引数の型と数が一致するメソッドを選択してくれる。(オーバーロードの解決)
sample
public class OverloadTest
{
public static void main(String[] args)
{
int[] array = {1,2,3,4,5};
OverloadTestClass obj = new OverloadTestClass();
int ret = obj.sumNUmber(array);
System.out.println("setNUmber(int[]) returns ----->" + ret);
int ret = obj.sumNumber(1,2,3);
System.out.println("setNumber(int,int,int) returns ----->" + ret);
int ret = obj.sumNumber("1","1023");
System.out.println("setNUmber(String,Strin) returns ----->" + ret);
}
}
class OverloadTestClass
{
public int sumNumber(int[] array)
{
int sum = 0;
for(int i=0; i<array.length; i++)
sum += array[i];
return sum;
}
public int sumNumber(int n1,int n2,int n3)
{
int[] array = {n1,n2,n3};
return sumNumber(array);
}
public int sumNumber(String s1,String s2)
{
int s1,s2;
n1 = Integer.parseInt(s1);
n2 = Integer.parseInt(s2);
return sumNumber(n1,n2,0);
}
}
最終更新:2008年01月14日 22:08