Javaのimport文
Java ではあらかじめ用意されたクラスを自分のプログラムの中で利用することができます。あらかじめ import 宣言を行っておくことでクラス名だけで記述することができます。
一つ前の日記では下記のように記述していました。
この記述でも問題ないですが、ずっと「 jp.co.funatz.pkgTest.a.PackageA.a(); 」のようにパッケージ名を含めた名前を入力するのは大変です。
そこで使えるのがimport文です。
import 文を使ってクラスをインポート宣言すると、パッケージ名を省略してクラス名だけでプログラムの中に記述できるようになります。
[ import パッケージ名.クラス名 ]
import 宣言はクラスの定義を行うよりも前に行うように!
実際に記述してみる。
パッケージ名を省略すること簡単に記述ができるようになります。
そのほかにimport 宣言を行う方法として、特定のクラス毎にひとつひとつ行う方法と、同じパッケージに含まれるクラスをまとめて行う方法があります。
・特定のクラス毎にひとつひとつ行う方法
→異なるパッケージの同じクラス名のクラスを使うには?
・同じパッケージに含まれるクラスをまとめて import 宣言を行う方法
java における import 文の使い方について解説しました。
Javaのパッケージ
パッケージとはJavaのクラスをまとめて分類するための仕組み
クラス数が大量にある場合、それらを機能などで分類してまとめておくとクラスの管理が容易になる。
クラスの先頭で「package」と宣言することで、そのクラスが分類されるパッケージを指定することができる。
例・・・
・パッケージを指定した場合、そのクラスのソースファイルは指定パッケージと同じ名前のフォルダに格納する必要がある。
・ファイルを移動した場合は、ソース内のパッケージ宣言も合わせて変更する必要もある。
・同一パッケージ内のクラスにはクラス名のみでアクセスが可能となっている。
・複数の階層から成るパッケージの場合は、階層の上から順に「.」でパッケージ名を連結します。
実際に一つ記述してみる。
PackageA
PackageB
mainクラス
mainクラス内の記述の仕方でないと、コンピュータ側でどこにファイルが認識できず、コンパイルエラーになる。
出力結果
実行の仕方・・・ターミナルで
次回はより簡潔に記述できるようにimportについて学んでいく。
Javaの可変長引数
メソッドで引数の数を事前に設定したくないときがあります。
例えば、入力した数字の平均値を出すというメソッドの時、何個入力するかはそのときどきで変えたい場合が出てきます。
そんなときに使えるのが、可変長引数だ。このページではJavaメソッドの可変長引数の使い方についてお伝えします。
そもそも可変長引数とは・・・?
Javaのメソッドの最後の引数は可変長引数として使うこともできます。
可変長引数とは、メソッドの定義側でひとつ引数を設定しておくと、実際につかうときにいくつも引数を記述できます。
引数の数は決まっていないが、型が同じという引数があれば、この書き方ができます。
可変長の引数は配列に入れられて、メソッドに渡される。このため、メソッド側では配列と同じ扱いで、処理を行うことができます。
一つ例を見てみましょう。
生徒のテスト平均点を表示する。クラス毎に人数が異なっても、メソッドの定義を変える必要はない。実引数の最後の点数を生徒の数に合わせて書けば問題ないです。
出力結果は、
上記のようになる。
書き方としては、メソッドの引数の定義では、最後の引数の型と識別子の間に、「…」を入れて記述。これで可変長だと宣言したことになる。
ここで、簡単にメソッドに渡される値が、配列だということを確認しておく。
出力結果は下記の通り
となる。
ぜひ参考にしてください。
Javaのオーバーロード
メソッドを引数を付けて呼び出す時、引数に記述する値のデータ型はメソッドで決められたものしか指定できないのがJavaのルールです。
その為、同じような機能を持つメソッドであっても引数のデータ型が異なれば別々のメソッドを用意する必要があります。
一つ例を見てみましょう。
上記の例ではint型の値の加算を行うメソッドとdouble型の値の加算を行うメソッドを2つ用意しています。これはこれで間違っていませんが、同じような機能を持つメソッドであれば引数のデータ型が異なっていても同じメソッド名を使って呼び出せると便利です。
Javaでは引数のデータ型や引数の数が完全に一致していなければ異なるメソッドに同じメソッド名を付けることが出来ます。
ここで上記の例を書き換えてみます。
addメソッドは同じクラスの中に2回定義されていますが、引数の数は同じでも引数のデータ型が異なるため区別することが可能となっています。
メリットとしては、メソッド名を明確に分けたほうが便利な場合もありますが、メソッド名を同じにしておけば引数のデータ型を意識することなく利用することができる点です。
その他に
・引数のデータ型と数は同じでも順番が異なっている場合もオーバーロード可能です。
最後にオーバーロードできない場合も簡単に紹介します。
・引数の変数名だけが異なっている場合
・戻り値だけが異なっている場合
はNGとなります。
みなさんも自分で記述してみてください!
Javaの引数と戻り値
プログラムを組む上で重要な要素となっているので少しずつ理解を深めましょう。
プログラムにおいて、「この値を使ってデータを処理して欲しい」というときに、渡す値のことを引数(ひきすう)
戻り値とは、引数を引き渡した結果、返って来る値のこと
となっています。
実際に記述してみます。
上記において「社員A」「30」はどちらも引数にあたります。このように、引数は複数を指定することもできます。
この処理を実行すると、
「社員Aさんの年齢は30歳です」と出力されます。
このように文字列と整数の両方、また配列を引数とすることもできます。
上記の文で「 a + b 」という式の結果を戻り値として返しています。a=10でb=5なので、「 15 」という値が戻り値となります。
最後に引数を使ってメソッドにデータを渡してみる
この処理を実行すると、
「ラーメンが好きです」と出力されます。
「like(name)」という記述で、likeメソッドにnameという引数を引き渡しています。
呼び出したメソッド内で使用した変数の値も、呼び出し元のメソッドの中では使用できない点には注意が必要です。メソッドで算出した値を戻したい場合には「戻り値」を使う必要があります。
引数について理解を深めることは、Javaでできることの範囲を広げることにつながりますので、書き方について覚えていきましょう。
メソッドの定義と呼び出し方
まずは下記のように記述していきます。
出力結果としては「15」が出力される。
この数行記述するだけなら問題ないが、現場では数百を超えるプログラムの記述量になってくる。長くなることや、どこで何を記述しているかわからなくなってきてしまうことがある。
そこで、「 main 」メソッド以外のメソッドを増やし、分けて記述していく方がわかりやすくなってくる。
※メソッド→簡単に言うとプログラムに行なってもらう処理
実際にメソッドを定義して書き換えてみる
上記のように書き換えることができる。
今回メソッド名は足し算の意味をもつ「add」としています。
これをメソッドの定義という。
このaddメソッドを作成しただけでは、処理は実行されないので、
mainメソッド内で「 add(); 」を実行する。
このように記述することで、出力結果は同じ「15」になる。
※mainメソッドとaddメソッドのブロック{ }は別々にするように!
以上、簡単にメソッドの定義と呼び出し方について書いてみました。
Javaの配列と繰り返し構文
配列の各要素に入れた値を表示させる時、一つ一つindexを指定して表示させる方法があるが、要素の個数が多くなる場合、行数が増えてコードが見づらくなる恐れがある。
→先日紹介した、forループを利用することで繰り返すことで表示ができる
・forループ使わない場合
現状は要素の数が3つなのでこのまま記述しても問題ないが、数が増え100や1000になってくるとこのまま記述するのは効率も悪くなってくる
・forループ使った場合
for文の「 i < 3」は要素の個数が3未満になるまで繰り返すの意味なので、「System.out.println(customer[i]);」では「 0 , 1 , 2 」が出力される
100個まで増えた場合、「 customer = new String[3]; 」の[ ]内を100に変更すればいいが、プログラムが大きくなるにつれ数字の変更し忘れや、ミスも出てくる可能性がある
そのため、for文の「 i < 3」を下記のように書き換えることができる
「 i < customer.length; 」・・・要素の個数を「 配列変数.length 」で表現ができる
要素が増えてもforループの繰り返し条件の数値を変更しなくて済むことになる
一番最後のように記述できれば、他の人がコードを見てもわかりやすい・ミスが減るなどメリットが多いのでぜひ覚えてください!