Java入門

Java入門
5.9 メソッドのオーバーロード
5.10 変数の引渡し
2003/11/21
紺野憲一
メソッドのオーバーロード
メソッドのオーバーロード
引数の数や型が違えば同じ名前の変数を
複数個利用できる。
例) int mes(int a,int b,int c)
int mes(int a,int b,int c,int d)
int mes(int a,int b,double c)
これは同時に宣言する事ができる。
引数の引渡し
メソッドに引き渡した変数をメソッド内部で変更し
ても外部での値は変わらない。これはメソッドに
引き渡される値は別個に用意して用いられるた
めである。
しかし、配列やオブジェクトを引き渡す場合その
参照(Cで言うポインタ)が引き渡されるため変更
が外部まで影響される。
※参照(ポインタ):変数や配列が保存されているメモリ
の場所を指す。
引数の受け渡し例1
メソッドaに
・int i
・int j[3]
・StringBuffer sb
の3つを受け渡し
した2つは自動的に参
照受け渡しになる。
class Mozii {
public static void a(int i,int j[],StringBuffer sb) {
i=5;
j[0]=6;
sb.append("efgh");
}
public static void main(String args[]) {
int a=1,b[]={2,3,4};
StringBuffer sb=new StringBuffer("abcd");
System.out.println(a+" "+b[0]+" "+b[1]+" "+b[2]+" "+sb);
a(a,b,sb);
System.out.println(a+" "+b[0]+" "+b[1]+" "+b[2]+" "+sb);
}}
出力結果 1 2 3 4 abcd
1 6 3 4 abcdefgh
引数の受け渡し例2
henkouにtの参照のコ
ピーが渡される。
ここではhenkou中でjの参
照を変更している。
メイン中では元のjの位置
を参照するので値は変わ
らない。
class Mozii {
public static void henkou(int j[]) {
int t[]={6,7,8};
j=t;
}
public static void main(String args[]) {
int b[]={2,3,4};
System.out.println(b[0]+" "+b[1]+" "+b[2]);
henkou(b);
System.out.println(b[0]+" "+b[1]+" "+b[2]);
}}
出力結果 2 3 4
234
問題
(1)コマンドラインから数を2個から4個入力
しその和を出力するプログラムを作れ。
(2)例2で関数の実行後に値が変わるように
するにはどうすればよいか答えよ。
回答
(1)
class Mozii {
public static void tasu(int a,int b,int c,int d) {
System.out.println(a+b+c+d);
}
public static void tasu(int a,int b,int c) {
System.out.println(a+b+c);
}
public static void tasu(int a,int b) {
System.out.println(a+b);
}
public static void main(String args[]) {
int a,b,c,d;
if(args.length==4){
a=Integer.parseInt(args[0]);
b=Integer.parseInt(args[1]);
c=Integer.parseInt(args[2]);
d=Integer.parseInt(args[3]);
tasu(a,b,c,d);}
if(args.length==3){
a=Integer.parseInt(args[0]);
b=Integer.parseInt(args[1]);
c=Integer.parseInt(args[2]);
tasu(a,b,c);}
if(args.length==2){
a=Integer.parseInt(args[0]);
b=Integer.parseInt(args[1]);
tasu(a,b);}
}}
回答
(2)メソッド内部のみ
public static void henkou(int j[]) {
int t[]={6,7,8};
j[0]=t[0];
j[1]=t[1];
j[2]=t[2];
}