【未経験からのプログラミング講座】STEP2 Javaの基本文法1

Pocket

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.配列とコマンドライン引数

配列とは「同じ型のデータを複数持つことができる入れ物」のことです。配列内の個々の変数は配列要素と呼びます。intlongなどの基本データ型のデータだけでなく、StringIntegerなどのオブジェクト型のデータも持つことができます。

配列は関連するデータのグループを扱う際に便利です。例えば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次元配列への値の代入

配列の生成を行ったのみの状態では配列の各要素には配列の型で定義されている初期値が入っています。配列の各要素に値を代入するには以下のようにします。

[構文]
配列名[番号] = 値;
[例] 配列numbers0番目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()ステートメントを使って変数numrateflgcapitalの値を表示する。

・ 表示結果は以下のようになる。

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

【解説】