三谷純
データ構造 コレクション とは 複数のデータをひとまとめにするクラス ArrayList 以外のコレクション TreeSet 要素を常にソートされた状態に保ち 重複を自動的に排除する HashMap キーと値のペアを要素として保持する LinkedList ArrayList とほぼ同じだが リスト中の任意の位置に要素を挿入 削除するといった処理のパフォーマンスが若干高い HashSet 要素の重複を自動的に排除し 特定の要素へのアクセスが高速 LinkedHashMap HashMap とほぼ同じだが 個々の要素 ( キーと値のペア ) の操作を 追加された順に行うことができる
データ構造 コレクションを タイプセーフ なもの ( 型についての問題が起きにくいもの ) にするのが ジェネリックス の目的 ジェネリックス導入前 ジェネリックス導入後 ArrayList ArrayList<Fish> Object Object Object Object
データ構造 インスタンス作成 new ArrayList<Song>(); 変数の宣言と値の代入 List<Song> songlist = new ArrayList<Song>(); メソッドの宣言 ( 呼び出し ) void foo(list<song> list); x.foo(songlist);
133 ページ参照 ArrayList<Egg> mylist = new ArrayList<Egg>(); Egg s = new Egg(); mylist.add(s); Egg b = new Egg(); mylist.add(b);
for(int i = 0; i < mylist.size(); i++) { Egg e = mylist.get(i); boilegg(e); } for(egg e : mylist) { boilegg(e); }
1 ローカル ユーザが全コードを自らのシステム上で動かす 2 ローカル リモートの中間 ( コンビネーション ) ユーザがクライアント部分のコードを自らのシステム上で動かす クライアント部分とサーバ部分をネットワーク経由で接続 3 リモート 全コードがサーバシステム上で動作 ユーザは Web ブラウザを介してプログラムを利用
ソースファイルとクラスファイルを分けて保存 1 開発プロジェクト用のディレクトリ作成 ( ここでは MyProject) 2 MyProject 内にソースファイル用ディレクトリ (source) とクラスファイル用ディレクトリ (classes) 作成 3 source 内にソースファイル ( 末尾が.java) 作成 4 3 をコンパイルし 出来上がるクラスファイルを classes に格納 -d オプションを使ったコンパイル % cd MyProject/source % javac d../classes MyApp.java or % javac d../classes *.java 実行 % cd MyProject/classes % java MyApp classes MyApp.class MyProject source MyApp.java
JAR(Java Archive) Java プログラムの実行に必要なクラスファイルを 1 つにまとめるツール 実行可能 JAR ファイルの作成 1 classes ディレクトリに全てのクラスファイルをまとめる 2 manifest.txt を作り main() メソッドをもつクラス名を書き込む manifest.txt 内 Main-Class: MyApp ( 注 ) 行末に改行文字を入れる 3 jar ツールを起動 classes 内の全ファイルを収めた JAR ファイルを作成 Main-Class: MyApp manifest.txt % cd Miniproject/classes % jar cvmf manifest.txt app1.jar *.class or % jar cvmf manifest.txt app1.jar Myapp.class MyProject classes MyApp.class manifest.txt ( 注 )JAR ファイルにはソースコードを納めない
JVM(Java Virtual Machine) を用いる 1. コマンドプロンプトの場合 % cd MyProject/classes % java jar app1.jar classes ( 注 )JVM のアクセスできる場所に JAR ファイルを置く (CLASSPATH に JAR ファイルの置かれているディレクトリが指定されている必要がある ) Main-Class: MyApp 2. アイコンの場合 アイコンをダブルクリック アイコンを右クリック 開く メニュー app1.jar
複数のクラスをまとめるもの ライブラリ中のクラスを整理しやすくする クラス名の重複を防ぐ パッケージ A の count クラス パッケージ B の count クラス パッケージ A の count クラス パッケージ A の count クラス セキュリティの確保例 ) 同じパッケージに属するクラスでのみ利用できるクラス ( 注 ) パッケージ名を重複させてはいけない ドメイン名を逆にした命名が一般的例 ) com.headfirstjava.project.~ Java API に属するパッケージの例 java.text.numberformat java.util.arraylist java.awt.flowlayout java.awt.event.actionevent java.net.socket
クラスをパッケージに所属させる 1 パッケージ名を決める 2 packageステートメントをクラスのソースコードに入れる package com.headfirstjava; MyProject import javax.swing.*; public class PackageExercise { // クラスのコード } 3 パッケージの階層構造に合わせてディレクトリ作成 classes com headfirst java source com headfirst java PackageExercise.class PackageExercise.java
* コンパイラと JVM が 使用するソースファイルとクラスファイルを全て 見つける ことができるようにする 1 source ディレクトリでコンパイル (-d オプション使用 ) % cd Miniproject/source % javac d../classes com/headfirstjava/packageexercise.java 2 classes ディレクトリで実行 % cd Miniproject/classes % java com.headfirstjava.packageexercise -d オプション コンパイルして作成されるクラスファイルの保存先を指定 パッケージの階層構造を認識 クラスファイル保存先を自動判別 パッケージの階層構造に対応するディレクトリが無ければ 自動的に作成
* ディレクトリの階層構造ごと JAR ファイルに入れる 1 classes の下に パッケージの階層構造に対応するディレクトリを作成 クラスファイル保存 2 manifest.txt ファイルを作成 manifest.txt 内 Main-Class: com.headfirstjava.packageexercise ( 注 ) クラス名は必ず 完全名 3 jar ツールを起動 JAR ファイルを作成 classes manifest.txt % cd Miniproject/classes % jar cvmf manifest.txt packex.jar com com headfirst java packex.jar PackageExercise.class
JAR ファイルの内容確認 % jar tf packex.jar META-INF/ META-INF/MANIFEST.MF com/ com/headfirstjava/ com/headfirstjava/ PackageExercise.class JAR ファイルの内容抽出 % cd Skyler % jar xf packex.jar META-INF Skyler packex.jar com headfirst java MANIFEST.MF PackageExercise.class
JWS(Java Web Start) ダウンロード プログラムの起動などを行う JWS を利用したプログラム提供 ユーザのコンピュータ上の Web ブラウザを使って起動 初回実行時 ユーザのコンピュータにプログラムがダウンロードされる 2 回目以降の実行には ネットワーク接続,Web ページ上のリンクのクリックが不要 サーバ上のプログラム変更を自動検知し ユーザのプログラムへ自動的に反映 *JVM,JWS の適切なバージョンをユーザのコンピュータにインストールさせる必要がある
1 ユーザが Web ページ上のリンクをクリック 拡張子.jnlp がついたファイルへのリンク <a href= MyApp.jnlp >Click</a> 2 Web(HTTP) サーバが.jnlp ファイルを送る 3 JWS がブラウザによって起動される JWS は.jnlp ファイルの内容を読み取り プログラムの JAR ファイルをサーバにリクエスト 4 Web サーバが JAR ファイルを提供 5 JWS がプログラムを起動
.jnlp(java Network Launch Protocol) ファイル 実行可能 JAR ファイルの名前などが記述された XML ファイル <?xml version= 1.0 encodeing= utf-8?> <jnlp spec= 0.2 1.0 codebase= http://127.0.0.1/~kathy href= MyApp.jnlp > <information> <title>kathy App</title> <vendor>wickedly Smart</vendor> <homepage href= index.html /> <description>head First WebStart demo</description> <icon href= kathys.gif /> <offline-allowed/> </information> <resources> <j2se version= 1.3+ /> <jar href= MyApp.jar /> </resources> <application-desc main-class= HelloWebStart /> </jnlp>
1 java ファイルを用意 ( ここではプロジェクト名 :test1 ソースファイル名 :sleepy.java) sleepy.java public class sleepy { public static void main(string[] args) { System.out.println("I'm Sleepy..."); } } 2 プロジェクト名 ( ここでは test1) を右クリック エクスポート 3 実行可能 JAR ファイル を選んで 次へ をクリック
3 起動構成に main() のあるクラス ( ここでは sleepy) を指定 エクスポート先 ( ここではデスクトップ ファイル名は test1.jar) を指定して 完了 をクリック 4 デスクトップ上に jar ファイルが作成される コマンドプロンプトから実行した結果