...

第1章 Java 言語について

by user

on
Category: Documents
2

views

Report

Comments

Transcript

第1章 Java 言語について
第1章 Java 言語について
(オブジェクト指向,変数の扱い方,繰り返し条件と条件分岐)
Java 言語の概要とオブジェクト指向,変数の扱い方,繰り返し条件と条件分岐について理解し,
プログラム作成を行う。
1.1 Java 言語の概要
JAVA は Sun Microsystems が開発したプログラミング言語であり,たとえば,一般ユーザが使う
アプリケーションを始めとして,ネットワークを介したコミュニケーションツールや Web ブラウザで扱
う動的なコンテンツ作成など幅広く普及している。特徴的な点と歴史を下記にまとめる。
(1) マルチプラットホーム
マルチプラットホーム(multi-platform)とは,ブログラミングが特定 OS に依存せず,複数の
OS に対応していること。本来,プログラム実行は OS に依存する。Windows 用に開発したプ
ログラムは WindowsOS 上のみで動作する。 JAVA はマルチプラットホームの実現により,
Windows 用に開発したプログラムを,Windows 上だけでなく,Macintosh,Unix,Linux 上な
ど,OS 環境に依存せずに動作されることができる。
(2) メモリ管理の容易性
メモリ管理とは,メモリの確保や開放を行うための操作であり,C/C++言語ではプログラマが
メモリ管理するためのソースコードを記述するため,複雑になり,バグを発生させる要因にな
ることがあるが,Java では JavaVM(Virtual Machine)がメモリ管理を行うため,バグ発生要因
を減少させることができる。
(3) オブジェクト指向
オブジェクト指向とは,オブジェクトという処理単位を用いて問題を解決する手法。オブジェク
トは属性,振る舞い,識別子のアイテムを持ち,ソフトウェアの開発と保守の複雑さを改善し,
開発効率と保守性を高めている。
1-1
マルチプラットフォームの概略を次図に示す。
また,Java のバージョンとその歴史の変遷を次表に示す。
バージョン
JDK1.0
(1996 年 1 月 23 日)
JDK1.1
(1997 年 2 月 19 日)
J2SE1.2
(1998 年 12 月 8 日)
J2SE1.3
(2000 年 5 月 8 日)
J2SE1.4
(2002 年 2 月 6 日)
J2SE5.0
(2004 年 9 月 30 日)
JAVA SE 6
(2006 年 12 月 11 日)
JAVA SE 7
(2011 年 7 月 28 日)
JAVA SE 8
(2014 年 3 月 18 日)
JAVA SE 9
(2016 年頃?)
概要
最初のバージョン
いくつかの重要な機能の追加
コードネーム Playground
このバージョンから呼称が JAVA2 に変更され,
J2SE5.0 までこの呼称が使われる。
コードネーム Kestrel
コードネーム Merlin
コードネーム Tiger
コードネーム Mustang
JSR270 の元で開発され,JAVA SE 6 においては,
Sun は命名方針を変更して”J2SE”から JAVA SE に変更
し,バージョン番号から”.0”の部分を廃止している。
コードネーム Dolphin
2006 年から開発が始まった。
約 10 年ぶりに言語仕様を改訂
※ 詳細は,Wikipedia の項目(http://ja.wikipedia.org/wiki/Java)を参照のこと。
1-2
1.2 プログラムの書式
プログラム(ソースコード)の書式について,ソースコードを例として各記述の概略を色分けして
説明する。
Java は大文字・小文字を区別して処理を行うため,
クラス・メソッド・変数の大文字・小文字の記述ミスに注意すること。
//Bxxxxxx 広大太郎
public class HelloWorldTest{
public static void main(String[] args){
System.out.println("Hello,World!");
}
}
部位
呼称
概略
黒字
コメント
コメント内容はプログラムとしては反映されない。
コード記述者や詳細などを書き込む際使用。
【使用例】
// コメント
(スラッシュ 2 つ): 単一行コメントの場合
/* コメント */
(スラッシュ・アスタリスクの組み合わせ): 複数行コメントの場合
赤字
終端文字
文の最後に必ず配置する。
;
半角セミコロン
青字
クラス
ソースコードに必ず一つある。
実行内容をブロックや文で記述する。
(後段で説明する。)
緑字
メソッド
実行内容を示す文の集まり。
Main メソッドより最初の処理が始まる。
1-3
1.2.1 識別子と予約語
プログラミング言語があらかじめ定めている言葉を予約語(キーワード)と呼び,任意に決める
ことができる変数名,オブジェクト名,メソッド名などの識別子に予約語を用いることはできない。
下記に予約語例を示す。
break
case
catch
continue
default
delete
do
else
finally
for
function
if
in
instanceof
new
return
switch
this
throw
try
typeof
var
void
while
with
false
true
null
abstact
boolean
byte
char
class
const
debugger
double
enum
export
extends
final
float
goto
implements
import
int
interface
long
native
package
private
protected
public
short
static
super
synchronized
throws
transient
volatile
1-4
1.3 文字連結と改行
文字列を結合表示する方法,改行のコマンド発行について検討する。
(1) 文字列結合演算子
文字列を含む式の中の+演算子は文字列連結演算子として機能する。
例えば,”Hello”+”javascript”は”Hellojavascript”として扱われる。
演算子の代表例を下記に示す(各演算子の詳細は後段で説明する)。
演算子類別
算術演算子
関係演算子
論理演算子
代入演算子
ビット演算子
記述例
+ - * / % ++ -< <= == => > !=
&& || !
=
<< >> >>> & | ^
(2) 改行コード
テキストファイル中で改行を意味する文字コードであり,文字列内に¥n で示される。
例えば,”world! ¥n!”+”Good”とした場合,”world!”の後に改行されて”Good”が出力される。
1-5
1.4 オブジェクト指向とクラス,メソッドの定義
Java はオブジェクト指向言語となっており,「オブジェクト」という処理単位を用いて構成される。
オブジェクトはクラス,メソッド,変数から構成されている。
オブジェクトの構成とソースコード書式を下記に示す。
オブジェクトの概念は難しいため,本段階では簡略的に説明する。
1.4.1 クラス定義
クラスとはオブジェクトの属性(変数で表現)や振る舞い(メソッドで表現)を定義したもの。クラス
機能を使うためには,インスタンスを生成する。インスタンスとは,クラスを元に生成されたオブジ
ェクトを示す。
概念を例として,下図のような車の構成を例に示すと,Car クラスは,属性(変数: 車名,価格,
燃費,ガソリン量,総走行距離,…)と振る舞い(メソッド: メーター表示,給油,走行,…)を基に,
複数の Car インスタンスを生成することができる。
1-6
クラス定義にはクラス修飾子,class ステートメント,クラス名を順に記述する。属性(変数で表現)
や振る舞い(メソッドで表現)は括弧{}内に記述する。クラス修飾子には下記がある。
クラス修飾子
public
abstract
final
機能
すべてのクラスから呼び出し可能
インスタンス生成を制限
サブクラス作成を制限
また,クラス定義の書式は下記のようになる。
クラス修飾子 class クラス名{
属性属性(変数で表現)
振る舞い(メソッドで表現)
}
1.4.2 インスタンスの生成
インスタンスを生成するにはクラス名,インスタンス名,new 演算子,コンストラクタ名順に記述
する。new 演算子はインスタンス生成のための演算子であり,
クラス名 = コンストラクタ名
となる。
クラス名 インスタンス名 = new コンストラクタ(引数 0, 引数 1, …);
例:
Sample object = new Sample();
// Sample クラスからインスタンスオブジェクトを生成
1-7
1.4.3 メンバ変数
メンバ変数とは,オブジェクトの属性を示す変数であり,インスタンス変数,クラス変数の 2 種類
がある。
メンバ変数
インスタンス変数
クラス変数
機能
クラスから生成されたインスタンス個々に割り当てられた変数
クラスから生成されたすべてのインスタンスに共通する変数
例えば,下図のような車クラスから生成した車インスタンスを例に考えると,車クラスには車体
色変数,車輪数変数があり,車輪数変数はすべてのインスタンスで共通であるため,クラス変数と
して宣言され,車体色変数は車体ごとに異なるため,インスタンス変数として宣言される。
車インスタンス
車クラス
属性:車体色・車輪数
車クラス
振る舞い:走行
車体色:インスタンス変数
車輪数:クラス変数
1-8
メンバ変数の宣言方法は,アクセス修飾子,static 修飾子,データ型修飾子,変数名を順に記述
する。アクセス修飾子は他クラスからのアクセス権を制御するために用いる。アクセス修飾子を指
定しない場合,変数を宣言したクラスを含むパッケージ内からのみ参照できる。
static 修飾子は,インスタンス変数,クラス変数を区別するために用いられ,各変数により宣言,
呼び出し方法が異なる。アクセス修飾子の種類と機能を下表に示す。
アクセス修飾子
public
protected
private
機能
すべてのクラスから変数宣言したクラスの変数に参照可能
変数を宣言したクラスの含まれるパッケージとすべてのサブクラスから
参照可能
変数を宣言したクラスからのに参照可能
また,インスタンス変数とクラス変数の宣言・呼び出し方法は,それぞれ下表の通りである。
インスタンス変数
宣言方法
アクセス修飾子 データ型修飾子 変数名
呼び出し方法
インスタンス名.変数名
例: Sample クラスからインスタンス object を生成し,
Sample クラス インスタンス変数 flag を呼び出す
Sample object = new Sample();
object.flag;
クラス変数
宣言方法
アクセス修飾子 static データ型修飾子 変数名
呼び出し方法
クラス名.変数名
例: クラス変数 flag を Sample クラスから直接呼び出す
Sample.flag
1-9
1.4.4 メソッド定義
メソッドには,インスタンスメソッド,クラスメソッドの 2 種類があり,クラスメソッドはクラスから生
成されたすべてのインスタンスに対する処理を行い,static 修飾子を用いて宣言される。インスタン
スメソッドはクラスから生成された個々のインスタンスに対する処理を行い,static 修飾子を用いず
に宣言される(public static void main(String[] args)はこれにあたる)。
メソッド定義の書式は次の通りである。
アクセス修飾子 static 戻り値データ型 メソッド名(引数データ型 引数名){
メソッド処理
return 式;
}
なお,戻り値とは,メソッド呼び出し元に処理結果を返す値であり,戻り値があり/なしの場合で
定義・処理記述方法が異なる。
戻り値条件
戻り値がない場合
戻り値がある場合
戻り値データ型
void
戻り値データ型
メソッド処理に return 文を記述
引数とは,メソッドを呼び出す場合に渡す値であり,インスタンスや基本データ型を指定できる。
複数の引数を渡す場合は引数と引数の間にはコンマ(,)を使用する。
インスタンスメソッドとクラスメソッドの宣言・呼び出し書式は,それぞれ次項の表の通りである。
1-10
宣言方法
アクセス修飾子 戻り値データ型 メソッド名(引数データ型 引数名){
インスタンスメソッド
メソッド処理
return 式;
}
呼び出し方法
インスタンス名.メソッド名(引数)
例: Sample クラスからインスタンス object を生成し,Sample クラスの
インスタンスメソッド process を呼び出す
Sample object = new Sample();
object.process;
アクセス修飾子 static 戻り値データ型 メソッド名(引数データ型 引数名){
宣言方法
クラスメソッド
メソッド処理
return 式;
}
呼び出し方法
クラス名.メソッド名(引数)
例: process メソッドを Sample クラスから直接呼び出す
Sample.process();
1.4.5 コンストラクタ定義
コンストラクタ定義には”アクセス修飾子”と”コンストラクタ名”順に記述する。
コンストラクタ名はクラス名と一致させる必要がある。
アクセス修飾子 コンストラクタ名(引数データ型 引数名){
コンストラクタ処理;
}
1-11
1.5 変数の宣言
プログラムはデータを保存するための領域を確保する必要があり,この領域を変数と呼び,基
本型の変数定義と種別を下記に示す。
種類
データ型
サイズ
範囲
論理型
boolean
1bit
true か false (論理値)
文字型
char
16bit (2byte)
Unicode 文字データ
(16 ビット文字コード)
整数型
byte
8bit (1byte)
-128~127 (8 ビット整数)
整数型
int
16bit (2byte)
-32768~32167
単長整数
整数型
short
32bit (4byte)
-2147483648~2147483647
(整数:約±21 億 4 千 7 百万)
9223372036854775808
~ 9223372036854775807
整数型
long
64bit (8byte)
倍長整数
±922 京
※京:兆の上の単位
浮動小数点型
float
32bit (4byte)
有効桁 7 桁
浮動小数点型
double
64bit (8byte)
有効桁 16 桁
上記の基本型の変数とは別に,よく使用する変数型として,変数で文字列を扱う場合の String
型があり,Java のクラスに分類される。String 型は,ダブルクウォーテーション(”)で囲む。
String 型は非常に頻繁に使用されるため,省略した記述でクラスのオブジェクトを生成すること
(String city = ”Tokyo”;)が許可されている(基本型変数と同様の宣言文)。
1-12
1.6 繰り返し処理と条件分岐
プログラム制御は上から下に実行される順次実行,条件分岐,繰り返し処理の 3 つですべての
制御構造(アルゴリズム)を記述することができる。
Java で利用される制御文の代表例として”繰り返し処理”と”条件分岐”がある。下記に各処理の
概略を示す。
繰り返し処理
条件が成立する間,ブロック内を繰り返し実行する処理
for ループ
for 文は回数をカウントしながら繰り返して同じ処理を行うための処
理
カウントには変数が使用される。
【書式】
for(カウンタ初期値代入;繰り返し条件;回数カウント式){
文;
// 繰り返し処理を行う文
}
while ループ
while 文は for 文と同様の機能を持つ
繰り返す条件が繰り返し回数とは限らず,
条件成立する間,繰り返しを行うことができる。
(回数が不明の場合にも処理ができる:論理条件(false/true)を使用)
【書式】
while (条件){
文;
// 繰り返し実行する処理
}
do-while ループ
do-while 文は while 文と機能は同様
繰り返し条件を最初に行う(前判断)のが while 文に対し,
do-while 文は最後に行う(後判断)。
(do-while 文は条件が不成立の場合でも 1 回ブロック内の処理を行う。)
【書式】
do {
文;
// 繰り返し処理
}while(i<=3);
※ while 後に終端文字;が必要なことに注意
1-13
条件分岐
条件が成立・不成立により処理を選択する。
if 文
成立すれば文 1 を実行し,文 2 に進む。
不成立であれば文 2 に進む(文 1 は実行しない)。
【書式】
if(条件 1){
文 1;
}
文 2;
if-else 文
成立すれば文 1 を実行し,文 3 に進む(文 2 は実行しない)。
不成立であれば文 2 に進む(文 1 は実行しない)。
【書式】
if(条件 1){
文 1;
}else{
文 2;
}
文 3;
1-14
条件分岐
条件が成立・不成立により処理を選択する。
if-else if-else 文
条件 1 が成立すれば文 1 を実行し,文 4 に進む(文 2・文 3 は実行しない)。
条件 1 が不成立であれば条件 2 判断に移動する。
条件 2 が成立すれば文 2 を実行し,文 4 に進む(文 1・文 3 は実行しない)。
条件 2 が不成立であれば else に移動して
文 3 を実行し,文 4 に進む(文 1・文 2 は実行しない)。
【書式】
if(条件 1){
文 1;
}else if(条件 2){
文 2;
}else{
文 3;
}
文 4;
1-15
条件分岐
条件が成立・不成立により処理を選択する。
switch 文
変数:値の場合で処理を分岐したい場合,
if-else 文処理以外に switch 文による処理がある。
処理条件の場合により使い分けを行う。
変数が値 1 と等しいとき,
文 1 を実行して進む(文 2/文 3 は実行しない)。
変数が値 2 と等しいとき,
文 2 を実行して進む(文 1/文 3 は実行しない)。
変数が値 1 または値2と等しくないとき,
文 3 を実行して進む(文 1/文 2 は実行しない)。
【書式】
switch(変数){
case 値 1:
文 1;
break;
case 値 2:
文 2;
break;
default:
文 3;
}
1-16
1.6.1 算術演算子と論理演算子
条件分岐の条件を表す方法として算術演算子や論理演算子がある。
下記に各演算子の使用例を示す。
算術演算子
表記
概要
>
A> B
A が B より大きいとき,成立
>=
A >= B
A が B 以上のとき,成立
<
A< B
A が B 未満のとき,成立
<=
A <= B
A が B 以下のとき,成立
==
A == B
A と B が等しいとき,成立
!=
A != B
A と B が等しくないとき,成立
論理演算子
表記
概要
条件 A が成立し
かつ
&&
A&&B
条件 B が成立する
ならば
条件 A が成立するか
または
||
A||B
条件 A が成立するか
ならば
!
!A
条件 A が成立しないとき
1-17
Fly UP