Java

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に変換してもコンパイルできるようになります)

test01.java test01_utf8.java Sample1.java
Sample1_2.java Bmi0.java BooleanTest1.java
StrComp01.java Switch01.java Rep01.java
Addall1.java while01.java while02.java
Addall2.java Getmax.java ChkArrayLength.java
SortArray.java SortArray2.java ExFor01.java
StackTest.java StaticTest01.java StIni01.java
RndNum01.java AbClassTest1.java InfTest1.java
ItfDflt01.java Gnrcs01.java ClassTest01.java
StdIO01.java StringFormat01.java StdIO02.java
StdIO03.java CmdArgs01.java CmdArgs02.java
FileOut01.java FileOut01_2.java FileOut02.java
FileOut03.java FileIn01.java FileIn01_sample.txt
FileIn02.java FileIn03.java FileIn03_sample.txt
FileIn03_2.java BinIO.java List01.java
List03.java ExFor02.java CmprtrSort.java
CmprtrSort2.java Set01.java Set02.java
Map01.java Map02.java Map03.java
List02_1.java StringTest01.java ByteString01.java
BigCalc01.java DateTest01.java DurationTest01.java
DateTest02.java DateTest06.java DateTest07.java
File01.java File02.java File03.java
File04.java SwingSample01.java SwingSample02.java
SwingSample03_1.java G2Dsample01.java ShowFonts.java
BIsample01.java BIsample02.java Lenna.bmp
BIsample03.java FileDialogSwing1.java SWTsample01.java
SWTsample02.java SWT2d01.java Balloon.bmp
SWT2d03.java FileDialogSWT1.java ThreadTest1.java
ThreadTest2.java ThreadTest3.java ThreadTest4.java
CncrntTest1.java CncrntTest2.java CncrntTest3_1.java
CncrntTest3_2.java pbtest01.c pbtest01.java
FuncItf01.java Stream0.java Stream0.java
Stream1.java Stream2.java Stream3.java
MethRef01.java MethRef02.java RegEx0.java
RegEx1.java RegEx2.java RegEx3.java
RegEx4.java RegEx5.java RegEx5_2.java
ComTest01Sv.java ComTest01Cl.java SoundTest01.java
music001.wav サウンドの出典: 甘茶の音楽工房
SoundTest02.java SoundTest03.java org/MyLic1/Calc.java
MyApp01.java org/MyLib2/Calc.java MyApp02.java
SQLite01.java SQLite02.java NioTest01.java
NioTest02_1.java NioTest02_2.java NioTest02_3.java
List02.java

【目次】

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