第 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) 整数型 short 32bit (4byte) 整数型 long 64bit (8byte) -32768~32167 単長整数 -2147483648~2147483647 ( 整数 : 約 ±21 億 4 千 7 百万 ) 9223372036854775808 ~ 9223372036854775807 倍長整数 ±922 京 京 : 兆の上の単位 浮動小数点型 float 32bit (4byte) 有効桁 7 桁 浮動小数点型 double 64bit (8byte) 有効桁 16 桁 上記の基本型の変数とは別に, よく使用する変数型として, 変数で文字列を扱う場合の String 型があり,Java のクラスに分類される String 型は, ダブルクウォーテーション ( ) で囲む String 型は非常に頻繁に使用されるため, 省略した記述でクラスのオブジェクトを生成すること (String city = Tokyo ;) が許可されている ( 基本型変数と同様の宣言文 ) 1-12
1.6 繰り返し処理と条件分岐 プログラム制御は上から下に実行される順次実行, 条件分岐, 繰り返し処理の 3 つですべての制御構造 ( アルゴリズム ) を記述することができる Java で利用される制御文の代表例として 繰り返し処理 と 条件分岐 がある 下記に各処理の概略を示す 繰り返し処理 for ループ while ループ do-while ループ 条件が成立する間, ブロック内を繰り返し実行する処理 for 文は回数をカウントしながら繰り返して同じ処理を行うための処理カウントには変数が使用される 書式 for( カウンタ初期値代入 ; 繰り返し条件 ; 回数カウント式 ){ 文 ; // 繰り返し処理を行う文 while 文は for 文と同様の機能を持つ繰り返す条件が繰り返し回数とは限らず, 条件成立する間, 繰り返しを行うことができる ( 回数が不明の場合にも処理ができる : 論理条件 (false/true) を使用 ) 書式 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&&B 条件 A が成立しかつ条件 B が成立するならば A B 条件 A が成立するかまたは条件 A が成立するかならば!!A 条件 A が成立しないとき 1-17