mainメソッド
mainメソッドには以下の2つのルールがあります。
① ファイルを実行するとmainメソッドが実行される
② mainメソッドの引数などは、必ず決められた通りに記述する必要がある
① ファイルを実行するとmainメソッドが実行される
今までreplitにコードを書く際に、以下のような記述を行ってきました。
class Main {
public static void main(String[] args) {
// ここに処理を書く
{
}
この2行目を見ると「main」という文字が見えますが、これはメソッド名を表しています。
つまり、今まで書いてきたコードは、mainメソッドの中身を定義してきたことになります。
Javaのmainメソッドには、ファイルの実行時に自動的に実行されるというルールがあります。そのため、mainメソッドを実行するコードを書かなくても実行されるのです。
② mainメソッドの引数などは、必ず決められた通りに記述する
通常のメソッドは引数の設定などを変更できますが、mainメソッドについては書き方が決められています。
データ型等を変更してしまうとエラーになるため、以下の通りに記述する必要があります。
public static void main(String[] args) {
// ここに処理を書く
}
メソッドを使ってみよう(引数がない場合)
Javaでメソッドを使用する方法は若干複雑なので、以下の2つに分けて学習していきます。
① 引数を使用しないメソッドの使い方
② 引数を使用するメソッドの使い方
まずは、①の引数を使用しない最もシンプルな使い方について確認していきます。
class Main {
public static void main(String[] args) {
sayHello();
}
public static void sayHello() {
System.out.println("Hello World");
return;
}
}
コードを実行すると以下のように「Hello World」と表示されます。
> sh -c javac -classpath .:target/dependency/* -d . $(find . -type f -name '*.java')
> java -classpath .:target/dependency/* Main
Hello World
基本的なメソッドの使い方
メソッドを定義するための構文は以下の通りです。
アクセス修飾子 static修飾子 返り値のデータ型 メソッド名() {
// 行いたい処理
}
メソッドを定義するために、返り値のデータ型を指定する必要があります。
Javaでのメソッド定義は、Rubyと以下の点が異なります。
① 返り値のデータ型を指定する必要がある
② 引数がないメソッドでも定義時にかっこの省略はできない
③ Rubyの「def」「end」の代わりに、波かっこでコードを囲む
① 返り値のデータ型を指定する必要がある
Javaのメソッド定義では、返り値のデータ型を指定する必要がある。
例えば、「return 1;」といったように返り値が整数型であれば、メソッド名の前に「int」と記述する。
先ほど実行したコードのように返り値がない場合は、「中身がない」ことを意味する「void」と記述します。
② 引数がないメソッドでも定義時にかっこの省略はできない
必ず「sayHello()」のようにかっこが必要です。
③ Rubyの「def」「end」の代わりに、波かっこでコードを囲む
Rubyでは、メソッド定義の開始を示す「def」という文字が必要でした。
Javaではそのような記述の代わりに、実行したい処理を「{」と「 }」で囲みます。
修飾子を理解しよう
Javaには、「修飾子」と呼ばれる機能があります。修飾子は、クラスやメソッド、変数などの定義を行う際に、特定の機能を付加するものです。
アクセス修飾子
アクセス修飾子は、外部への公開範囲を設定するためのもので、以下の3種類があります。
・public
・protected
・private
このうち、このカリキュラムでは、使用頻度の高い「public」と「private」について解説します。
この「private」という記述は、Rubyカリキュラムでも使用しました。
コントローラー内にprivateと記述することで、それ以降のメソッドをプライベートメソッドにすることができました。プライベートメソッドは、クラスの外部から呼び出すことができないメソッドです。
Javaでも基本的な考え方は一緒です。使用するアクセス修飾子によって、以下の設定を行うことができます。
アクセス修飾子の種類 | 機能 |
---|---|
private | 同一クラス内からのみアクセスできる |
public | どのクラスからでもアクセスできる |
Javaでは、publicにする必要がないものは、極力privateを使用した方が良いとされています。
なお、このアクセス修飾子はメソッドだけでなく、クラスや変数の公開範囲を設定するために使うこともできます。
static修飾子
staticは「静的」という意味の英単語です。静的とは、状態が変化しないことを意味します。
メソッドの定義の際に、staticをつけることで「静的メソッド」として定義されます。静的メソッドは、「クラスメソッド」とも呼ばれます。
クラスメソッドの役割や使い方は、Rubyカリキュラムで学習した内容とおおむね一緒です。
staticを付けない場合は、「インスタンスメソッド」として定義されます。
メソッドの実行方法を理解しよう
メソッドを実行する方法はシンプルです。
メソッド名が「sayHello」の場合は、以下のように記述することでメソッドを呼び出すことができます。
sayHello();
引数が必要ないメソッドでも、かっこは省略できないことに注意しましょう。
メソッドを使ってみよう(引数がある場合)
class Main {
public static void main(String[] args) {
var answer = square(5);
System.out.println(answer);
}
public static int square(int number){
return number * number;
}
}
コードを記述できたら実行しましょう。
値の2乗を計算するコードとなっているので、引数に「5」を指定すると以下のように「25」と表示されます。
メソッドの使い方を理解しよう(引数がある場合)
以下のように、メソッドの実行時に引数(本引数)を指定し、メソッドで引数(仮引数)を受け取る仕組みです。
この流れを、いま実行したコードで確認します。
メソッドの「定義」は以下のように行なっています。
public static int square(int number){
return number * number;
}
仮引数は、「int number」となっています。
Rubyとは違い、変数名「number」だけでなく、受け取る値のデータ型(今回はint)を指定する必要があります。
なお、このメソッドの返り値は整数型です。そのため、メソッド名の前に「int」と記述していることに注意しましょう。
また、メソッドの実行は以下のように記述しています。
var answer = square(5);
「square(5)」と、メソッドsquare()を実行する際に、引数として「5」を指定しています。
このように、引数の使い方はRubyの場合とほぼ同じで、仮引数にデータ型の指定が必要なことだけが異なるということになります。