Javaのバージョンについて
本講義でのJDK (Java Development Kit) のバージョンはネットワーク演習室での環境に合わせてJava SE 8を前提とします.
各自のコンピュータで開発を行う場合,ここ から適切なプラットフォームのJDKを入手してインストールして下さい.
JDKのインストール及び設定は書籍等を参考にして下さい.
Java開発環境
Javaの主な開発環境としては以下のようなものがあります.
メモ帳などのテキストエディタでコードを書いて,コマンドラインでコンパイルし,実行
Eclipse(汎用:C/C++, Web系(HTML5, PHPなど),スクリプト系(Perl,Pythonなど)なども可)
IntelliJ IDEA(主にJava用)
Netbeans(汎用:C/C++, Web系(HTML5, PHPなど),スクリプト系(Perl,Pythonなど)なども可)
Android Studio(Android用)
本講義ではネットワーク演習室で利用でき,各自のコンピュータで容易に利用できる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でのコメントの書き方として下記の三種類があります.
できるだけ,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 論理型 1 true or false boolean b = true; false Booelan
byte 整数型 8 -128から+127 byte b = 1; (byte)0 Byte
short 整数型 16 -32,768から+32,767 short s = 10; (short)0 Short
int 整数型 32 -2,147,483,648から+2,147,483,647 int i = 100; 0 Integer
long 整数型 64 -9,223,372,036,854,775,808から+9,223,372,036,854,775,807 long l = 1000L; or 1000l; 0L Long
float 実数型 32 ±1.401298464324817E-45から±3.4028234663852886E+38 float f = 1.5e-3F; or 1.5e-3f; 0.0f Float
double 実数型 64 ±4.9E-324から±1.7976931348623157E+308 double d = 0.1; 0.0d Double
char 文字型 16 Unicode ('\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"
);
int
i2 = Integer.parseInt(
"100"
);
フィールド
1
2
3
4
5
6
7
8
long
l = 2147483648l;
if
(l > Integer.MAX_VALUE) {
System.out.println(l +
"はInteger.MAX_VALUEよりも大きいです"
);
}
else
if
(l < Integer.MIN_VALUE) {
System.out.println(l +
"はInteger.MIN_VALUEよりも小さいです"
);
}
else
{
System.out.println(l +
"はIntegerの範囲です"
);
}
命名規則
Javaにおける変数名などの命名制限として以下があります.
全てのUnicode文字が使えます(マルチバイト文字も使えますが,半角英数と_(アンダースコア)のみで構成することが推奨されます)
先頭文字は数字ではいけません
キーワード(予約語)は使えません
大文字と小文字は区別されます
文字数に制限はありません
また,良く用いられる命名規則として以下のようなものがあります.
クラス
先頭文字を大文字で,それ以降は小文字
ワードの先頭を大文字
例:ServerSocket, HttpURLConnection, URLStreamHandler
変数
例:value, errorMessage, startTime
定数
定数を使うためにはキーワード"final"を型の前につける
すべて大文字で単語をアンダーラインでつなぐ
例:final int DAYS_IN_WEEK = 7;
メソッド
例:accept(), close(), getChannel(), setLocalPort(), isClosed(), openConnection()
アクセッサ
ゲッタ:get+取得したいフィールド変数名(先頭大文字),例:getAddress
セッタ:set+設定したいフィールド変数名(先頭大文字),例:setHostAddress
真偽を返すメソッド
is+形容詞(先頭大文字),例:isEmpty()
has+過去分詞(先頭大文字),例:hasChanged()
can+動詞原形(先頭大文字),例:canAccess()
演算子
Javaでは
算術演算子(+, -, *, /, %, ++, --)
代入演算子(=, +=, -=, *=, /=, %=)
比較演算子(==, !=, <, >, <=, >=)
ビット論理演算子(&, |, ^, !)
ビットシフト演算子(<<, >>)
ビット代入演算子(&=, |=, ^=, <<=, >>=)
ショートサーキット演算子(&&, ||)
三項演算子(?:)
の演算子がC++と同様に使えます.
加えて
>>>(ゼロ充填右シフト)
>>>=(ゼロ充填右シフト代入)
のビット操作演算子が使えます.
制御
Javaでは
分岐(if, if-else, switch)
繰り返し(for, while, do while, break, continue)
の制御構文がC++と同様に使えます.
Javaではgoto文は使用できません.
配列
宣言
int a[];
のようにも書けますが,
int[] a;
と書くことの方が多いです.
理由は,「aがintの配列であるということがわかりやすい」,「配列を返すメソッドではint[] aのように書かなければならない」ためです.
初期化
int[] a = {1,2,3,4};(要素数を書かない)
int[] a = new int[4];(規定の初期化が行われる)
アクセス
C++と同様です.対象外(a[-1]など)にアクセスすると実行時エラーが発生します.