戻り値についてとvoidについて

投稿者: Anonymous

現在javaの学習中です。
復習として簡単なコードを打ち込んでそれを学んで自分が覚えている範囲から書き換えているのですがnumの値を表すコードを書いてみました。
P1:

class Sample1 {
    public static void main(String args[]) {
        int num = 100;
        System.out.println("This num is " + num);
    }
}

といった構文をまず P2:

class XXX {
    void display() {
        int num;
        num = 100;
        System.out.println("This num is " + num);
    }
}
class sample1 {
    public static void main(String args[]) {
        XXX p1 = new XXX();
        p1.display();
    }
}

と書いてみてその次に
P3:

class XXX {
    void display() {
        int num;
        num = 100;
        System.out.println("This num is " + num);
    }
}
class sample1 {
    public static void main(String args[]) {
        XXX p1 = new XXX();
        p1.display();
        sample3(20);
    }
    public static void sample3(int num1) {
        System.out.println("This num1 is " + num1);
    }
}

と書き加えてみました。
P3についてはネットに記述していたやつを真似て作成してみたのですが、
ここでvoid sample3(int num1)についてよくわからなく
void というのは引数が空のときにつかうものではないのでしょうか。
引数 int num1というのが書かれているのにどうしてvoidをつけないといけないのでしょうか。
また

class XXX {
    void display(int num) {
        num = 100;
        System.out.println("This num is " + num);
    }
}
class sample1 {
    public static void main(String args[]) {
        XXX p1 = new XXX();
        p1.display();
    }
}

といった記述にしてみたんですが、自分はp1.displayは空のvoid dsplay(int num)に戻って
num = 100をいれて This num is 100とだされると考えていたのですがエラーがでてしまいました。

class XXX {
    void display(int num) {
        System.out.println("This num is " + num);
    }
}
class sample1 {
    public static void main(String args[]) {
        XXX p1 = new XXX();
        p1.display(100);
    }
}

といった記述にすれば問題なくだされるのですが戻り値といったものや引数の約束事やその仕様、voidなどがいまいちわかりません。よろしくお願いたします。

解決

void sample3(int num1){

この場合のvoid は、メソッドの戻り値がないことを示します。

int mul2(int num){
    return num*2;
}

のようにint をvoid の代わりに書いた場合は、
メソッドはint の値を返すことを示します。
この場合return 文を使って値を返す必要があります。

なので、(ここでのvoidは)返す値についてのものなので引数(のあるなし)とは関係ありません。

(int num1) の部分については、このメソッドはint の値を引数として必要なことを示します。
引数なしにこのメソッドを呼び出すことはできません。

引数なしに呼びだそうとする場合には、引数無しのメソッドを書く必要があります。


void display() の場合 p.display()のように呼び出す、p.display(数値)の様には呼び出せない。
void display(int num) の場合 p.display(数値)のように呼び出す、p.display()の様に(int の引数が必要で引数なしに)は呼び出せない。
それぞれのメソッドの要件を満たしていない場合そのメソッドは呼び出されません。


メソッドの定義部分(void sample3(int num1){のような部分)は、

A{void} B{sample3}(C{int num1})
A,B,Cの部分は
A{値を返すかどうか返すとしたらその型} B{メソッド名}(C{引数があるかないかあるとしたらその引数の並び})
というようになっていて、
これはつまりは対外的なインターフェースを表していて、
(実際の中身については実際に何が行われるかは使う側は知る必要はない、何を入れれば何がでてくるかだけ分かっていればよいという意味でこの部分を知ってればよい)
このメソッドの機能(何を受け取って何を返すか(または受け取らず返さない))を外観するものです。
だから単に書き方の違いというか、その機能によって(返す値や引数が)決まるものです。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *