最終更新日:2021/01/30 原本2017-

Javaのバージョンについて

本講義でのJDK (Java Development Kit) のバージョンはネットワーク演習室での環境に合わせてJava SE 8を前提とします. 各自のコンピュータで開発を行う場合,ここから適切なプラットフォームのJDKを入手してインストールして下さい. JDKのインストール及び設定は書籍等を参考にして下さい.

Java開発環境

Javaの主な開発環境としては以下のようなものがあります. 本講義ではネットワーク演習室で利用でき,各自のコンピュータで容易に利用できるEclipse Marsでの開発を前提にします. 実習においては,各自の好きな開発環境を利用して構いません. Eclipseを自宅等のコンピュータに導入するためにはこちらGETTING STARTEDの指示通り導入するか,書籍等を参考にしてください.

Eclipseによるプロジェクト作成

ここでは,EclipseによるJavaプログラミングについて述べます. ここでは,HelloJavaというサンプルプロジェクトを作成し,実行するまでについて説明します.
1 Eclipseを起動します.
2 "File"->"New"->"Java Project"を選択してください.
3 "New Java Project"ウィンドウで"Project name:"にプロジェクト名を入力してください.
ここでは"HelloJava"とします.
"Next"ボタンを押して次に進みます.
4 "Finish"ボタンで終了します.(前の画面で"Finish"を選択しても良いです)
5 "Package Explorer"で”HelloJava"プロジェクトの"src"を右クリックし,"New"->"Class"を選択してください.
6 ”New Java Class”ウィンドウの"Name:"にクラス名を入力してください.
ここでは"HelloJava"とします.
"public static void main(String[] args)"にチェックを入れて,"Finish"ボタンを押します.
(mainメソッドを含まないクラスを作成したい場合はこのチェックの必要はありません)
mainメソッドの中に下記の4行目を追加してください.

HelloJava.java

1
2
3
4
5
6
public class HelloJava {
 
    public static void main(String[] args) {
        System.out.println("Hello Java");
    }
}
1 ”Run"->"Run"か,"Run"ボタンで実行します.
2 "Console"にHello Javaと出力されれば成功です.
Javaではクラスとメソッドを基本的な要素としてプログラムが構成されます. この例では,HelloJavaというプログラムはHelloJavaというクラスとmainというメソッドで構成されています.
クラス
オブジェクトに共通の属性や振る舞いを統一的に表現した雛形です.
メソッド
クラスの振る舞いです.
その他には
インスタンス
あるクラスから生成された実体です.
フィールド
クラスの属性です.
コンストラクタ
インスタンスを生成する時に主に初期化のために用いられる特殊なメソッドです.
サブクラス
スーパークラス(親クラス)を継承したクラスをサブクラス(子クラス)と呼びます. 継承に関してはここで学びます. Javaでは「単一継承」しか許されないので継承できるスーパークラスは1つだけです.
なども重要なワードです.
JavaではGarbage Collection (GC)と呼ばれる機能により,原則的にデストラクタ処理は不要です.

HelloJavaのサンプルの説明

HelloJava.java

1
2
3
4
5
6
public class HelloJava {
 
    public static void main(String[] args) {
        System.out.println("Hello Java");
    }
}
1行目
「HelloJava」というクラス名です.
  • 1つの.javaファイルには1つのクラスしか記述してはいけません
  • ファイル名とクラス名は同じにしなければいけません
  • 推奨されませんが1つの.javaファイル名に複数のクラスを記述することができますが,そのうち1つはファイル名と一致する必要があります
  • 3行目
    Java仮想マシン(Virtual Machine:VM)が最初に実行を開始するmainメソッド
  • publicを付けないとVMが見つけられません
  • staticをつけるとインスタンス化しなくてもメソッドにアクセスできます.実行時にHelloJavaクラスをインスタンス化しないでmainメソッドを実行するためにはstaticが必要になります.
  • 4行目
    Systemクラスoutフィールドprintlnメソッド
    を意味します. Systemクラスはjava.lang.Objectクラスを継承していますが,java.langはimportしなくてもコンパイラによって自動的にimportされます.
    Systemクラスのインスタンスを作ることはできません.
    Java APIを使いこなせるようになって下さい.

    コメント

    Javaでのコメントの書き方として下記の三種類があります. できるだけ,Javadocに沿ったコメントを書くようにしましょう.
    複数行コメント
    /* コメント */
    複数行コメント
    /** コメント(Javadocによって構造化ドキュメントが作成出来ます) */
    単一行コメント
    // コメント

    アクセス制御

    フィールド,メソッド,インナークラスのアクセス制御のための修飾子は以下の通りです.
    private同じクラス内からのみアクセス可能
    なし同じクラス内,もしくは同じパッケージからのみアクセス可能
    protected同じクラス内,もしくは同じパッケージ,もしくはサブクラスからのみアクセス可能
    publicどこからでもアクセス可能
    クラスのアクセス制御のための修飾子は以下の通りです.
    なし同じパッケージからのみアクセス可能
    publicどこからでもアクセス可能

    パッケージ

    HelloJava.javaに下記の1行目を追加してください.

    HelloJava.java

    1
    2
    3
    4
    5
    6
    7
    8
    package jp.ac.utsunomiya_u.is;
     
    public class HelloJava {
     
        public static void main(String[] args) {
            System.out.println("Hello Java");
        }
    }
    1 "package jp.ac.utsunomiya-u.is;"の左のバツ印を右クリックします.
    "Move 'HelloJava.hava' to package 'jp.ac.utsunomiya-u.is'"をダブルクリックします.
    2
    Javaではパッケージを用いて,幾つかのクラスなどを機能毎にまとめたり,名前空間を提供することでクラス名などの衝突を防ぐことが出来ます.

    基本データ型

    Javaでは以下の基本データ型が利用できます.
    データ型タイプサイズ[bit]範囲初期化例既定値ラッパクラス
    boolean論理型1true or falseboolean b = true;falseBooelan
    byte整数型8-128から+127byte b = 1;(byte)0Byte
    short整数型16-32,768から+32,767short s = 10;(short)0Short
    int整数型32-2,147,483,648から+2,147,483,647int i = 100;0Integer
    long整数型64-9,223,372,036,854,775,808から+9,223,372,036,854,775,807long l = 1000L; or 1000l;0LLong
    float実数型32±1.401298464324817E-45から±3.4028234663852886E+38float f = 1.5e-3F; or 1.5e-3f;0.0fFloat
    double実数型64±4.9E-324から±1.7976931348623157E+308double d = 0.1;0.0dDouble
    char文字型16Unicode ('\u0000'から'\uffff')char c = 'X';'\u000'Character
    C++での論理型はboolですが,Javaではbooleanであることに注意してください.

    ラッパクラス

    Javaでは基本データ型と対になるようにラッパクラスが利用できます. ラッパクラスは文字列から数値への変換など役に立つフィールドやメソッドがたくさんあります. Intergerクラスの例
    インスタンス生成

    1
    2
    int i1 = 10;
    Integer i2 = new Integer(i1);
    メソッド

    1
    2
    Integer i1 = Integer.valueof("100"); // Stringの値を保持するIntegerオブジェクトに変換
    int i2 = Integer.parseInt("100"); // 文字列の引数を符号付き10進数の整数型として構文解析してintに変換
    フィールド

    1
    2
    3
    4
    5
    6
    7
    8
    long l = 2147483648l;
    if (l > Integer.MAX_VALUE) { // Integer.MAX_VALUE = 2^31-1より大きいか
        System.out.println(l + "はInteger.MAX_VALUEよりも大きいです");
    } else if (l < Integer.MIN_VALUE) { // Integer.MIN_VALUE = -2^31より小さいか
        System.out.println(l + "はInteger.MIN_VALUEよりも小さいです");
    } else {
        System.out.println(l + "はIntegerの範囲です");
    }

    命名規則

    Javaにおける変数名などの命名制限として以下があります. また,良く用いられる命名規則として以下のようなものがあります.
    クラス
    例:ServerSocket, HttpURLConnection, URLStreamHandler
    変数
    例:value, errorMessage, startTime
    定数
    例:final int DAYS_IN_WEEK = 7;
    メソッド
    例:accept(), close(), getChannel(), setLocalPort(), isClosed(), openConnection()
    アクセッサ
    真偽を返すメソッド

    演算子

    Javaでは の演算子がC++と同様に使えます. 加えて のビット操作演算子が使えます.

    制御

    Javaでは の制御構文がC++と同様に使えます.
    Javaではgoto文は使用できません.

    配列

    宣言
    int a[];
    のようにも書けますが,
    int[] a;
    と書くことの方が多いです. 理由は,「aがintの配列であるということがわかりやすい」,「配列を返すメソッドではint[] aのように書かなければならない」ためです.
    初期化
    アクセス
    C++と同様です.対象外(a[-1]など)にアクセスすると実行時エラーが発生します.