Javaの基本的な文法などを紹介します。
覚える必要は全くないので「ふ〜ん、そうなんだ〜」くらいな感じでどんどん読み進めていきましょう。
実際にプログラムを書くとき「あれ、どう書くんだっけ?」となれば、そのときにまた読み返せばOK!
実は僕もいつもネットで調べながらプログラミングしていますよ。
1.変数
変数とは名前の付いたメモリ位置のことで値を格納することが可能です。変数はプログラムの中でも基本的な概念であり、ほとんどのプログラムで使用します。
変数を例えるならば値を入れる箱のようなものです。箱の中の物を入れ替えることができるのと同じように変数の中に入れる値を変更することも可能ですし、空にすることも可能です。
また変数の名前は自由に付けることができます。箱に入れた物をあとからでも容易に判別できるように名前を付けるのと同じように、変数にも後から何の値を入れたかが容易に判別できる名前を付けるようにするとよいでしょう。
1.1.基本データ型
Java が扱うデータには、数字/文字列/画像/音など、たくさんの種類があります。
下の表に挙げているものは、整数/浮動小数点数/真偽値/文字などの基礎的なデータの種類を表すためのデータ型で、基本データ型(プリミティブ型)と呼びます。Javaには8種類の基本データ型がサポートされています。
表1.JAVAの8つの基本データ型
型名 |
ビット数 |
表現できる範囲 | 分類 | 初期値 |
byte | 8 (1) | -2の7乗~2の7乗-1 | 符号付整数型 | 0 |
short | 16 (2) | -2の15乗~2の15乗-1 | ||
int | 32 (4) | -2の31乗~2の31乗-1 | ||
long | 64 (8) | -2の63乗~2の63乗-1 | 0L | |
char | 16 (2) | Unicode の一文字 |
文字列 |
‘\u0000’ |
float | 32 (4) | IEEE 754規格の32ビット浮動小数点数 | 浮動小数点数型 | 0.0F |
double | 64 (8) | IEEE 754規格の64ビット浮動小数点数 | 0.0 | |
boolean | 1 (-) | 真偽値(true/false) | 論理値型 | False |
1.2.リテラル値
プログラム上に直接書かれた数値や文字列などの定数をリテラルと呼びます。
リテラルも変数と同様に何らかの型として扱われるため、型を判別するために特定の書式で書くことが要求されます。
リテラル値は変数へ格納することができますが、リテラルの型が格納先の変数の型に合わない場合は格納できません。
Javaでは以下のリテラルが用いられています。
表2.JAVAの6つのリテラル型
型 | 書式 | 例 |
整数リテラル | なし | 100 |
浮動小数点リテラル | なし | 2.5 |
文字リテラル | ‘(シングルクォーテーション)で値を囲む | ‘あ’ |
文字列リテラル | “(ダブルクォーテーション)で値を囲む | “あいうえお” |
booleanリテラル | なし | true |
nullリテラル | なし | null |
整数リテラルはint型とみなされます。そのため、整数リテラルの最大値は2の31乗-1(2147483647)、最小値は-2の31乗(-2147483648)です。
Long型の値を表すには「L」または「l」を数字の最後に付ける必要があります。
[例]
2147483648L
小数点または指数を含む数値リテラルはdouble型とみなされます。float型の値を表すには「F」または「f」を数字の最後に付ける必要があります。
[例]
1.123F
1.3.変数の宣言
(1)変数の宣言
Javaでは全ての変数を使用前に宣言しなければなりません。
変数の宣言では変数の型と変数名を指定します。
[構文]
変数名;
[例] counter
という名前のint型の変数を宣言する場合
int counter;
宣言した状態では変数counter
の値には初期値が入っています。すなわちこの場合は0
が入っています。
(2)値の代入
宣言された変数には値を代入することができます。
変数に値を代入するには変数名の後に=演算子を利用してそのあとに代入する値を記述します。
[構文]
変数名 = 値;
[例] counter
という名前のint型の変数に100
という値を代入する場合
counter = 100;
変数の宣言時に値を代入することも可能です。これは変数の初期化と呼ばれます。
[構文]
型 変数名 = 値;
[例] counter
という名前のint型の変数に100
という値を代入する場合
int counter = 100;
(3)変数と代入サンプルプログラム
次のプログラムではこれまでに学んだ概念が例示されています。
char型、int型、float型の変数を作成しています。
initial
という名前のchar型変数とprice
という名前のint型変数を宣言します。
次に変数initial
にはX
という値を、変数price
には1000
という値を代入します。
また、rate
という名前のfloat型変数は宣言時に初期化します。
最後に変数の値を表示します。println()
メソッドは出力をコンソールに送信します。
[DisplayValue.java]
class DisplayValue { public static void main (String[] args) { //変数の宣言 char initial; int price; float rate = 0.05f; //値の代入 initial = 'X'; price = 1000; //変数の値をコンソールに送信 System.out.println(“initial is “ + initial); System.out.println(“price is “ + price); System.out.println(“rate is “ + rate); } }
実行例は次のようになります。
C:\java>java DisplayValue initial is X price is 1000 rate is 0.05
1.4.配列とコマンドライン引数
配列とは「同じ型のデータを複数持つことができる入れ物」のことです。配列内の個々の変数は配列要素と呼びます。int
やlong
などの基本データ型のデータだけでなく、String
やInteger
などのオブジェクト型のデータも持つことができます。
配列は関連するデータのグループを扱う際に便利です。例えば30日間の平均気温や複数の電話番号などデータを配列によって表すと簡単に操作することが可能です。
配列を作成するには2つの手順を踏む必要があります。まず配列を宣言し、次に配列の要素に領域を割り当てます。これらの手順について説明します。
(1)1次元配列
同じ型のデータが1次元的(直線的)に並んだ配列を1次元配列と呼びます。
(ア)1次元配列の宣言
配列を宣言するには以下のようにします。
[構文]
配列の型[] 配列名;
[例]
int[] numbers;
また、以下のように宣言することも可能です。(通常は上のように宣言します。)
[構文]
配列の型 配列名[];
[例]
int numbers[];
(イ) 1次元配列の生成(領域割り当て)
宣言した配列に領域を割り当て生成します。次の一般形式を使用します。
[構文]
配列名 = new 配列の型[要素数];
[例] 10個のint型のデータを持つ配列numbers
を生成する場合
numbers = new int[10];
次の形式を利用すれば、配列の宣言と生成を1行で表示することが可能です。
[構文]
配列の型[] 配列名= new 配列の型[要素数];
[例] 10個のint型のデータを持つ配列numbers
を生成する場合
int[] numbers = new int[10];
以下の図1は10個の要素を持つ1次元配列を図解したものです。
図1 1次元配列
int [] numbers = new int[10];
numbers [0] |
numbers [1] |
numbers [2] |
numbers [3] |
numbers [4] |
numbers [5] |
numbers [6] |
numbers [7] |
numbers [8] |
numbers [9] |
※Javaの配列の番号は0から始まります。
(ウ) 1次元配列の要素数取得
配列の要素数は以下の式で取得できます。
[構文]
配列名.length;
[例] 配列numbers
の要素数を取得する場合
int size = numbers.length;
(エ) 1次元配列への値の代入
配列の生成を行ったのみの状態では配列の各要素には配列の型で定義されている初期値が入っています。配列の各要素に値を代入するには以下のようにします。
[構文]
配列名[番号] = 値;
[例] 配列numbers
の0番目と1番目の要素に値を代入する場合
int[] numbers = new int[10]; numbers [0] = 1; numbers [1] = 2;
(オ) 1次元配列の生成時に初期値を与える方法
Javaでは省略形の構文を利用して配列を宣言し、領域を割り当て、要素を初期化することができます。その構文は以下のようになります。
[構文]
配列名 = { 値 , 値 , ・・・・ };
[例] 10個の整数を持つ配列numbers
に初期値を入れて生成する場合
int[] numbers = { 5, 33, 82, 16, 72, 55, 2, 19, 0, 48 };
(カ) 1次元配列サンプルプログラム
次のプログラムではnumbers
という名前の4つの要素を持つ1次元配列を、配列の宣言、領域の割り当て、配列要素の代入の手順で初期化しています。また、intarray
という名前の3つ要素を持つ1次元配列は、配列の生成時に初期値を与える方法で初期化しています。
最後に上記の2つの配列について要素の総数と配列の要素の値を表示しています。
[OneDimensionArray.java]
class OneDimensionArray { public static void main (String[] args) { //配列を宣言して領域を割り当てる int[] numbers = new int[4]; //要素を初期化する numbers[0] = 10; numbers[1] = 21; numbers[2] = 32; numbers[3] = 43; //配列を宣言し、領域を割り当て、初期化する int[] intarray = { 15, 30, 45 }; //配列の要素数を表示する System.out.println(“numbers.length = “ + numbers.length); System.out.println(“intarray.length = “ + intarray.length); //配列の要素を表示する System.out.println(numbers[0]); System.out.println(numbers[1]); System.out.println(numbers[2]); System.out.println(numbers[3]); System.out.println(intarray[0]); System.out.println(intarray[1]); System.out.println(intarray[2]); } }
実行例は次のようになります。
C:\java>java OneDimensionArray numbers.length = 4 intarray.length = 3 10 21 32 43 15 30 45
(2) 多次元配列
1次元配列に加えて、Javaでは2次元またはそれ以上の配列を作成することができます。Javaの多次元配列は、配列の配列として実装されます。
ここでは2次元配列を例にとります。
(ア) 2次元配列の宣言
配列を宣言するには以下のようにします。
[構文]
配列の型[][] 配列名;
[例] int型のnumbers
という名前の2次元配列を宣言する場合
int[][] numbers;
また、以下のように宣言することも可能です。(通常は上のように宣言します。)
[構文]
配列の型 配列名[][];
[例] int型のnumbers
という名前の2次元配列を宣言する場合
int numbers[][];
(イ) 2次元配列の生成(領域割り当て)
宣言した配列に領域を割り当て生成します。次の一般形式を使用します。
[構文]
配列名 = new 配列の型[1次元目の要素数][2次元目の要素数];
[例] 2×3のint型の2次元配列numbers
を生成する場合
numbers = new int[2][3];
次の形式を利用すれば、2次元配列の宣言と生成を1行で表示することが可能です。
[構文]
配列の型[][] 配列名= new 配列の型[1次元目の要素数][2次元目の要素数];
[例] 2×3のint型の2次元配列numbers
を生成する場合
int[][] numbers = new int[2][3];
以下の図2は2×3の要素を持つ2次元配列を図解したものです。縦が1次元目、横が2次元目を表しています。
図2 多次元配列
int numbers [] = new int[2][3];
numbers [0][0] | numbers [0][1] | numbers [0][2] |
numbers [1][0] | numbers [1][1] | numbers [1][2] |
(ウ) 多次元配列の要素数取得
2次元配列の1次元目の要素数は以下の式で取得できます。
[構文]
配列名.length;
[例] 配列numbers
の1次元目の要素数を取得する場合
int size = numbers.length;
2次元配列の2次元目の要素数は以下の式で取得できます。
[構文]
配列名[番号].length;
[例] 配列numbers
の2次元目の要素数を取得する場合
int size = numbers[0].length;
(エ) 多次元配列への値の代入
配列の生成を行ったのみの状態では配列の各要素には配列の型で定義されている初期値が入っています。配列の各要素に値を代入するには以下のようにします。
[構文]
配列名[1次元目の番号] [2次元目の要素数] = 値;
[例] 2×3のint型2次元配列numbers
の各要素に値を代入する例
int[][] numbers = new int[2][3]; numbers [0][0] = 1; numbers [0][1] = 2; numbers [0][2] = 3; numbers [1][0] = 4; numbers [1][1] = 5; numbers [1][2] = 6;
(オ) 多次元配列の生成時に初期値を与える方法
1次元配列の場合と同様に多次元配列でも省略形の構文を利用して配列を宣言し、領域を割り当て、要素を初期化することができます。その構文は以下のようになります。
[構文]
配型[][] 配列名= { { 値 , 値 ,・・} , { 値 , 値 , ・・} , ・・・};
[例] 2×3のint型の2次元配列numbers
を生成して初期値を与える例
int[][] numbers = { { 1, 2, 3 } , { 4, 5, 6 } };
(カ) 多次元配列サンプルプログラム
次のプログラムではnumbers
という名前の3×2行列を、配列の宣言、領域の割り当て、配列要素の代入の手順で初期化しています。また、intarray
という名前の2次元配列を配列の生成時に初期値を与える方法で初期化しています。
最後に上記の2つの配列について要素の総数と配列の要素の値を表示しています。
[TwoDimensionArray.java]
class TwoDimensionArray { public static void main (String[] args) { //配列を宣言して領域を割り当てる int[][] numbers = new int[3][2]; //要素を初期化する numbers[0][0] = 10; numbers[0][1] = 21; numbers[1][0] = 32; numbers[1][1] = 43; numbers[2][0] = 55; numbers[2][1] = 61; //配列を宣言し、領域を割り当て、初期化する int[][] intarray = { { -15, 30 }, { 45, -60 }, { 75, 90 } }; //配列の要素数を表示する System.out.println(“numbers.length = “ + numbers.length); System.out.println(“intarray.length = “ + intarray.length); //配列の要素を表示する System.out.println(numbers[0][0]); System.out.println(numbers[0][1]); System.out.println(numbers[1][0]); System.out.println(numbers[1][1]); System.out.println(numbers[2][0]); System.out.println(numbers[2][1]); System.out.println(intarray[0][0]); System.out.println(intarray[0][1]); System.out.println(intarray[1][0]); System.out.println(intarray[1][1]); System.out.println(intarray[2][0]); System.out.println(intarray[2][1]); } }
実行例は次のようになります。
C:\java>java TwoDimensionArray numbers.length = 3 intarray.length = 3 10 21 32 43 55 61 -15 30 45 -60 75 90
(3) コマンドライン引数
Java でプログラムに何らかのパラメタを与えるには、プログラム内のいずれかのクラスに必ず存在する main()
メソッドの引数を利用します。コマンドラインから実行時に引き渡された文字列はmain()
メソッドの引数であるString型配列に代入されます。
コマンドラインから複数の文字列を渡すことができ、1つめはargs[0]
で、2つめはargs[1]
から参照することが可能です。
次のプログラムはコマンドライン引数の第一番目のものを表示させるプログラムです。
[TestArgument1.java]
class TestArgument1 { public static void main (String[] args) { //コマンドライン引数をそのまま出力 System.out.println(args[0]); } }
実行例は次のようになります。コマンドラインの引数に Hello!
を与えています。
C:\java>java TestArgument Hello! Hello!
次の例はコマンドライン引数から3つの数字を受け取ってその和を表示させるプログラムです。
Integer. parseInt()
は引数として与えられたString型の値を読み取り、int型に解釈した値を返します。返された値は左辺の変数に代入されます。
[TestArgument2.java]
class TestArgument2 { public static void main (String[] args) { //コマンドライン引数をString型からint型に変換しint型変数に代入 int first = Integer. parseInt(args[0]); int second = Integer. parseInt(args[1]); int third = Integer. parseInt(args[2]); //コマンドライン引数から受け取った数字の和を出力 System.out.println( first+ second+ third ); } }
実行例は次のようになります。コマンドラインの引数に 5、8、12 を与えています。
C:\java>java TestArgument 5 8 12 25
1.5. String型とStringクラス
文字列とは「Hello World
」のような文字の連続して並んだものです。Javaで文字列を扱うにはStringクラスを使用します。文字列をダブルクォーテーション「“」で囲むことによってStringクラスのインスタンスを生成することができます。
[構文]
String インスタンス名 = "文字列";
[例] 「Hello World
」とういう文字列を生成する場合
String str = "Hello World";
Stringオブジェクトが持つ文字列を変更することはできません。一度設定した文字列は後から変更できない読み取り専用の型です。例えば以下のようなコードを考えてみます。
String str = "Hello World"; str = "こんにちは 世界";
一見変更できたように思えますが、2行目で文字列str
は“新しい”オブジェクトになっています。つまり、1行目の時点での文字列str
と2行目の時点での文字列str
は別のオブジェクトです。
変更可能な文字列を扱いたい場合はStringクラスではなくStringBufferクラス を使用します。
次にStringクラスを使ったサンプルプログラムを示します。
[TestString.java]
public class TestString { public static void main(String[] args) { // 文字列strを生成 String str = "Hello World"; // 表示 System.out.println("文字列strの値は " + str + " です。"); } }
実行例は次のようになります。
C:¥java>java TestString 文字列strの値は Hello World です。
1.6. 演習問題
(1) 以下の基本データ型とその説明を正しく結びなさい。
float
・ ・16ビットUnicodeキャラクタデータboolean
・ ・真偽値byte
・ ・8ビット符号付き整数int
・ ・16ビット符号付き整数 double
・ ・32ビット符号付き整数 long
・ ・64ビット符号付き整数short
・ ・32ビット符号付き浮動小数点数 char
・ ・64ビット符号付き浮動小数点数
(2) 以下の内容に従ったプログラムを作成しなさい。
・ クラス名はHensuHyouji
とする。
・ num
という名前のint型変数を宣言する。
・ rate
という名前のdouble型変数を宣言する。
・ flg
という名前のboolean型変数を宣言する。
・ capital
という名前のchar型変数を宣言時に初期化する。値は「Q
」という値を代入する。
・ 変数num
には「150
」、変数rate
には「0.5
」、変数flg
には「true
」という値を代入する。
・ 最後にprintln()
ステートメントを使って変数num
、rate
、flg
、capital
の値を表示する。
・ 表示結果は以下のようになる。
150 0.5 true Q
【解説】
(3) 以下の内容に従ったプログラムを作成しなさい。
・ クラス名はHairetsuHyouji
とする。
・ int型の変数3つ分の領域を割り当てられた配列orders
を宣言する。
・ double型の配列counter
を宣言し、宣言時に値「0.25
」「1.8
」「15.5
」を要素として初期化する。
・ 配列orders
の要素として「15
」「96
」「560
」を代入して初期化する。
・ 最後にprintln()
ステートメントを使って配列orders
の要素数、配列orders
の要素の値、配列counter
の要素の値を表示する。
・ 表示結果は以下のようになる。
3 15 96 560 0.25 1.8 15.5
【解説】
(4) 以下の内容に従ったプログラムを作成しなさい。
・ クラス名はMojiretsuHyouji
とする。
・ String型の変数str
を宣言し、文字列「Good morning
」を格納する。
・ String型の変数giveStr
を宣言し、コマンドライン引数から取得した値を格納する。
・ 最後にprintln()
ステートメントを使って変数str
と変数giveStr
の値を表示する。
・ コマンドライン引数に文字列「Greeting
」を与えた場合、結果は以下のようになる。
Good morning Greeting
【解説】