Java入門

JavaはMicrosoft WindowsやUNIX、PDAなどさまざまなプラットフォームで使用できるプログラム言語です。

目次

Javaの文法

  1. コンパイル
  2. Javaプログラムの実行方法
  3. 識別子
  4. 予約語
  5. データ型
  6. 定数
  7. 配列

演算子

  1. instanceof
  2. シフト演算子
  3. 3項演算子
  4. 複合代入演算子
  5. 順次演算子
  6. 演算子の優先順位

クラス

  1. コンストラクタ
  2. 抽象クラス abstract
  3. インタフェース interface

変数やメソッドの修飾子

  1. スコープ(ビジビリティ)
  2. static
  3. final

例外

  1. 例外のキャッチ
  2. java.lang.Exceptionクラス
  3. java.lang.Errorクラス
  4. java.lang.Throwableクラス
  5. 独自の例外クラスを作成する
  6. 例外をスローする

Javaクラスライブラリ

  1. java.io
  2. java.lang
  3. java.math
  4. java.sql
  5. java.util

Javaの開発ツール

  1. javadoc
  2. JavaCC
  3. Ant

JDBC

  1. JDBCの概要
  2. CLASSPATHの設定
  3. JDBCパッケージのインポート
  4. JDBCパッケージがスローする例外
  5. JDBCドライバのロード
  6. データベースとの接続
  7. ステートメントの作成
  8. INSERT, UPDATE, DELETEの実行
  9. 問い合わせ(クエリ)の実行
  10. データベースとの切断
  11. トランザクション制御
  12. SQL文の準備
  13. ストアドプロシージャの呼び出し
  14. データ型のマッピング

JNDI (Java Naming and Directory Interface)

  1. JNDIの概要
  2. javax.namingパッケージのインポート
  3. javax.namingパッケージがスローする例外

Javaサーブレット (Java servlet)

  1. CLASSPATHの設定
  2. Servletパッケージのインポート
  3. Servletパッケージがスローする例外

JMS (Java Message Service)

  1. JMSの概要
  2. CLASSPATHの設定
  3. JMSパッケージのインポート
  4. JMSパッケージがスローする例外
  5. メッセージの種類

API

  1. RMI (Remote Method Invocation)
  2. JNI (Java Native Interface)

J2EE (Java 2 Enterprise Edition)

  1. EJB (Enterprise Java Bean)

JavaのWebアプリケーション技術

  1. Javaアプレット (Java applet)
  2. Javaのセキュリティ

JSP (JavaServer Pages)

  1. スクリプトレット
  2. 宣言
  3. コメント
  4. JSPで初めから宣言せずに使用できる特別なオブジェクト

コンパイル

Javaのソースファイルをテキストエディタ等で作成します。次にjava ソースファイルの例 HelloWorld.java を示します。

class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello world");
    }
}

Javaのソースファイルをコンパイルするには、javac コマンドを使用します。

javac [ オプション ] ソースファイル名
javac HelloWorld.java

Javaプログラムの実行方法

Javaプログラムを実行するには、javaコマンドを使用します。

java [ オプション ] クラス名
Javaの実行オプション一覧
オプション意味
-classpath クラスパスクラスパスを指定する。
-version製品バージョンを表示して(プログラムを実行せずに)終了する。
-showversion製品バージョンを表示してからプログラムを実行する。
-Djava.compiler=NONEJIT(Just in Time)コンパイラなしで実行する。
-helpヘルプメッセージを表示する。

ソースファイル HelloWorld.java をコンパイルして生成されたクラスファイル HelloWorld.class を実行する例を次に示します。

$ java HelloWorld
Hello world

パッケージ化したクラスファイル ./com/Sample/HelloWorld.class を実行する例を次に示します。

$ java com.Sample.HelloWorld
Hello world

Exception in thread "main" java.lang.NoClassDefFoundError: と表示されて実行できない場合、CLASSPATHの設定かクラス名の指定方法に誤りがあります。以下の点を調べてみてください。

識別子

クラスや変数、メソッド(関数)、パッケージの名前のことを識別子と呼びます。識別子は自由に命名できますが、以下の制約があります。

予約語

予約語とはJavaにおいて固有の意味を持つ単語です。そのため、予約語は識別子として用いることができません。Javaの予約語を以下に示します。

データ型

変数とは、プログラムで扱われる数値や文字列などの値を一時的に記憶しておく領域のことです。変数を識別するために、ひとつひとつの変数に固有の識別子を付けておきます。これを変数名といいます。

変数を使用する前に、どのような変数を使用するか、その変数名や変数に記憶できるデータ型を明らかにしておくことを変数の宣言といいます。

Javaの基本データ型を次に示します。

種類サイズ範囲
booleanブール1 bittrue または false
byte符号付き整数8 bit-128 〜 127
charUnicode文字16 bit0 〜 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
floatIEEE 754
単精度浮動小数
32 bit±3.40282347E+38 〜 ±1.40239846E-45
doubleIEEE 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水平タブ
\\円記号(環境によってはバックスラッシュ)
\'シングルクォーテーション
\"ダブルクォーテーション
\b1文字戻る
\rその行の先頭に戻る
\uxxxx4桁の数値 (xxxx) で表した Unicode の文字

配列

配列を宣言する構文を次に示します。

データ型 変数名[];

配列を初期化する構文を次に示します。

変数名 = new データ型[要素の数];

配列の宣言と初期化を行う例を次に示します。

int a[];
a = new int[10];

1行にまとめて記述することもできます。

int a[] = new int[10];

初期値を与えて初期化する方法もあります。初期値で与えた値の数だけ要素が作成されます。

データ型 変数名[] = { カンマで区切った値のリスト };
int a[] = { 1, 2, 3 };

配列の要素の数を知るには、変数名.length を参照します。

int i = a.length;

配列をコピーするには、System.arraycopy メソッドを使用します。

arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

オブジェクトの配列 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() {
    // 初期化処理
  }
}
C++ ではインスタンスが破棄される際に自動的に呼び出されるメソッド(デストラクタ)が存在しますが、Java には存在しません。

抽象クラス 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

インタフェースとは定数とメソッドの宣言だけを集めたものです。メソッドは宣言するだけで実装はしません。

interface インタフェース名 { ... }

インタフェースの実装(継承)は、implements キーワードを使用します。

class クラス名 implements インタフェース名 { ... }

クラスを継承するときの extends とは異なります。

クラスはひとつのクラスしか継承できませんが、インタフェースは複数継承できます。

interface MyInterface extends MyInterface1, MyInterface2 {
SEO 仕事 掲示板 レンタルサーバー プロフ SEO