ネットワークプログラミングとは、複数のデバイス(コンピュータ)上で実行されるプログラムを書くことを指し、これらのデバイスはネットワークを使用して互いに接続されています。 J2SE APIのjava.netパッケージには、低レベル通信の詳細を提供するクラスとインターフェースのコレクションが含まれており、手元の問題解決に集中できるプログラムを書くことができます。 java.netパッケージは2つの一般的なネットワークプロトコルをサポートしています。 TCP - Transmission Control Protocolの略。2つのアプリケーション間で信頼性の高い通信を可能にする。TCPは通常
Javaはオブジェクト直列化というメカニズムを提供します。これはオブジェクトをバイトシーケンスとして表現し、オブジェクトのデータだけでなく、オブジェクトの型やオブジェクトに格納されているデータの型に関する情報も含みます。 直列化されたオブジェクトがファイルに書き込まれた後、そのファイルから読み取り、逆直列化(デシリアライズ)できます。つまり、型情報とオブジェクトおよびそのデータを表すバイトを使用して、メモリ内でオブジェクトを再作成できます。 最も印象的なのは、このプロセス全体がJVM非依存であることです。つまり、あるプラットフォームでオブジェクトを直列化し、まったく異なるプラットフォームで
Integer配列、String配列、または順序をサポートするあらゆる型の配列の要素をソートできる単一のソートメソッドを書けたら便利です。 Javaジェネリクスメソッドとジェネリクスクラスを使用すると、プログラマは単一のメソッド宣言で関連するメソッドのセットを、または単一のクラス宣言で関連する型のセットをそれぞれ指定できます。 ジェネリクスはコンパイル時型安全性も提供し、プログラマが無効な型をコンパイル時に検出できるようにします。 Javaジェネリクスの概念を使用すると、オブジェクト配列をソートするジェネリックメソッドを書き、Integer配列、Double配列、String配列などでそ
Java 2以前、JavaはDictionary、Vector、Stack、Propertiesなどのアドホックなクラスを提供してオブジェクトグループを格納・操作していました。これらのクラスは非常に有用でしたが、中央の統一的なテーマが欠けていました。したがってVectorの使用方法はPropertiesの使用方法とは異なっていました。 コレクションフレームワークは以下のような目標を達成するために設計されました。 フレームワークは高性能でなければならない。基本コレクション(動的配列、連結リスト、ツリー、ハッシュテーブル)の実装は高効率でなければならない。 異なるタイプのコレクションが同様の方
Javaユーティリティパッケージが提供するデータ構造は非常に強力で、幅広い機能を実行します。これらのデータ構造は以下のインターフェースとクラスで構成されます。 Enumeration BitSet Vector Stack Dictionary Hashtable Properties これらのクラスはすべて現在レガシー(旧来)であり、Java 2で新しいフレームワークであるコレクションフレームワークが導入されました。これは次章で説明します。 Enumerationインターフェース Enumerationインターフェース自体はデータ構造ではありませんが、他のデータ構造の文脈では非常に
Javaでは、命名競合を防ぎ、アクセスを制御し、クラス、インターフェース、列挙型、アノテーションの検索/位置特定と使用を容易にするためにパッケージを使用します。 パッケージとは、関連する型(クラス、インターフェース、列挙型、アノテーション)のグループ化であり、アクセス保護と名前空間管理を提供します。 Javaの既存パッケージの一部: java.lang - 基本クラスをバンドル java.io - 入出力機能のクラスをバンドル プログラマは独自のパッケージを定義して、クラス/インターフェースなどのグループをバンドルできます。自分で実装した関連クラスをグループ化することは良い習慣です。
インターフェースはJavaの参照型です。クラスに似ています。抽象メソッドのコレクションです。クラスがインターフェースを実装すると、そのインターフェースの抽象メソッドを継承します。 抽象メソッドに加えて、インターフェースには定数、デフォルトメソッド、静的メソッド、ネスト型を含めることもできます。メソッドボディが存在するのはデフォルトメソッドと静的メソッドのみです。 インターフェースの記述はクラスの記述に似ています。しかしクラスはオブジェクトの属性と振る舞いを記述します。一方インターフェースは、クラスが実装する振る舞いを含みます。 そのインターフェースを実装するクラスが抽象でない限り、インタ
カプセル化は4つの基本的なOOP概念の1つです。他の3つは継承、ポリモーフィズム、抽象化です。 Javaにおけるカプセル化とは、データ(変数)とデータを操作するコード(メソッド)を単一のユニットとしてラップするメカニズムです。カプセル化では、クラスの変数が他のクラスから隠蔽され、それらの現在のクラスのメソッドを通じてのみアクセスできるようになります。したがって、これはデータ隠蔽としても知られています。 Javaでカプセル化を実現するには: クラスの変数をprivateで宣言する。 変数値の変更と参照のためにpublicなセッターとゲッターメソッドを提供する。 例: カプセル化の実現
辞書によれば、抽象化とは「出来事ではなくアイデアを扱う性質」です。例えばEメールを考えると、Eメールを送信した直後に何が起こるか、Eメールサーバーが使用するプロトコルなどの複雑な詳細はユーザーから隠蔽されています。したがって、Eメールを送信するには内容を入力し、受信者のアドレスを指定し、送信をクリックするだけで済みます。 同様にオブジェクト指向プログラミングにおいて、抽象化とは実装の詳細をユーザーから隠蔽し、機能のみをユーザーに提供するプロセスです。言い換えれば、ユーザーはオブジェクトが何をするかを知っていて、どのようにするかを知る必要はありません。 Javaでは、抽象クラスとインターフェ
ポリモーフィズム(多態性)とは、オブジェクトが多くの形を取る能力のことです。OOPにおけるポリモーフィズムの最も一般的な用途は、親クラスの参照が子クラスのオブジェクトを参照する場合です。 複数のIS-AテストをパスできるJavaオブジェクトはポリモーフィックと見なされます。Javaでは、すべてのJavaオブジェクトがポリモーフィックです。なぜなら、どのオブジェクトも自身の型とObjectクラスのIS-Aテストをパスするからです。 オブジェクトにアクセスする唯一の方法は参照変数を通じてであることを知っておくことが重要です。参照変数は1つの型しか持てません。一度宣言されると、参照変数の型を変更
前章ではスーパークラスとサブクラスについて説明しました。クラスがスーパークラスからメソッドを継承する場合、そのメソッドがfinalでマークされていなければオーバーライドする機会があります。 オーバーライドの利点は:サブクラスタイプに固有の振る舞いを定義できることです。つまり、サブクラスは親クラスのメソッドを自身の要件に基づいて実装できます。 オブジェクト指向の用語では、オーバーライドとは既存メソッドの機能を上書きすることを意味します。 例 例を見てみましょう。 class Animal { public void move() { System.out.prin
継承とは、あるクラスが別のクラスのプロパティ(メソッドとフィールド)を取得するプロセスと定義できます。継承を使用することで、情報が階層的な順序で管理しやすくなります。 他のクラスのプロパティを継承するクラスをサブクラス(派生クラス、子クラス)と呼び、そのプロパティが継承されるクラスをスーパークラス(基底クラス、親クラス)と呼びます。 extendsキーワード extendsはクラスのプロパティを継承するために使用するキーワードです。extendsキーワードの構文は以下の通りです。 構文 class Super { ..... ..... } class Sub exten
この章ではJavaの内部クラス(インナークラス)について説明します。 ネストクラス Javaでは、メソッドと同様に、クラスの変数も別のクラスをメンバとして持つことができます。クラスの中にクラスを書くことはJavaで許可されています。内側に書かれたクラスをネストクラス(入れ子クラス)と呼び、内部クラスを保持するクラスをアウタークラス(外部クラス)と呼びます。 構文 ネストクラスを書く構文は以下の通りです。ここではOuter_Demoがアウタークラス、Inner_Demoがネストクラスです。 class Outer_Demo { class Inner_Demo { } }
例外(または例外的イベント)とは、プログラム実行中に発生する問題のことです。Exceptionが発生するとプログラムの正常なフローが中断され、プログラム/アプリケーションが異常終了します。これは推奨されないため、これらの例外を処理する必要があります。 例外はさまざまな理由で発生します。例外が発生するシナリオの例をいくつか示します。 ユーザーが無効なデータを入力した 開く必要があるファイルが見つからない 通信中にネットワーク接続が失われた、またはJVMのメモリが不足した これらの例外のいくつかはユーザーエラーによるもの、いくつかはプログラマエラーによるもの、いくつかは何らかの形で物理リソ
java.ioパッケージには、Javaで入出力(I/O)を実行するために必要なほぼすべてのクラスが含まれています。これらのストリームはすべて入力ソースと出力先を表します。java.ioパッケージのストリームは、プリミティブ型、オブジェクト、ローカライズされた文字など、多くの種類のデータをサポートしています。 ストリーム ストリームとはデータのシーケンスと定義できます。ストリームには2種類あります。 InputStream - ソースからデータを読み取るために使用 OutputStream - データをデスティネーションに書き込むために使用 Javaはファイルおよびネットワークに関連する
Javaメソッドは、特定の操作を実行するためにグループ化されたステートメントの集合です。例えばSystem.out.println()メソッドを呼び出すとき、システムは実際にはコンソールにメッセージを表示するために複数のステートメントを順番に実行しています。 この章では、戻り値の有無にかかわらず独自のメソッドを作成し、パラメータの有無にかかわらずメソッドを呼び出し、プログラム設計においてメソッド抽象化を適用する方法を学びます。 メソッドの作成 メソッドの構文を説明するために、以下の例を考えてみましょう。 構文 public static int methodName(int a, int
Javaはjava.util.regexパッケージを提供し、正規表現を用いたパターンマッチングを実現します。Javaの正規表現はPerlプログラミング言語のものと非常に似ており、学習も容易です。 正規表現とは 正規表現とは、パターンに保持される特殊な構文を用いて、他の文字列や文字列のセットをマッチングまたは検索するための、特殊な文字シーケンスです。テキストやデータの検索、編集、操作に利用できます。 java.util.regexの主要クラス java.util.regexパッケージは主に以下の3つのクラスで構成されます。 Patternクラス - 正規表現のコンパイル済み表現です。pu
java.util.Date クラス 現在日時をカプセル化。java.utilパッケージに属します。 コンストラクタ #コンストラクタ説明 1Date()現在日時で初期化 2Date(long millisec)1970/1/1 00:00:00 GMTからのミリ秒数で初期化 主要メソッド #メソッド説明 1after(Date)指定日時より後ならtrue 2before(Date)指定日時より前ならtrue 3clone()Dateオブジェクト複製 4compareTo(Date)比較:等しければ0、前なら負、後なら正 5compareTo(Ob
配列とは Javaの配列は、同型要素の固定サイズ順次コレクションを格納するデータ構造です。個別変数number0, number1...代わりにnumbers[0], numbers[1]...で管理できます。 配列変数の宣言 dataType[] arrayRefVar; // 推奨スタイル // または dataType arrayRefVar[]; // C/C++由来、非推奨 例 double[] myList; // 推奨 double myList[]; // 動作するが非推奨 配列の生成 new演算子で生成 arrayRefVar = new dataType[
Stringクラスの概要 Javaで広く使われる文字列は文字シーケンスであり、オブジェクトとして扱われます。java.lang.Stringクラスが生成・操作機能を提供します。 文字列の生成 最も直接的な方法:リテラル String greeting = Hello world!; 文字列リテラルに遭遇するとコンパイラがStringオブジェクトを自動生成。 new + コンストラクタ Stringクラスには11個のコンストラクタがあり、char配列等から生成可能。 char[] helloArray = {h,e,l,l,o,.}; String helloString = new Str
Java