□技術メモ - Java-sample-1 ※管理人の個人的な技術メモです。サンプルソースを実行した結果について 管理人はいかなる責任も負いかねますのでご自身の責任でお試しください。 ----------------------------------------------------------- ○classpath, package, importについて コマンドプロンプトで、c:\work に移動して、以下を実行する。 (classpathを定義してあるので、他の場所からもコンパイル、および実行が可能です) 以下のクラスを定義する。 c:\work\kanto\kana\odawara\odawara.java package kanto.kana.odawara; public class odawara { public static void main(String[] args) { System.out.println("こちら、小田原城!"); } } c:\work\kanto\sai\gyoda\oshi.java package kanto.sai.gyoda; public class oshi { public static void main(String[] args) { System.out.println("こちら、忍城!"); } public static void main2() { System.out.println("忍城で戦闘が開始されました!"); } } 上記のクラスを以下によりコンパイル、実行する。 コンパイルは、クラスパスを起点として、ファイルパスを取得できるようにする。 実行時は、クラスパスを起点として、パッケージ名を含めたクラス名を取得できるようにする。 javac -cp c:\work kanto\kana\odawara\odawara.java java -cp c:\work kanto.kana.odawara.odawara javac -cp c:\work kanto\sai\gyoda\oshi.java java -cp c:\work kanto.sai.gyoda.oshi ここで、odawaraからoshiを呼び出すには以下のようにoshiをimportすればよい。 importは、クラスパスを起点として、、パッケージ名を含めたクラス名を取得できるようにする。 c:\work\kanto\kana\odawara\odawara2.java package kanto.kana.odawara; import kanto.sai.gyoda.oshi; public class odawara2 { public static void main(String[] args) { oshi.main(args); //クラス名.メソッド名の形式で呼び出す oshi.main2(); //静的呼び出しなのでクラス名の指定が必要 } } 上記のクラスは以下によりコンパイル、実行できる。 javac -cp c:\work kanto\kana\odawara\odawara2.java java -cp c:\work kanto.kana.odawara.odawara2 ----------------------------------------------------------- ○interfaceの例 ・D:\study\a20150227\a1234\ に以下のファイルを作成して jc.bat でビルドする。 ・jc.bat の最後の行で実行される。 ・sky_earクラスのgetString()メソッドは、interfaceを使うことで1メソッドになる。 ・IFクラスの先頭は「I」, Implements(実装)クラスはファイル名の最後に「Impl」を付けることが多い。 -------- 実行結果 UNO : 大野 DOS : は TRES : とりあえず CUATRO : 暴露(強く発音する) -------- jc.bat javac -classpath D:\study\a20150227 D:\study\a20150227\a1234\ifnum.java javac -classpath D:\study\a20150227 D:\study\a20150227\a1234\sky_ear.java javac -classpath D:\study\a20150227 D:\study\a20150227\a1234\uno.java javac -classpath D:\study\a20150227 D:\study\a20150227\a1234\dos.java javac -classpath D:\study\a20150227 D:\study\a20150227\a1234\tres.java javac -classpath D:\study\a20150227 D:\study\a20150227\a1234\cuatro.java REM packageのデリミタは \ ではなく . であることに注意 java -classpath D:\study\a20150227 a1234.sky_ear -------- ifnum.java package a1234; public interface ifnum{ public String getItem(); } -------- uno.java package a1234; public class uno implements ifnum{ public String getItem() { return new String("UNO : 大野\n"); } } -------- dos.java package a1234; public class dos implements ifnum{ public String getItem() { return new String("DOS : は\n"); } } -------- tres.java package a1234; public class tres implements ifnum{ public String getItem() { return new String("TRES : とりあえず\n"); } } -------- cuatro.java package a1234; public class cuatro implements ifnum{ public String getItem() { return new String("CUATRO : 暴露(強く発音する)\n"); } } -------- sky_ear.java package a1234; import a1234.uno; import a1234.dos; import a1234.tres; import a1234.cuatro; public class sky_ear { //soramimi public static void main(String[] args) { uno Uno = new uno(); dos Dos = new dos(); tres Tres = new tres(); cuatro Cuatro = new cuatro(); StringBuffer sb = new StringBuffer(); sb.append(getString(Uno)); sb.append(getString(Dos)); sb.append(getString(Tres)); sb.append(getString(Cuatro)); System.out.println(sb); } // public static String getString(uno pUno) { //インターフェースがないとそれぞれの型に合わせた // return pUno.getItem(); //メソッドが必要になる。 // } // public static String getString(dos pDos) { // return pDos.getItem(); // } // public static String getString(tres pTres) { // return pTres.getItem(); // } // public static String getString(cuatro pCuatro) { // return pCuatro.getItem(); // } public static String getString(ifnum pObj) { //インターフェイスを使って引数の型を統一 return pObj.getItem(); } } -----------------------------------------------------------