JavaはMicrosoft WindowsやUNIX、PDAなどさまざまなプラットフォームで使用できるプログラム言語です。
目次
Javaの文法
演算子
クラス
変数やメソッドの修飾子
例外
Javaクラスライブラリ
Javaの開発ツール
JDBC
- JDBCの概要
- CLASSPATHの設定
- JDBCパッケージのインポート
- JDBCパッケージがスローする例外
- JDBCドライバのロード
- データベースとの接続
- ステートメントの作成
- INSERT, UPDATE, DELETEの実行
- 問い合わせ(クエリ)の実行
- データベースとの切断
- トランザクション制御
- SQL文の準備
- ストアドプロシージャの呼び出し
- データ型のマッピング
JNDI (Java Naming and Directory Interface)
Javaサーブレット (Java servlet)
JMS (Java Message Service)
API
J2EE (Java 2 Enterprise Edition)
JavaのWebアプリケーション技術
JSP (JavaServer Pages)
コンパイル
Javaのソースファイルをテキストエディタ等で作成します。次にjava ソースファイルの例 HelloWorld.java を示します。
class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello world");
}
}
Javaのソースファイルをコンパイルするには、javac コマンドを使用します。
Javaプログラムの実行方法
Javaプログラムを実行するには、javaコマンドを使用します。
| オプション | 意味 |
|---|---|
| -classpath クラスパス | クラスパスを指定する。 |
| -version | 製品バージョンを表示して(プログラムを実行せずに)終了する。 |
| -showversion | 製品バージョンを表示してからプログラムを実行する。 |
| -Djava.compiler=NONE | JIT(Just in Time)コンパイラなしで実行する。 |
| -help | ヘルプメッセージを表示する。 |
ソースファイル HelloWorld.java をコンパイルして生成されたクラスファイル HelloWorld.class を実行する例を次に示します。
Hello world
パッケージ化したクラスファイル ./com/Sample/HelloWorld.class を実行する例を次に示します。
Hello world
Exception in thread "main" java.lang.NoClassDefFoundError: と表示されて実行できない場合、CLASSPATHの設定かクラス名の指定方法に誤りがあります。以下の点を調べてみてください。
- CLASSPATHにカレントディレクトリが含まれているか
識別子
クラスや変数、メソッド(関数)、パッケージの名前のことを識別子と呼びます。識別子は自由に命名できますが、以下の制約があります。
- 半角英数字(
a〜z,A〜Z,0〜9)および半角アンダーバー(_)のみ使用できる。 - 最初の1文字目は半角英字(
a〜z,A〜Z)または半角アンダーバー(_)のみ使用できる。 - 大文字と小文字は区別される。つまり、
wordとWORDは別の識別子として認識される。 - 予約語は使用できない。ただし、識別子の一部に予約語を含めることはできる。
予約語
予約語とはJavaにおいて固有の意味を持つ単語です。そのため、予約語は識別子として用いることができません。Javaの予約語を以下に示します。
- abstract
- boolean
- break
- byte
- cast
- catch
- char
- class
- const
- continue
- default
- do
- double
- else
- extends
- final
- false
- finally
- float
- for
- goto
- if
- implements
- import
- instanceof
- int
- interface
- long
- native
- new
- package
- private
- protected
- public
- return
- short
- static
- super
- switch
- synchronized
- this
- throw
- throws
- tranisent
- true
- try
- void
- while
データ型
変数とは、プログラムで扱われる数値や文字列などの値を一時的に記憶しておく領域のことです。変数を識別するために、ひとつひとつの変数に固有の識別子を付けておきます。これを変数名といいます。
変数を使用する前に、どのような変数を使用するか、その変数名や変数に記憶できるデータ型を明らかにしておくことを変数の宣言といいます。
Javaの基本データ型を次に示します。
| 型 | 種類 | サイズ | 範囲 |
|---|---|---|---|
| boolean | ブール | 1 bit | true または false |
| byte | 符号付き整数 | 8 bit | -128 〜 127 |
| char | Unicode文字 | 16 bit | 0 〜 65535 |
| short | 符号付き整数 | 16 bit | -32,768 〜 32,767 |
| int | 符号付き整数 | 32 bit | -2,147,483,648 〜 2,147,483,647 |
| long | 符号付き整数 | 64 bit | -9,223,373,036,854,775,808 〜 9,223,372,036,854,775,807 |
| float | IEEE 754 単精度浮動小数 | 32 bit | ±3.40282347E+38 〜 ±1.40239846E-45 |
| double | IEEE 754 倍精度浮動小数 | 64 bit | ±1.79769313486231570E+308 〜 ±4.94065645841246544E-324 |
※IEEE 754:単精度浮動小数 指数部8bit 符号部1bit 仮数部23bit
※IEEE 754:倍精度浮動小数 仮数部11bit 符号部1bit 仮数部52bit
定数
| 種類 | 例 |
|---|---|
| 整数(10進数) | -255 |
| 整数(8進数) | 0377 |
| 整数(16進数) | 0xff |
| 文字 | 'A' |
| 文字列 | "string" |
| 小数 (dobule) | 3.1415 0.31415e1 31415E-1 |
| 小数 (float) | 3.1415f 0.31415E1F 31415e-1f |
文字や文字列において、\ の後に特殊な記号を追加することで、特殊な文字を表示することができます。
| 表現 | 意味 |
|---|---|
| \n | 改行 |
| \t | 水平タブ |
| \\ | 円記号(環境によってはバックスラッシュ) |
| \' | シングルクォーテーション |
| \" | ダブルクォーテーション |
| \b | 1文字戻る |
| \r | その行の先頭に戻る |
| \uxxxx | 4桁の数値 (xxxx) で表した Unicode の文字 |
配列
配列を宣言する構文を次に示します。
データ型 変数名[];
配列を初期化する構文を次に示します。
変数名 = new データ型[要素の数];
配列の宣言と初期化を行う例を次に示します。
a = new int[10];
1行にまとめて記述することもできます。
初期値を与えて初期化する方法もあります。初期値で与えた値の数だけ要素が作成されます。
データ型 変数名[] = { カンマで区切った値のリスト };
配列の要素の数を知るには、変数名.length を参照します。
int i = a.length;
配列をコピーするには、System.arraycopy メソッドを使用します。
オブジェクトの配列 src から dest にコピーします。
int a[] = { 1, 2, 3 };
int b[] = new int[3];
System.arraycopy(a, 0, b, 0, a.length);
スコープ(ビジビリティ)
クラスやメソッドの宣言で public や protected、private などの修飾子がつきますが、これらはスコープ(ビジビリティ)といって、参照できる範囲を指定しています。
| 修飾子 | 意味 |
|---|---|
| なし | 同じパッケージから参照可能 パッケージ未指定の場合は、同じファイル内に定義したクラスから参照可能 |
| public | すべてのクラスから参照可能 |
| protected | 同じパッケージか派生クラスから参照可能 |
| private | 同一クラスからのみ参照可能 |
静的 static
通常、クラスからインスタンスを複数作ると、クラスに含まれる変数の実体も複数作成されます。静的変数とはそのクラスにひとつだけ存在する変数です。 インスタンスを複数作っても、静的変数はひとつだけとなります。 また、静的変数はインスタンス化しなくても使用することができます。 変数を静的変数とするには、変数宣言の前に static を付けます。
静的メソッドはクラスをインスタンス化しなくても呼び出すことのできるメソッドです。 静的でないメソッドはクラスをインスタンス化しないと呼び出すことはできません。 メソッドを静的メソッドとするには、メソッド宣言の前に static を付けます。
静的メソッドには次の制限があります。
- 通常のインスタンス変数を扱うことはできず、静的変数のみ扱える。
- 通常のインスタンスメソッドを呼び出すことはできず、静的メソッドのみ呼び出すことができる。
静的メソッドはインスタンス化されずに呼び出されることがあるので、インスタンス化されないと領域が確保されないインスタンス変数を参照することができません。
class MyClass {
static boolean staticVariable;
boolean instanceVariable;
static void MyFunc() {
staticVariable = true;
// staticでない変数は参照できない
// instanceVariable = true;
}
}
final
final 修飾子を指定してクラスを宣言すると、そのクラスはサブクラスで継承できなくなります。
final class Example {
// サブクラスで継承不可
}
final 修飾子を指定してメソッドを宣言すると、そのメソッドはサブクラスでオーバーライドできなくなります。
class Example {
final void example() {
// サブクラスでオーバーライド不可
}
}
final 修飾子を指定してメンバ変数を宣言すると、そのメンバ変数は定数として扱われます。一度値を代入すると、その値を変更できません。
class Example {
final int example = 1; // 値の変更不可
}
コンストラクタ
コンストラクタは、インスタンスが作られたときに自動的に呼び出されるメソッドです。 主にインスタンスを初期化するために使用されます。 メソッドの名前はクラスの名前と同じで、引数を取ることもできます。 コンストラクタに戻り値はありません。戻り値の型として void を記述するのではなく、戻り値の型自体を記述しません。
class Example() {
public Example() {
// 初期化処理
}
}
抽象クラス abstract
抽象クラスとは直接インスタンス化できないクラスです。 通常、抽象クラスから派生クラスを作成して使用します。 抽象クラスは class の前に abstract を付けます。 抽象クラスではメソッドを宣言することができます。これを仮想関数と呼びます。 基底クラスに仮想関数がある場合、仮想関数を実装しなければ、その派生クラスも抽象クラスになります。
abstract class Abstract1 {
abstract public void method();
}
class Abstract2 extends Abstract1 {
public void method() {
System.out.println("Abstract2::method");
}
public static void main(String arg[]) {
Abstract2 a = new Abstract2();
a.method();
}
}
インタフェース interface
インタフェースとは定数とメソッドの宣言だけを集めたものです。メソッドは宣言するだけで実装はしません。
インタフェースの実装(継承)は、implements キーワードを使用します。
クラスを継承するときの extends とは異なります。
クラスはひとつのクラスしか継承できませんが、インタフェースは複数継承できます。