--JAVA 講義で習ったこと--

JAVAの講義のなかでイメージの捉えられたものを中心にまとめています。コードとかは書きにくいので省いています。私専用のまとめとなります。 

第1章 1月17日JAVAの特徴
JAVAの概要 JAVAは1995年5月にSunMicroystems社から発表された比較的新しいプログラミング言語。最近ではWEBの仕組みを用いたシステムにおいてサーバー側で稼動するプログラムを記述するのにもちいれられる。★特徴★
★オブジェクト指向言語(バイトコード・Java仮想マシン)
★プラットフォームに依存しない
★ネットワークで利用することを前提
★セキュリティー(サンドボックス)
★スレッド対応(プログラム>=プロセス>=スレッド)
★APIが充実(パッケージという単位でまとめられてる)
JAVAのプログラムの種類 ★Javaアプリケーション
★Javaアプレット
★サーブレット
★JavaServer Pages
★Java Beans、EJB
JAVAの開発環境 http://jp.sun.com/index.html  無償ソフトをダウンロードする。
エディタはとりあえずウィウドウズのメモ帳でOK。(私はフリーのエディタを使おうかとおもっている)http://moisoft.peko.li/forte.php3#download
第2章 JAVAアプリケーションのスタイル
プログラムの形式 ★Javaプログラムはクラス(一つから複数個)の集まりである。
★Javaアプリケーションには必ず、main()メソッドが一つありそれからプログラムが起動する。
★メソッドはすべて小文字入力、クラス名は頭大文字あとは小文字が通例です。
★プログラムは複数で使うもの→標準化(インデントやコメント)
JAVAアプリケーションの開発の流れ 1・ソースファイルの作成
2.javacコマンドを使用してコンパイルする。
  コンパイルがエラーなく終るとクラス・ファイル(バイトコード)ができる
3.バイトコードを実行するにはjavaコマンドを使用してJVM上で実行する
第3章 変数とデータ型
データの扱い ★変数・・・データを入れておく場所
★定数・・・処理に使うデータが変わらないようなもの
★データ型は基本データ型(数値と文字)と参照型(文字列)に分かれる
★char型(文字)で使用される文字コードはUnicode。改行などいくつかの特殊文字はエスケープシーケンスとして\と組み合わせて表現
★Javaはデータ型に対して非常に厳密な言語である。
★変数宣言。ローカル変数(メソッドに記述)変数名の最後はセミコロンで区切る。
★変数名は大文字と小文字を区別する。キーワード(予約語)は使用できない。
★true、false、nullはキーワードでないがリテラル(定数)として予約。
★変数の初期化・・データ型 変数名=値;
★final変数など変数の値を変更できないもの。初期値を変更するのみでよい
演算子 ★演算を行う大将データ(変数や定数)のことをオペランド(演算数)という
★算術演算子・・インクリメント演算子、デクリメント演算子、前置式、後置式
★代入演算子。簡略記法の代入演算子もある。
★キャスト演算子(ダウン・キャストとアップ・キャストシフト演算子
★ビット演算子
第4章 制御構造
プログラムの基本構造 ★直線型
★分岐型
★繰り返し型
分岐 if文(二分岐型)。関係演算子。ifのネスト。論理演算子。三項演算子。論理演算子。論理演算子を用いたif文。演算子の優先順位。多分岐型(switch文)
繰り返し ★while文
★do〜while文
★for文
★break文とcontinue文
第5章

クラスとインスタンス

クラスの概念 ★データとクラス
★メソッド。メソッドの定義書式
★戻り値
★main()メソッドの因数と戻り値
インスタンス化 ★オブジェクトの生成
★コンストラクタ
★メソッドのオーバーロードメンバへのアクセス
★accessor
★アクセス指定子
パッケージ ★パッケージ宣言。パッケージの利用★Stringクラスのメソッド
staticメンバ ★同一クラスのオブジェクトやメソッドを共有する場合にその定義時にstaticをつける
★ただしクラス・メソッドはオブジェクトとが生成されない限りインスタンス変数やインスタンス・メソッドにはアクセスできない
第6章 1月24日*配列
配列の基礎 ★配列とは型が全く同じで、同じ仕事をさせるときに同じ名前をつける。指標や添字で区別する
添字はJAVAの場合、大括弧[]で、ゼロから数え始める。
★stringと同じ参照型である。
★クラス型変数と同様に配列参照する変数を宣言しただけでは配列は作成されない。オブジェクトの生成と同様にnew演算子を用いるか初期値を指定する。
★宣言する変数はデータ型、クラスどちらでもよい
★配列の領域確保
1.new演算子を用いる
2.初期化を変数宣言時に同時に行う
3.1と2をまとめて
★配列の初期化が必要だが、new演算子は不要。
★コマンドラインで入力された配列数をlengthを使用
char型配列と文字列 ★char型では文字コードなどをあらわす。char型の配列で文字列を表すことが出来る。
★しかし一般には文字列はstring型であらわす。
★StringBufferクラスのメソッド:一度セットした文字列の値を挿入・追加・削除するにはstring型ではなくStringBufferクラスを利用。
★いづれの文字列バッファも初期容量であるので文字列バッファがいっぱいになっても動的にサイズは変更される。
ラッパークラス ★コマンドラインから指定された値が数値だけで構成されたかどうかをチェックしたうえで数値に変換する。逆に数値データをオブジェクトとして扱わなければならないときラッパー・クラスを使用する。★基本データと同じクラスとなるがintはInteger、charはCharacterとなる。
★parseInt()などで数値に変換できない場合はエラー(例外)が発生する。
第7章 Scopeとガーベッジコレクション
Scope ★名前空間とは名前がつけられたものの種類と考える。(パッケージ名・型名[クラス名]・メンバ変数・メソッド名・ローカル変数名・ラベル)
★すべての名前は名前が使用できるスコープ(通用範囲)を持つ。
★基本的にはブロック・スコープを持つ
★同じメソッド内のネスとしていない異なるブロック空間では同一の名前をつけることができる。
ガッページ・コレクション ★あまりでない
★どこからも参照されなくなったオブジェクトはガーベッジコレクションと呼ばれる。
第8章 継承
単一継承 ★オブジェクト指向は再利用の技術
★継承はis-a関係。元になるクラスをスーパークラス。機能拡張したクラスをサブクラス。単一継承(JAVAはこちら)と多重継承。
★自分自身をさす→this。スーパークラスを指す→super。
★コンストラクタを呼び出せる
★メソッドのオーバーライド(継承関係でればサブクラスからスーパークラスにあるメソッドと全く同じメソッドを定義できる。
★クラスの修飾子。public。final。abstract。
集約 ★集約はhas-a関係と呼ばれる
★JAVAは多重継承ができないが集約をもちいることによってあるクラスから複数のクラスを利用することができる。
★集約はクラス内に別のクラスに別のクラスのオブジェクトを参照するメンバ変数を持っているもの。
第9章 1月31日*インターフェイス
インターフェース ★javaは多重継承ができないのでインターフェースを利用する。
★インターフェースはクラス(メソッドの実装をもち、設計と実装をもつといえる)とは異なり、実装を一切もたない。
★定数宣言とメソッド宣言だけが記述できメソッドは実装できない。つまり設計のみ。
★インターフェースの変数はすべて定数扱い(public、static、final)
★インターフェースからインターフェーへの継承は多重継承可能
★インターフェースも参照型になることとパッケージに含まれることはabstractと同様。
★最大のメリットはポリモアフィズム(多重性)を実現できることである。
ポリモアフィズム ★インターフェースを用いることで実現できることで、ポリモアフィズムとはいくつかのオブジェクトに同じメッセージを送った際に異なる振る舞いをする。
★多態性や多重性と訳される
第10章 例外処理
例外の処理方法 ★javaでは実行中にエラーとなることを例外という
★例外が発生するとJVMによってその例外に関する情報を持つオブジェクトが生成され、例外が発生した処理に対して通知される。
例外 原因
RuntimeException  
ArithmeticException 整数を0で割った
ClassCastException 継承関係のないクラスにキャストしようとした
ArrayIndexOutOfBoundsException 不正なインデックスによって配列にアクセスした
(下限・上限をこえアクセス)
NullPointerException 参照するオブジェクトがないのにアクセスした

try{}catch{ }による例外処理
例外クラスの方法 ★ArihmeticExceptionのようなJDKが用意している例外クラスのほかにユーザー定義の例外クラスを作成することができる。
★ユーザー定義の例外クラスを作成するにはExceptionクラスをスーパークラスとして作成する
class 例外クラス名 extends Exception{
}
第11章 ファイルの入出力
ファイルの出入力の基礎 ★データを読み書きするときにjavaではストリームという仕組みを利用する。入出力ストリームとはデータのソースやあて先を抽象的な概念としてあらわしたもの。つまりデータの読み書きを行う際に扱われる筋道。
★パッケージjava.io
★文字ストリームとバイトストリーム
★ランダム・アクセスファイルではファイルポインタを用いてランダムなデータの読み書きを実現する。
ファイルを扱うさまざまなクラス ★文字ストリーム:javaは16ビットのunicode形式で管理。システムの文字コードとは自動変換できる
★InputStreamReaderクラス
★OutputStreamWriterクラス
★FileReaderクラス。FileWriterクラス
第12章 2月7日*Swing
基本的なGUIのコンポーネント ★Swingは豊富なGUI部品をもちAPIで提供される機能もおおい。ウィンドウやダイアログ、イベント処理といったGUIの構築をサポートする。コンポーネントは階層構造。
★タイトルバーの名前の指定は、super("タイトルバーの名前”)など、ウインドウを作成するためにはJFrameクラスのサブ・クラスを定義する
★ラベルやテキストボタンといったコンポーネントの作成は各コンポーネントに対応するクラスのコンストラクタを呼び出すことで実現する。ラベルはJLabelクラスのオブジェクトであり他のGUIコンポーネントの説明ユーザへのメッセージを表示する目的で使用する・・・・・など。
レイアウト・マネージャー ★JAVAに用意されている便利な機能で、あらかじめ用意されている6つの配置パターンを用いて設定することで、各部品を最適に配置する
★レイアウトマネージャー・クラス「java.awt」5つと「jaax.swing」BoxLayoutのみ一つ
イベント処理 ★イベントが発生し、イベントソース(ボタンなど)がイベントリスナのメソッドにイベントの通知をする際、イベントに関する情報をもったイベント・オブジェクトがメソッドに渡されるのでメソッドはそれを利用してイベントに対応する処理を行う。
★イベント処理をまとめて代理人リスナモデルが行い、管理する。
★アダプタ・クラス・・・特定のリスナ・インタフェース内のすべてのメソッドを特になにもしない形で処理をしているため必要なメソッドだけオーバーライドしてイベント処理を行う。
★インナ・クラス・・・あるブロックのスコープ内で定義したもので、そのスコープ内の変数やメソッドにアクセスすることを可能にする。これらのクラスを使用することでアダプタクラスの作成が容易になる。
その他のコンポーネント ★ウインドウ・メニューはメニューバー、メニュー、メニュー項目で構成される。
★ ダイアログ・・・フレームとの違いは必ず別に親のフレームがあること
★ファイル・ダイアログ・・・SwingではJFileChooserクラスを使うことで勘単位ファイルの選択が行える
第13章 さまざまなクラス
コレクション ★配列は扱いが簡単で便利だが決めたよう素数しか扱えない。
★Vectorクラス(java.utilパッケージに含まれている)を利用すると配列のサイズを動的に扱うことができる。配列の要素はObject型。配列の初期サイズは10.要素を追加したり削除することにより配列のサイズが動的に変更される
★Hashtableクラス(java.utilパッケージ)。ハッシュテーブルはキーと値が含まれるテーブル。テーブルからデータが取り出しやすい。cookieなど。
★EnumerationとIterator
その他のクラス ★Systerクラス
★Mathクラス
第14章 スレッド
プロセスとスレッド ★WindowsやUNIXはマルチ・プロセス環境を提供
★マルチ・スレッドの方が負荷が軽い(サポートしていればスレッドを利用)
★スレッドクラス
★Runnableインターフェースを使用するのは、スレッドにしたいクラスがスレッド以外のクラスを継承しなければならない場合。
★スレッドを実行する際にはプライオリティに注意
★スレッドはrun()メソッドを終了すれば消滅
★Canvasクラス。Graphicsクラス
排他制御と同期制御 ★スレッドの使用に当たっては、データの排他制御の問題
★排他制御を行うためにsynchronizedを指定
★スタック構造ではスタックされてるデータがなかったり一杯になるときがある。必要に応じてwait()をかけ待ち状態にする。待ち状態を解除するにはnotify()やnotifiall()を実行する。