※初めてこのサイトに来た方は
↓Java入門メモについて(必読)を読んでください。
http://ameblo.jp/javareference/entry-10815079120.html
まずは↓を実行してみてください。
import java.util.Random;
import java.util.Calendar;
class PackageTest {
static Random a;
static int b;
static Calendar c;
static int year;
static int month;
static int date;
public static void main(String[] args){
//ランダムな数の生成と表示
a = new Random();
b = a.nextInt(10); //int型のランダムな数の生成
System.out.println(b);
//今日の日付の表示(正しく表示されません)
System.out.println(
"今日の日付は" +
Calendar.YEAR + "年" +
(Calendar.MONTH + 1) + "月" +
Calendar.DATE + "日"
);
//正しい日付の表示
c = c.getInstance(); //Calenderインスタンスの初期化
year = c.get(Calendar.YEAR); //年の正確な値の代入
month = c.get(Calendar.MONTH); //月の正確な値を-1した数の代入
date = c.get(Calendar.DATE); //日付の正確な値の代入
System.out.println( //今日の日付の表示
"今日の日付は" +
year + "年" +
(month + 1) + "月" +
date + "日"
);
}
}
|
↓実行結果
| (10未満のランダムな数が表示される) 今日の日付は*年*月*日(表示が正しくない) 今日の日付は*(西暦)年*月*日 |
先に文の説明をします。
流し読みでOKです。
| ランダムな数の生成と表示 |
a = new Random();
1行目でRandomクラスのインスタンスaを生成しています。
2行目でRandomクラスのメソッド「nextInt()」を使っています。
このメソッドの中でランダムな数が生成されます。
生成された数は戻り値として出力されるので
生成された数をint型の変数bに代入しています。
()の中に引数として10と書いてありますが
これは「0以上10未満」のランダムな数の生成をしてくださいという指示です。
3行目でコマンドプロンプトに表示しています。
| 正しい日付の表示 |
c = Calendar.getInstance()とありますが
Calendarクラスは普通にインスタンスを作る事ができません。
なのでgetInstance()というメソッドを使うと
Calendarインスタンスを戻り値として出力してくれるのです。
その出力されたインスタンスをcに代入しています。
Calendar.YEAR、Calendar.MONTH、Calendar.DATEとは
Calendarクラス内のYEAR、MONTH、DATEという変数を呼び出す文です。
詳しくは後で説明します。
このままCalendarクラス内のYEAR、MONTH、DATEを表示しても
表示される値は正確ではないので
c.get();で正しく表示されるように値を形成しています。
形成した結果は戻り値として出力されるので
自分で作った変数year、month、dateに代入しています。
| 1.パッケージとクラスの呼び出し |
では本題です。
いつもと違って
class PackageTest { の上に
import java.util.Calendar;
import java.util.Random;
と書いてありますが
これは
「Javaのソフトに元々入っているクラスの呼び出し」
なのです。
自分でクラスを作ったかのように
自由にクラスのインスタンス化等ができるようになります。
「java.util」までは「パッケージ」といいます。
一番最後の
「Calendar」がクラス名です。
「import」と先頭に付けてパッケージからクラスを呼び出す事を
「インポート」といいます。
パッケージとは、クラスがたくさん入ったフォルダのようなものです。
自分でパッケージを作る事もできますが、割愛します。
java.utilパッケージには色々な機能の要素が入っています。
| 2.複数のクラスの呼び出し |
import java.util.*;
と書くと、「java.util」パッケージの中の
「クラス」と「インターフェース」を全て呼び出すことができます。
(インターフェースは他の解説サイトで調べてください)
「全てのパッケージは独立」しているので
import java.*;と書いても
全てのパッケージのクラスを呼び出せるわけではありません。
import java.*;の場合は
「java」パッケージの中の「クラス」と「インターフェース」だけ呼び出せます。
この場合、「java.util」パッケージや、「java.util」内のクラスなどは
呼び出されません。
(あくまで例です。「java」パッケージは存在しません)
| 3.インポートとstatic変数 |
インポートすると
「インスタンスを作らなくても
インポートしたクラスのstaticな変数、メソッドが使える」ようになります。
| //今日の日付の表示(正しく表示されません)
|
↑この処理のCalendar.YEARなどは
「Calendarクラスのstatic変数YEAR」を指します。
CalendarクラスのYEARの値を直接参照しているのです。
実は自分で作ったクラスも
フォルダが同じなら(または関連パッケージ内なら)
同じようにstaticな要素が使えます。
フォルダが同じならインポートしなくても
自分で作ったクラスのstaticな要素は使えます。
| 4.クラスを使いこなすには |
もしかしたら、こんな事を考えている人がいるかもしれません。
「直接インスタンスの中の変数の値を変えられるなら
コンストラクタっていらないじゃん」
でも、Javaであらかじめ用意されているクラスの中には
「引数を入力しなければインスタンスが作れない」ように
コンストラクタを設定しているクラスもあります。
その場合、必ず引数の条件を満たさなければなりません。
つまり
HelloWorld () {
}
↑のような「引数が無いコンストラクタが存在しない」クラスがあるのです。
更に「継承」という概念を使い始めると
コンストラクタは無視できないものになります。
クラスを使いこなす為には、コンストラクタの使い方を覚えなければなりません。