Javaについて ~座学編へようこそ
- Javaについて ~座学編の情報を載せるサイトです。
- このページは自由に編集することができます。
- 画像情報やら、文字情報やら、コーディングまでいろいろ残していきましょう。
オブジェクト指向(OOP)の基本
オブジェクトという単位によりシステム化対象となる
ビジネスをオブジェクト間のコミュニケーションシステムを
オブジェクトの集合とオブジェクトの振る舞いをプログラムととらえて記述する
UMLの基本
OMG(オブジェクト指向の標準化団体)の標準
→ 同じ表現で統一される|分析や設計の精度が上がる
| 分析フェーズ |
ユースケース図 |
システムのサービスを表現するため |
|
クラス図 |
どんな概念があるのかを把握するため |
| 設計フェーズ |
クラス図 |
システムの構造を表すため |
|
シーケンス図 |
オブジェクトの振る舞いを表すため |
Java言語の基礎
class <クラス名> {
<[[Java]]の命令>
@interface
// クラスの宣言
@end
@implementation
// クラスの実装
@end
}
Javaパッケージ
- パッケージの宣言, クラスを機能や役割毎にグループ化する方法
package <パッケージ名>
- パッケージ化されたクラスを呼び出す場合完全クラス名で呼び出す必要がある
import宣言を行う事で完全クラス名を用いなくてもよい
パッケージルートは環境変数CLASSPATHHで行う
コンパイルオプション-classpathでも可
Javaのパッケージの利点
同じ役割のクラス・インタフェースをまとめるとその意味がわかりやすくなる
同じ名前を持つクラス・インタフェースが複数ある場合名前の衝突を避けられる
クラス・メンバ変数・メソッド・コンストラクタにアクセス制限をつけられる
Java基本コマンド
1. コンパイル
javac ***.java
デバック情報生成付きでコンパイル(jdb使用時) javac -g ***.java
詳細情報出力付きでコンパイル javac -verbose ***.java
JAVA1.1のバージョンのクラスファイルを生成 javac -target 1.1 ***.java
2. Javaの実行
java ***
Javaの詳細情報付きで実行 java -verbose ***
ヘルプファイルの表示 java -?
3. カレントディレクトリーのクラスファイルをjarfile.jarに格納
jar cf ***.jar *.class
JARファイルの内容の表示 jar tf jarfile.jar
JARファイルからのファイルの取り出し(全て) jar xf ***.jar
JARファイルからのファイルの取り出し(ファイルの指定) jar xf ***.jar someclassfile.class
JARファイル内のファイルの更新 jar -uf ***.jar class1.class
4. Java逆アッセンブラー
javap classfile
5. Javaデバッカー
jdb classfile
6. ドキュメントツール
javadoc javafile.java
※/** - - - comments - - - */ のコメントはjavadocで処理される
7. Cヘッダー、スタブファイル生成
javah
Javaプラットフォームと関連テクノロジー
1. Standard Edition (Java SE) : デスクトップ用
2. Enterprise Edition (Java EE) : Webサーバ用
3. Micro Edition (Java ME) : 携帯端末用
1. ユーザー入力に対する検証チェック
Client : 余計なトラフィックを発生させないための補助的な検証
Server : 最終的にデータを受け取る際の厳密な検証
2. n層アーキテクチャ
Client : User Interface (Presentation)層
Server : 高負荷な処理、またはDB連携などを要求されるビジネスロジック層
3. データ量
Client : 比較的少量のデータ
Server : 巨大なデータ
クライアントサイドテクノロジー
Javaアプレット (ネットワークを通して主にWebブラウザにダウンロードされ実行されるJavaアプリケーション)
サーバーサイドテクノロジー
1. サーブレット (Servlet): HTTPのリクエストを処理してレスポンスを返す
2. JSP (Java Server Pages): WebページにJavaプログラムを埋め込む
3. EJB (Enterprise JavaBeans): サーバーサイドで動作するコンポーネントを実現する
Javaで使える文字
a ~ z, A ~ Z, 0 ~ 9, _, $
※0 ~ 9は先頭文字に使えない Javaの予約語と同名は不可
プリミティブ型(基本データ型)と宣言
(1)-128 ~ 127
char(2)-32768~32767
short(2)-32768~+32767
int(4) -2147483648~+2147483647
long(8)-263~263-
1/float(4)仮数部232、指数部28/double(8) 仮数部252、指数部211
リテラル
型をテキストで表現
25⇒10進数で25(int型)
025⇒8進数の25/0x25
16進数の25(int型)/25L⇒long型で10進の25/0x25L⇒long型で16進の25
配列
配列の宣言配列名 型名[];/型名[] 配列名;/配列の生成 配列名=new型名[要素数];/配列の宣言と生成を同時に行う場合 型
名 配列名[]=new 型名[要素数];/型名[] 配列名=new 型名[要素数];(多次元配列は[]の数が増えるだけ)。配列の初期
化 int 配列名[]={初期値1,初期値2};/int 配列名[]=new int[]{初期値1,初期値2};
演算子
ビット演算子
AND/OR/XOR/NOT
シフト演算子
<</>>/>>>
左ビットシフト: はみ出したビットは捨て右から0を補充
右ビットシフト: はみ出したビットは捨て左からシフト前と同じビットを補充
ただし>>>を使用した場合は左から0を補充
instanceof演算子
そのクラスのインスタンスかどうかを調べるための演算子
※インクリメント, デクリメント演算子は変数の前に記述するか後に記述するかのよって動作が異なる
Switch文
引数はプリミティブ型(int/short/char/byte/enum)
default句は最後でなくても可
※enumはJDK5.0より追加
タイプセーフenum C, C++のenumと違い定数毎にクラスを作り
定数をその中に納める事により、定数の使われ方に誤りが出にくい
応用も可能。switch, equals等が使用可能
オブジェクト指向
属性⇒オブジェクト毎に持つデータ項目
操作(機能)⇒オブジェクト自身の属性値を変えるための機能
カプセル化
属性の情報更新を行う操作を保持していること
データ隠匿⇒属性を見えない状態にしておくこと
オブジェクトの生成
new クラス名();
<クラス名> <変数名> = new <クラス名>();
オブジェクトを参照するための変数を参照型変数=プリミティブ型(値を代入)。変数=参照型(参照を渡す)。変数=null()
インスタンスメンバ(メソッド)
各メンバはオブジェクト生成によって使用する事ができる
staticメンバ(クラスメンバ)オブジェクトの生成を行わなくても使用する事ができる
メンバ変数の初期化
byte, short, int=0 / long=0L / float=0.0F / double=0.0D / char=\u0000 / boolean=false / 参照型=null
ガベージコレクション
全ての参照から切れた場合対象となる
即座に実行されるわけではない
オーバーロード
引数リストの内容(型と並び)がユニークでなければならない
コンストラクタ・デフォルトコンストラクタ
オブジェクト生成時に自動的に呼び出される特殊なメソッド
コンストラクタからコンストラクタを呼び出す場合を除いて
1. オブジェクト生成後に呼び出す事はできない
2. クラス名と同名でなければならない。戻り値の定義がいらない
3. オーバーロードが可能
コンストラクタからコンストラクタを呼び出す場合メソッドの先頭から呼び出さなければならない
デフォルトコンストラクタ, コンストラクタが存在しない場合自動的に作成される
引数がない場合は空メソッド
クラス継承
class <サブクラス名> extends <スーパークラス名>
一度に継承できるのは一クラスのみ コンストラクタは引き継がれない
オーバーライド
メソッドの場合: 戻り値型、メソッド名、引数(型と順番)を完全一致させる必要がある
変数の場合: 型、変数名が完全一致でなければならない
オーバーライドしたメソッドもsuperを使えば使用できる
オーバーライド時のアクセス修飾子はスーパークラス側メソッドよりもアクセスレベルを狭くしてはならない。
super
スーパークラスのメソッドを明示的に呼び出す
super.<メンバ変数名>
super.<メンバメソッド名>
コンパイラによって暗黙的にsuperが補完される場合がある
インタフェース
インタフェースクラス(クラスの雛形)を取り込みクラスのインタフェースを統一
インタフェースに定義された抽象メソッドを全て実装する必要がある
インタフェースで宣言された変数は無条件にpublic final staticとなる
インタフェースで宣言されたメソッドは無条件にpublic abstractとなる
インタフェースクラスは抽象メソッドのみ(abstractクラスは通常メソッドと抽象メソッドの両方を宣言できる)
継承と一緒に実装が可能。複数の実装が可能。
アクセス修飾子
どの位置のクラスからメンバへのアクセスを許可するかどうかの指定
以下広い順に・・・
public: 無制限protected: 自身のクラスのサブクラス 自身が所属するパッケージクラス内を許可
省略: 自身クラスが所属するパッケージ内のみアクセス許可
private: 自身のクラス内部のみ可
メンバ修飾子
final: 宣言時の初期化 更新は不可 メソッドに指定された場合オーバーライド不可
nativ: 他の言語で作成されたプログラム指定
synchronaized: マルチスレッド処理の排他・同期制御を行う
transient: シリアライズ対象から除外する場合に指定する
volatile: マルチスレッド処理で排他・同期制御を行う場合に使用
abstract: 抽象クラス、抽象メソッドの定義に用いる。
クラス修飾子
public: 無制限にほかのクラスからのインスタンス化やアクセスを許可する
一ファイルに一つのみ設定可能でさらにクラス名はファイル名と一致させなければならない
省略: 自クラスが所属するパッケージ内のクラスからのみオブジェクト生成やアクセスを許可する
final: 継承不可クラス
abstract: そのクラス自身のオブジェクトは生成できない
共通機能は抽象クラス内で実装しと固有機能部分を抽象メソッドで宣言する
abstractクラスを実装したサブクラスで実装する
※インタフェースクラスとabstarctクラスの違い:
同じ操作を持った別機能を作りたい場合はインタフェース
この操作(機能)だけは特別に必要とかいった場合はabstarctを継承する
例外処理
try-catch
try: 例外発生が予想される処理を記述
catch: 例外処理を行う
finally: try内での例外の発生有無にかかわらず必ず処理
例外のパス
例外を呼び出し元にパスし一元管理する機能
アサーション
処理の妥当性をチェックする機能
assert <条件式>;
assert <条件式> : <式>;
ラッパークラス
プリミティブデータを属性として保持し操作を使って任意の型へ変換する事が可能
それ以外にも最大値(<クラス名>.MAX_VALUE), 最小値(<クラス名>.MIN_VALUE)なども保持
byte⇒Byte/short⇒Short/int⇒Integer/long⇒Long/float⇒Float/double⇒Double/char⇒Character/boolean⇒Boolean
文字列の取り扱い
String : 更新不可
StringBuffer : メソッドを用いて更新可能
Stringクラス
length() : 文字列の長さ
charAt(int i) : 先頭から数えてiの位置にある文字列
substring(int i) : 先頭から数えてiの位置以降の文字列
indexOf(String s) : 先頭から検索し最初に引数の文字列が現れる位置
toUpperCase()/toLowerCase() : String内のすべての文字を大/小文字に変換
trim() : 文字列前後の空白を取り除いた文字列
replace(char a,char b) : 文字列aを文字列bに全て置き換えた文字列
concat(String s) : 引数の文字列を末尾に連結
StringBufferクラス
insert(int i,String s) : 0番目から数えてi番目の位置にsの文字列を挿入
append(String s) : 文字列の末尾にsの文字列を追加
capacity() : 確保しているメモリの有効文字数toString() : Stringオブジェクト
revers() : 文字列並びを反転
ハッシュコード
オブジェクトに割振られたユニークな番号
同一オブジェクトであるかどうかの判定に使用
コレクションフレームワーク
複数のオブジェクトを管理するための枠組み
List系 : 配列になっており格納されている要素の番号で管理
Set系 : 順番と重複を意識しない, 同じオブジェクトは複数保持できない
Map系 : オブジェクトに名前(キー)をつけて管理
コレクション内のオブジェクトに名前(キー)をつけて管理することができる
同じオブジェクトへの参照を複数保持することができる
同一キーを複数登録することはできない)
スレッド
スレッドオブジェクトの生成
<スレッド名> a = new <スレッド名>();
スレッドの作成
a.start();
スレッドを一定時間待機
a.sleep( <待機時間> );
Runnableインタフェースを実装
class aaa implements Runnable
Runnable実装クラスのオブジェクトを引数にスレッドを生成
<スレッド名> b = new <スレッド名>( c );
スレッドの状態
実行中 : 動いているスレッド
実行待ち : 実行可能だけど待っている状態
待機中 : 処理を行えない状態
スレッドの機能
join() : スレッド終了の待合わせ
interrupt() : メソッドによる割込み, スレッドの優先順位
JDK5.0で追加された機能
拡張For
JDK5.0で追加された機能
for( <変数宣言> : <参照変数名> ){ // 処理
Autoboxing/Unboxing
Autoboxing: 基本データ型の値をinteger型等のラッパークラス型へ自動変換する
Unboxing: コードを簡素化できるが負荷は大きくなる
ジェネリックス
指定された型でクラスを扱う事を明示するコンパイラ機能
明示する事によって実行時の例外を無くしコーディングをシンプルにする事ができる
例: List<String> list = ArrayList<String>();
Stringオブジェクトを格納するArrayList
staticインポート
staticメンバへ修飾なしでアクセスできる
(修飾あり)double r = Math.cos(Math.PI * theta); ⇒ (修飾なし)double r = cos(PI * theta);
可変長引数
引数を指定可能
例: public void XXX(String... aaa)
アノテーション
Javaの記述に注釈を付ける機能
マーカー・アノテーション:データが無く名前だけを持つアノテーション
単一値アノテーション: データを1つだけ持つアノテーション見かけはメソッド呼び出しに似ている
フル・アノテーション: 複数のデータを持つアノテーション
バグ・不具合を見つけたら? 要望がある場合は?
お手数ですが、メールでお問い合わせください。
最終更新:2012年11月14日 14:45