データ構造
「
コレクション
」とは、複数のデータをひとまとめに
するクラス
ArrayList以外のコレクション
TreeSet 要素を常にソートされた状態に保ち、重複を自動的に排除する HashMap キーと値のペアを要素として保持する LinkedList ArrayListとほぼ同じだが、リスト中の任意の位置に要素を挿入・削除 するといった処理のパフォーマンスが若干高い HashSet 要素の重複を自動的に排除し、特定の要素へのアクセスが高速 LinkedHashMap HashMapとほぼ同じだが、個々の要素(キーと値のペア)の操作を、 追加された順に行うことができるデータ構造
コレクションを「
タイプセーフ
」なもの
(型につ
いての問題が起きにくいもの
)にするのが「
ジェ
ネリックス
」の目的
ArrayList
Object Object Object Object
ArrayList<Fish>
データ構造
インスタンス作成
変数の宣言と値の代入
メソッドの宣言
(呼び出し)
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);
}
① ローカル
・ユーザが全コードを自らのシステム上で動かす② ローカル、リモートの中間(コンビネーション)
・ユーザがクライアント部分のコードを自らのシステム上で動かす ・クライアント部分とサーバ部分をネットワーク経由で接続③ リモート
・全コードがサーバシステム上で動作 ・ユーザはWebブラウザを介してプログラムを利用◇ソースファイルとクラスファイルを分けて保存
① 開発プロジェクト用のディレクトリ作成(ここではMyProject) ② MyProject内にソースファイル用ディレクトリ(source)と クラスファイル用ディレクトリ(classes)作成 ③ source内にソースファイル(末尾が.java)作成 ④ ③をコンパイルし、出来上がるクラスファイルをclassesに格納 -dオプションを使ったコンパイル % cd MyProject/source% javac –d ../classes MyApp.java
or % javac –d ../classes *.java
実行 % cd MyProject/classes % java MyApp MyApp.class MyApp.java source MyProject classes
JAR(Java Archive)
Javaプログラムの実行に必要なクラスファイルを1つにまとめるツール実行可能
JARファイルの作成
① classesディレクトリに全てのクラスファイルをまとめる。 ② manifest.txtを作り、main()メソッド をもつクラス名を書き込む。 ③ jarツールを起動。classes内の全ファイル を収めたJARファイルを作成。 manifest.txt内 Main-Class: MyApp (注)行末に改行文字を入れる % cd Miniproject/classes% jar –cvmf manifest.txt app1.jar *.class
or % jar –cvmf manifest.txt app1.jar Myapp.class
MyProject Main-Class: MyApp manifest.txt manifest.txt MyApp.class classes (注)JARファイルには ソースコードを 納めない
◇
JVM(Java Virtual Machine)を用いる
1. コマンドプロンプトの場合
(注)JVMのアクセスできる場所にJARファイルを置く (CLASSPATHにJARファイルの置かれている ディレクトリが指定されている必要がある)2. アイコンの場合
・アイコンをダブルクリック ・アイコンを右クリック→「開く」メニュー % cd MyProject/classes % java –jar app1.jarclasses
Main-Class: MyApp 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クラスをパッケージに所属させる
① パッケージ名を決める ② packageステートメントを クラスのソースコードに入れる ③ パッケージの階層構造に合わせて ディレクトリ作成 package com.headfirstjava; import javax.swing.*;public class PackageExercise { //クラスのコード } MyProject source classes com com headfirst
java headfirstjava
*コンパイラと
JVMが、使用するソースファイルと
クラスファイルを全て「見つける」ことができるようにする
①
sourceディレクトリでコンパイル
(-dオプション使用)
②
classesディレクトリで実行
% cd Miniproject/source
% javac –d ../classes com/headfirstjava/PackageExercise.java % cd Miniproject/classes % java com.headfirstjava.PackageExercise -dオプション ◇コンパイルして作成されるクラスファイルの保存先を指定 ・パッケージの階層構造を認識、クラスファイル保存先を自動判別 ・パッケージの階層構造に対応するディレクトリが無ければ、 自動的に作成
*ディレクトリの階層構造ごと
JARファイルに入れる
①
classesの下に、パッケージの階層構造に
対応するディレクトリを作成。クラスファイル保存。
②
manifest.txtファイルを作成。
③
jarツールを起動。JARファイルを作成。
manifest.txt内 Main-Class: com.headfirstjava.PackageExercise (注)クラス名は必ず「完全名」 % cd Miniproject/classes% jar –cvmf manifest.txt packEx.jar com
packEx.jar PackageExercise.class manifest.txt classes com headfirst java
◇
JARファイルの内容確認
◇
JARファイルの内容抽出
% jar –tf packEx.jar META-INF/ META-INF/MANIFEST.MF com/ com/headfirstjava/ com/headfirstjava/ PackageExercise.class % cd Skyler % jar –xf packEx.jar Skyler com headfirst java PackageExercise.class MANIFEST.MF packEx.jar META-INFJWS(Java Web Start)
…ダウンロード、プログラムの起動などを行う
JWSを利用したプログラム提供
・ユーザのコンピュータ上のWebブラウザを使って起動 ・初回実行時、ユーザのコンピュータにプログラムがダウンロードされる ・2回目以降の実行には、ネットワーク接続,Webページ上のリンクの クリックが不要 ・サーバ上のプログラム変更を自動検知し、ユーザのプログラムへ 自動的に反映 *JVM,JWSの適切なバージョンをユーザのコンピュータにインストール させる必要がある① ユーザが
Webページ上の
リンク
をクリック。
拡張子「.jnlp」がついたファイルへのリンク②
Web(HTTP)サーバが、.jnlpファイルを送る。
③
JWSがブラウザによって起動される。
JWSは.jnlpファイルの内容を読み取り、
プログラムの
JARファイルを
サーバにリクエスト。
④
Webサーバが、JARファイルを提供。
⑤
JWSがプログラムを起動
<a href=“MyApp.jnlp”>Click</a>.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>
① javaファイルを用意 (ここではプロジェクト名:test1、 ソースファイル名:sleepy.java) ② プロジェクト名(ここではtest1) を右クリック→「エクスポート」 ③ 「実行可能JARファイル」を選んで 「次へ」をクリック sleepy.java
public class sleepy {
public static void main(String[] args) { System.out.println("I'm Sleepy..."); }
③ 起動構成にmain()のあるクラス(ここではsleepy)を指定、 エクスポート先(ここではデスクトップ、 ファイル名はtest1.jar)を指定して、 「完了」をクリック ④ デスクトップ上にjarファイルが 作成される ←コマンドプロンプトから 実行した結果