9:パッケージ | Java入門メモ

Java入門メモ

Javaの基礎知識についてゆるゆると書いています

※初めてこのサイトに来た方は

↓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な変数、メソッドが使える」ようになります。


//今日の日付の表示(正しく表示されません)


System.out.println("今日の日付は" + Calendar.YEAR + "年" + (Calendar.MONTH + 1) + "月" + Calendar.DATE + "日");


↑この処理のCalendar.YEARなどは


「Calendarクラスのstatic変数YEAR」を指します。


CalendarクラスのYEARの値を直接参照しているのです。


実は自分で作ったクラスも


フォルダが同じなら(または関連パッケージ内なら)


同じようにstaticな要素が使えます。


フォルダが同じならインポートしなくても


自分で作ったクラスのstaticな要素は使えます。



4.クラスを使いこなすには



 もしかしたら、こんな事を考えている人がいるかもしれません。


「直接インスタンスの中の変数の値を変えられるなら


コンストラクタっていらないじゃん」


でも、Javaであらかじめ用意されているクラスの中には


「引数を入力しなければインスタンスが作れない」ように


コンストラクタを設定しているクラスもあります。


その場合、必ず引数の条件を満たさなければなりません。


つまり


HelloWorld () {


}


↑のような「引数が無いコンストラクタが存在しない」クラスがあるのです。


更に「継承」という概念を使い始めると


コンストラクタは無視できないものになります。


クラスを使いこなす為には、コンストラクタの使い方を覚えなければなりません。