Javaの入門テキスト作りました(→ミラーサイト)
【公開しているテキストにつきまして】
ここに公開しているテキストは「フリーソフトウェア」とします.(著作権は保持しています)
商用,非商用問わずご使用ください.印刷,再配布共にしていただいて構いませんが,その際は内容の改変をせずにお願いします.
内容に不備がありましたら是非ご連絡ください.可能な限り迅速に修正して再配信いたしますが,テキスト内の「免責事項」に了承してください.
連絡先:katsu_wm%mukogawa-u.ac.jp,nkatsu2012%gmail.com(%を@に変えてください)
まだ試作品の段階ですので,これから頻繁に修正や加筆をします.
【テキストに掲載されているサンプルプログラム】
注)ここに掲載しておりますサンプルプログラムはダウンロードして実行することを想定しています.テキストファイル(UTF-8エンコーディング)の形式です.この関係上,Webブラウザで直接閲覧しますと「文字化け」が起こることがあります.Webブラウザ上でUTF-8テキストを直接閲覧するには,ご使用のブラウザを適切に設定する必要があるかもしれません.
参考サイト:https://support.google.com/merchants/answer/6293594?hl=ja
また,UTF-8エンコーディングのソースプログラムは,Windowsのコマンド環境の javac コマンドでコンパイルするとエラー(文字コードが正しくない旨のエラー)が発生するので,テキスト中の解説に従ってコンパイル時の文字コード指定を行ってください.(あるいはソースプログラムをSJISに変換してもコンパイルできるようになります)
【目次】
1 序章 — 1
1.1 プログラム開発の基本的な手順 — 1
1.2 プログラム開発の具体的な作業 — 1
1.2.1 ソースプログラムの記述や入出力における文字コードの指定 — 2
1.2.2 jar形式のライブラリを利用する方法 — 3
2 Java言語 — 4
2.1 初めて学ぶ際の留意事項 — 4
2.2 変数と値に関する基礎事項 — 4
2.2.1 値の表現 — 5
2.2.2 算術演算 — 5
2.2.3 複数の文の記述 — 6
2.2.4 コメントの記述 — 6
2.2.5 変数の型と演算に関する例 — 6
2.2.6 メソッドと引数 — 7
2.2.7 文字と文字列の扱い — 7
2.2.7.1 文字列の部分を取り出す — 7
2.2.7.2 エスケープシーケンス — 8
2.2.8 値の型の変換 — 8
2.2.8.1 数値と文字列の間での表現の変換 — 9
2.2.9 基数の変換 — 10
2.2.9.1 10進数→n進数 — 10
2.2.9.2 n進数→10進数 — 10
2.2.10 ビット演算 — 10
2.2.10.1 シフト演算 — 11
2.2.10.2 ビット毎の論理演算 — 11
2.3 制御構造 — 12
2.3.1 条件分岐(1): if文 — 12
2.3.1.1 条件式の記述とboolean型変数 — 13
2.3.1.2 文字列の比較 — 14
2.3.1.3 条件判定のための3項演算子 — 14
2.3.2 条件分岐(2): switch文 — 15
2.3.3 反復(1): while文 — 16
2.3.3.1 再帰代入による変数の値の変更 — 16
2.3.4 反復(2): for文 — 18
2.4 配列 — 19
2.4.1 配列への記憶の割り当て — 20
2.4.2 配列宣言時の初期化 — 20
2.4.3 配列の要素の整列 — 21
2.4.4 拡張for文による要素へのアクセス — 22
2.5 オブジェクト指向プログラミング — 23
2.5.1 概念的な導入 — 23
2.5.1.1 オブジェクト指向における部品の考え方 — 23
2.5.1.2 オブジェクト指向プログラミングの概要 — 23
2.5.2 サンプルプログラムに沿った説明 — 23
2.5.2.1 クラス,インスタンス,コンストラクタ」の考え方 — 26
2.5.2.2 静的メンバ/メソッドについて — 28
2.5.2.3 staticイニシャライザ — 28
2.5.3 クラスの拡張(継承) — 29
2.5.4 抽象クラスとインターフェースについて — 30
2.5.4.1 匿名クラスについて — 33
2.5.5 アノテーション — 34
2.5.6 総称型(Generics)について — 34
2.5.7 オブジェクトのクラスに関する情報 — 35
2.6 入出力 — 37
2.6.1 標準入出力 — 37
2.6.1.1 文字列生成への書式編集の応用 — 38
2.6.1.2 標準エラー出力 — 39
2.6.2 コマンド引数 — 40
2.6.3 ファイルへの出力 — 41
2.6.3.1 バイトストリームへの出力: FileOutputStream — 41
2.6.3.2 例外処理(1): try — 42
2.6.3.3 例外処理(2): throws — 43
2.6.3.4 PrintWriterによる出力 — 43
2.6.4 ファイルからの入力 — 44
2.6.4.1 テキストの行単位の読込み — 44
2.6.4.2 Scannerクラスを用いた読込み — 46
2.6.5 バイナリファイルの入出力 — 47
3 標準的なクラスライブラリ — 50
3.1 データ構造 — 50
3.1.1 List(リスト): ArrayList / LinkedList — 50
3.1.1.1 リスト生成時の初期化 — 52
3.1.1.2 要素の整列: sort — 52
3.1.1.3 要素の順序の反転: reverse — 52
3.1.1.4 拡張for文によるListの要素へのアクセス — 53
3.1.1.5 Comparatorを用いた整列 — 53
3.1.2 Set(セット,データ集合): HashSet / TreeSet — 56
3.1.2.1 Iteratorによる要素への順次アクセス — 58
3.1.3 Map(連想配列,辞書): HashMap / TreeMap — 58
3.1.3.1 登録されているマッピングに順次アクセスする方法 — 60
3.1.4 データ構造の変換 — 62
3.1.4.1 リスト,セットを配列に変換する方法 — 62
3.2 編集可能な文字列のクラス: StringBuilder,StringBuffer — 63
3.2.1 コンストラクタ — 63
3.2.2 文字列編集のためのメソッド — 63
3.2.3 サンプルプログラム — 63
3.2.4 byte配列,String/StringBuilder/StringBufferオブジェクトとの間の変換 — 64
3.3 Mathクラス — 66
3.3.1 BigInteger,BigDecimal — 66
3.3.1.1 オブジェクトの生成と値のセット — 67
3.3.1.2 演算 — 67
3.3.1.3 MathContextについて — 67
3.3.1.4 数学関数の多倍長演算について — 68
3.4 日付,時刻の扱い — 70
3.4.1 Date,Calenderクラス — 70
3.4.2 時間の計測 — 72
3.4.3 LocalDateTime,LocalDate,LocalTimeクラス — 73
3.4.3.1 基本的な機能 — 74
3.4.3.2 和暦の扱い — 77
3.5 ファイル,パス,URI — 79
3.5.1 パスの作成,パスの分解 — 79
3.5.2 URI — 80
3.5.3 Fileクラスのメソッド — 81
3.5.3.1 ファイル,ディレクトリの作成 — 82
3.5.3.2 ディレクトリ内容の取得,ファイルの存在検査 — 83
3.5.3.3 ファイル名の変更(パスの変更) — 83
3.5.3.4 ファイル,ディレクトリの削除 — 84
4 GUIと2Dグラフィックス — 86
4.1 GUIプログラミングの基本的な概念 — 86
4.2 GUIアプリケーション構築の概略 — 86
4.2.1 GUIツールキット — 87
4.3 Swing — 88
4.3.1 GUIの構築 — 88
4.3.1.1 GUI構築の例 — 88
4.3.1.2 イベント処理 — 91
4.3.1.3 キーボードイベントからのキーの取り出し — 94
4.3.1.4 JFrameクラスとしてのアプリケーションの構築 — 94
4.3.1.5 より安全な実装 — 96
4.3.1.6 レイアウトマネージャ — 96
4.3.2 Swingでのグラフィックス作成の概要 — 98
4.3.2.1 グラフィックス作成の流れ — 98
4.3.2.2 プログラムの例 — 99
4.3.2.3 paintComponentの引数について — 100
4.3.3 座標系について — 100
4.3.4 グラフィックス作成のための基本的なメソッド — 100
4.3.4.1 描画色の指定 — 100
4.3.4.2 直線の描画: drawLineメソッド — 101
4.3.4.3 折れ線の描画: drawPolylineメソッド — 101
4.3.4.4 線の属性の指定 — 101
4.3.4.5 長方形の描画 (1) 枠: drawRectメソッド — 104
4.3.4.6 長方形の描画 (2) 塗りつぶし: fillRectメソッド — 104
4.3.4.7 楕円の描画 (1) 枠: drawOvalメソッド — 104
4.3.4.8 楕円の描画 (2) 塗りつぶし: fillOvalメソッド — 104
4.3.4.9 多角形の描画 (1) 枠: drawPolygonメソッド — 104
4.3.4.10 多角形の描画 (2) 塗りつぶし: fillPolygonメソッド — 104
4.3.4.11 文字の描画 — 104
4.3.4.12 階調色の指定 — 106
4.3.5 BufferedImageの利用 — 107
4.3.5.1 BufferedImageに対する描画 — 107
4.3.5.2 BufferedImageオブジェクトを画像データとして出力する方法 — 108
4.3.5.3 画像ファイルの読み込みと表示 — 110
4.3.5.4 画素に対する操作 — 112
4.3.6 ファイル選択ダイアログ — 114
4.4 SWT — 117
4.4.1 GUIアプリケーション構築の流れ — 117
4.4.2 GUIコンポーネントの生成と配置 — 118
4.4.3 イベント処理の登録 — 120
4.4.4 サンプルプログラム — 120
4.4.5 キーボードイベントからのキーの取り出し — 124
4.4.6 SWTでのグラフィックスの作成の概要 — 124
4.4.6.1 GC(Graphic Context) — 124
4.4.6.2 グラフィックス作成の流れ — 124
4.4.7 座標系について — 125
4.4.8 色の指定 — 125
4.4.9 描画のための基本的なメソッド — 126
4.4.9.1 直線の描画: drawLineメソッド — 126
4.4.9.2 折れ線の描画: drawPolylineメソッド — 126
4.4.9.3 線の属性の設定 — 126
4.4.9.4 長方形の描画(1) 枠: drawRectangleメソッド — 127
4.4.9.5 長方形の描画(2) 塗りつぶし: fillRectangleメソッド — 127
4.4.9.6 楕円の描画(1) 枠: drawOvalメソッド — 127
4.4.9.7 楕円の描画(2) 塗りつぶし: fillOvalメソッド — 127
4.4.9.8 多角形の描画(1) 枠: drawPolygonメソッド — 127
4.4.9.9 多角形の描画(2) 塗りつぶし: fillPolygonメソッド — 127
4.4.10 文字の描画 — 127
4.4.11 画素に対する操作 — 128
4.4.11.1 画素の着色処理 — 130
4.4.12 画像ファイルの入出力 — 130
4.4.12.1 画像ファイルの読み込み — 130
4.4.12.2 画像ファイルへの出力 — 130
4.4.13 サンプルプログラム — 131
4.4.14 ファイル選択ダイアログ — 134
5 スレッドとプロセス — 137
5.1 マルチスレッドプログラミング — 137
5.1.1 Threadクラス — 137
5.1.2 Runnableインターフェース — 139
5.1.3 スレッドの同期 — 140
5.1.3.1 他のスレッドの終了を待機する方法: joinメソッド — 140
5.1.3.2 synchronized修飾子 — 141
5.1.3.3 スレッドの待機/実行の再開 — 144
5.1.4 スレッドの状態について — 146
5.2 concurrentライブラリ — 147
5.2.1 ExecutorとExecutorService — 147
5.2.2 CallableインターフェースとFutureインターフェース — 149
5.3 外部プロセスの起動 — 152
5.3.1 Javaプログラムと外部プロセスの関係 — 152
5.3.2 使用方法 — 152
5.3.3 サンプルプログラム — 153
6 ラムダ式,Stream API,メソッド参照 — 156
6.1 関数型インターフェース — 156
6.2 Streamインターフェース — 157
6.2.1 Streamオブジェクトの生成 — 158
6.2.2 forEachメソッド — 158
6.2.3 filterメソッド — 158
6.2.4 mapメソッド — 159
6.2.5 sortedメソッド — 159
6.2.5.1 Streamのクローズ(終了) — 159
6.2.6 collectメソッド — 159
6.3 メソッド参照 — 160
7 正規表現 — 162
7.1 文字列探索: findメソッド — 162
7.1.1 パターンの検出位置 — 163
7.1.2 パターン検出の続行 — 163
7.2 置換処理: replaceFirst,replaceAll — 164
7.3 パターンの記述方法 — 164
7.4 パターンマッチのグループ — 166
7.5 文字列の分割: splitメソッド — 167
8 TCP/IP通信 — 168
8.1 ソケットの考え方 — 168
8.2 ソケットに関するクラス — 169
8.2.1 サーバソケット — 169
8.2.2 ソケット — 169
8.3 データの送受信 — 170
8.4 サンプルプログラム — 171
9 サウンドデータの再生 — 174
9.1 最も素朴な方法 — 174
9.2 サイズの大きなサウンドデータの再生 — 176
9.3 実用的なサウンド再生 — 178
10 ライブラリ,パッケージに関すること — 181
10.1 ライブラリの作成 — 181
10.1.1 ライブラリファイル(クラスファイル)の保存場所 — 181
10.1.2 異なるパッケージが同名のクラスを提供する場合の扱い — 182
10.1.3 jarファイルの作成 — 182
11 データベースへの接続 — 183
11.1 データベースについての基本的な考え方 — 183
11.1.1 データベースに対する基本的な操作 — 183
11.2 本書で取り扱うソフトウェア — 184
11.2.1 SQLite — 184
11.2.2 JDBC — 184
11.3 トランザクション — 184
11.3.1 データベースへの接続 — 184
11.3.2 Statementオブジェクトの取得 — 185
11.3.3 SQL文の実行 — 185
11.3.3.1 検索結果の取り出し — 185
11.3.4 トランザクションの終了 — 185
11.4 SQL — 185
11.4.1 データベースの作成 — 186
11.4.2 テーブルの作成 — 186
11.4.2.1 カラムのデータ型 — 186
11.4.2.2 サンプルプログラム(1) — 187
11.4.3 テーブルの結合 — 189
11.4.3.1 サンプルプログラム(2) — 190
A Swing簡易リファレンス — 192
A.1 多くのコンポーネントで共通のメソッド — 192
A.2 各種のコンポーネント — 192
A.3 主なGUIコンポーネントのクラス階層 — 197
A.4 代表的なイベント — 198
B SWT簡易リファレンス — 199
B.1 多くのコントロールで共通のメソッド — 199
B.2 各種のコントロール — 199
B.3 代表的なイベント — 204
C java.nioライブラリ — 205
C.1 PathインターフェースとPathsクラス — 205
C.2 Filesクラス — 205
D サードパーティのライブラリ — 209
D.1 Apfloat — 209
E サンプルプログラム — 211
E.1 ArrayList,LinkedListの性能比較 — 211