Javaの入門テキスト

[●テキスト本体（PDF形式239ページ:1.82MB）](http://www.k-techlabo.org/www_java_new/JavaText.pdf)　2019/12/15更新
　[（→ミラーサイトからDL）](https://ktechlabo.xsrv.jp/www_java_new/JavaText.pdf)
　[→テキスト中のサンプルプログラム](http://www.k-techlabo.org/blog2/?page_id=1384)
－－－－－－－－－－－－－－－－－－－－－
　
(2019/11/16)
学校でプログラミング教えています．初心者に教えるためのJavaの入門テキストを作りました．
とりあえず「Javaで一応プログラミングできる」ようになるまでの内容にしています．
　
冒頭の50ページ弱で基本的な文法と基本的なI/Oについて解説しています．あとはよく使うライブラリについての解説です．　
GUIはSwingとSWTについて解説しています．
　
このテキストはまだ試作品の段階ですが，教育現場で使いならが修正・アップデートしてゆきます．
無料で公開しますので，ご意見いただけたら嬉しいです．
（誤った箇所を見つけられましたら是非ご一報くださいませ）
　
「これ使いたい」という方は大歓迎です．ご意見をいただきながら完成度を高めていきたいです．
特に学校でプログラミングの指導をしておられる先生方に使っていただけたらと思います．現場から上がってきた要求やご指摘などいただけましたら幸いです．（可能な限りテキストに反映します）
　
## 補足
－－－－－－－－－－－－－－－－－－－－－
【補足】(2019/12/13-15)
　ビット演算の解説を増強しました．
　final修飾子に関する解説を加えました．
　Javadocに関する基本的な解説を加えました．
　その他，若干の加筆．
　
－－－－－－－－－－－－－－－－－－－－－
【補足】(2019/11/24-12/01)
　条件判定のための3項演算子（ ... ? ... : ... ）についての解説が抜けていましたので追加しました．
　CSVの分割方法に関する解説を追加しました．
　
－－－－－－－－－－－－－－－－－－－－－
【補足】(2019/11/21-22)
　正規表現に関する内容を追記しました．
## 目次
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