ホーム
Java
その他
こんなサイト腐るほどあるのになんでうちに来たの?
来たからには、ちゃんとJavaをマスターしてもらうからね。
2018/02/10

第7回 面倒な仕事はメソッドに任せておけばいい。


タイトルがあんまり良くないね。

今回はメソッドを作ったり作ったりします。
メソッドってなに?って人多いよね。
別の言語では、「関数」って言われてます。

なんか数学っぽい単語で嫌な気分になる人もいるかもしれないけど、だいじょおぉ↑↑ぶ!
安心できる画像
簡単だから。

じゃあやっていこう。

まず、メソッドってのは今までもいくつか使ってきてて、例えばInteger.parseInt()とか、
System.out.println()とか、こういう括弧がついてるやつが、メソッドです。
メソッドは、値を送ったり受け取ったりすることができて、受け取った値をメソッドのなかで弄りまわしたりできるんです。

じゃあ例文ね。

class MyMethod{
tab public static void main(String[] args){

tab tab hoge();
tab }

tab public static void hoge(){

tab tab System.out.println("hello");
tab }
}


こういう感じで、新しいメソッドを作ります。
今回作ったhoge()メソッドはいつも使ってるメインメソッドとよく似てるね。
ひとつずつ解説していくよ。

public (意味:大衆の, 公共の, 公衆の 等)
このメソッドを別のクラスから呼び出す(実行する)ことが出来るかどうかってこと。
例えば、Integer.parseInt()は、Integerクラスにあるけど、自分で作ったクラス(今回ならMyMethodクラス)からでも呼び出すことができる。
これが、publicの意味。
逆に、自分のクラス内だけで使う目的で作るなら、privateって書く。
まあ、基本的にはpublicにしておけばいいと思うよ。

static (意味:静的な)
これはちょっと難しくて、クラスってのは、オブジェクトの概念みたいなもので、staticなメソッドや変数ってのは、それひとつしかメモリに存在しない。
非staticなものは、クラスのインスタンスを作る事にメモリ領域が複製されていく。
多分この説明はちょっと間違ってる。
理解はしてるけど説明が難しいな。
例えば、自動車クラスがあるとしよう。

class Car{
tab String name;
tab String number;
tab int engineDisplacement;
}

自動車ってのは、それ自体に形はなくて、そこに車名だったりナンバーだったり排気量だったりいろんな要素を設定して、実態を作ることで、人が乗ることのできるものができる。
自動車⇒クラス
プリウス⇒インスタンス
スイフト⇒インスタンス
みたいな関係だ。

Car swift = new Car();
swift.name = "SWIFT";
swift.number = "品川 さ 1234";
swift.engineDisplacement = 1300;

これのswiftがCarクラスのインスタンスだ。
まあ、今は理解しなくてもそのうちわかってくると思う。
まあ、オブジェクト指向言語を使いこなすには必ず必要になるから、自分で調べて勉強しておいてくれ。
俺の説明力じゃ多分伝わらない。
このサイトでも説明してるから、理解できるかわからないけど一応読んでおいて。
あなたの知らないJava staticの使い方 - SEチャンネル

void
これは、メソッドから処理後に返ってくる値がありませんよって意味。
返ってくる値ってのを、「戻り値」って言って、始めの頃はよく「返り値」って間違えて言ってた記憶がある。
返り血じゃないよ。
戻り値がある場合には、戻り値の型を入れる。
もしString型の値を返すなら、public static String hoge()になる。
で、戻り値はメソッドの最後またはif文のなかとかで、returnってのを使って返す。
このやり方もあとで説明するね。

hoge()
これがメソッドの名前。
括弧の中には、引数(ひきすう)を書く。
今回は引数がないからなにも書いてない。

最初に書いた例文では、メインメソッドからhogeメソッドが呼び出されて、hogeメソッドの中に書いてあるSystem.out.println()が呼ばれる。
じゃあ次は引数を使ってみよう。


class MyMethod{
tab public static void main(String[] args){

tab tab hoge("hello");
tab }

tab public static void hoge(String msg){

tab tab System.out.println(msg);
tab }
}


これも、実行すると最初のと同じように動く。
前回と違うのは、まずメインメソッドでhogeを呼び出す時に、括弧に"hello"と入れてある。
こうすることで、hogeメソッドに文字列"hello"を送ることができる。
そして、メソッドはそれを受け取るために、public static void hoge(String msg)と書いてある。
こうすると、値をString型で受け取って、msgという変数に格納してメソッド内で使うことができる。
んで、hoge内でSystem.out.println(msg)とすることで文字列"hello"を表示することができる。
引数はカンマで区切って2つ以上送ることもできるし、配列を送ることもできる。

次、戻り値。
疲れてきたからちゃちゃっと終わらせよう。
まずは例文。

class MyMethod{
tab public static void main(String[] args){

tab tab String msg = hoge();
tab tab System.out.println(msg);
tab }

tab public static String hoge(){

tab tab return "hello";
tab }
}


これも実行時の動きは一緒。
メインメソッドでhogeを呼んで、hogeが文字列をreturnする。
変数msgに"hello"が代入されて、それをSystem.out.println(msg)で表示する。

終了。

次回は、非staticなメソッドを作ったり、インスタンスを作ったりするよ。(予定)
お疲れ様でした。
この記事はあと2回くらい読み返して勉強してください。

Bye!