変数(へんすう) |
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数(へんすう)とは、
値(あたい)を保存しておける、言わば「箱」のようなもの。
これに計算結果などを保存することで結果を使いまわすことができる。
プログラムでは、結果などのデータを、値(あたい)と言う。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
 |
|
|
 |
|
 |
|
変数の詳細
|
|
・変数の型 |
・変数の宣言と初期化 |
・変数の使い方 |
・変数の有効範囲 |
・キャスト(型変換) |
・変数名 |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数の型(かた)
変数にはいろいろなタイプがあり、
使う用途に応じて、決まったものを使わなければいけない。
例えば、
整数値を入れるには int型
文字列値を入れるには String型・・・
というように型が決まっている。
文字列をint型に入れたりはできない。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
変数の型一覧
|
|
型 |
データの型 |
値 |
内容 |
byte |
基本型 |
整数(8ビット) |
値の範囲:-128~127 |
short |
基本型 |
整数(16ビット) |
値の範囲:-32768~32767 |
int |
基本型 |
整数(32ビット) |
値の範囲:-2147483648~2147483647 |
long |
基本型 |
整数(64ビット) |
値の範囲:-9223372036854775808~9223372036854775807 |
float |
基本型 |
小数(32ビット) |
値の範囲:±1.4e-45~±3.4028235e+38
値の型を明示する場合は末尾にFまたはfをつける。未記入の場合はdouble型とみなされる。例:float f =
1.5F; |
double |
基本型 |
小数(64ビット) |
値の範囲:
±4.9e-324~±1.7976931348623157e+308
値の型を明示する場合は末尾にDまたはdをつける。未記入の場合はdouble型とみなされる。例:double d
= 1.5D; |
char |
基本型 |
文字 |
値の範囲:\u0000~\uFFFF(0~65536)
文字の場合、シングルクウォーテションで囲んで代入する。例:a = 'あ'; |
boolean |
基本型 |
真偽値 |
値の範囲:真偽値(true,false) |
配列型 |
参照型 |
オブジェクトのアドレス |
配列オブジェクトのアドレスを格納できる。 |
クラス型 |
参照型 |
オブジェクトのアドレス |
クラスオブジェクトのアドレスを格納できる。
例:String:文字列を扱うためのJava標準APIのクラス。 |
インターフェース型 |
参照型 |
オブジェクトのアドレス |
インターフェース実装オブジェクトのアドレスを格納できる。 |
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
それぞれの型は、扱える値の範囲が決まっている。
例えば、byte型は
整数-128~127の範囲しか入れられない。
範囲を超えたものを入れるとエラーになるので注意。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
変数のデータの型
基本型
(プリミティブ型) |
・Java言語の「言語仕様」できめられた根っこの型。
・勝手に型を追加・変更できない。
・変数の中には実体が入っている。
・全て小文字。 |
参照型
(オブジェクト型) |
・配列型、クラス型、インターフェース型実装の
オブジェクトのアドレスを格納できる。
・変数の中には参照(アドレス)が入っている。
言わば「ショートカット」のようなもの。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数は、大きく分けると二つのタイプに分けられる。
一つは、Javaの言語仕様で決められた基本の型、基本型。
もう一つは、クラスを使うのに必要な参照型。
言語仕様とは、
日本語でいえば、形容詞とか動詞とか構文とか・・・・
言葉を構成する骨組みにあたる。
つまり、勝手に変えることができない部分。
基本型は、通常使う基本的な変数の型で、
言語仕様で決められたものだから、勝手に追加・変更はできない。
なお、int、booleanなど・・・基本型のものは全て小文字。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
int(イント)型は整数を扱う変数。
英語のinteger(=整数)を縮めたもの。
このint型は便利な型で、
-2147483648~2147483647
と、大きな数値からマイナス値まで広く扱える。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数の型にはそれぞれ使い道がある
例えば、小さなプログラムを作る場合、使うメモリーを節約する場合。
大きい箱は大きい分、メモリーをたくさん使う。小さい箱なら小さくすむ。
int型は32ビット、byte型は8ビットだから単純に言えば1/4で済む。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数を使うにはまず、宣言と初期化が必要
変数はまずこの名前の変数を使いますと宣言することで
初めて使えるようになる。
宣言の仕方は
型を書いた後にスペースを空けて変数名を書く。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数を使うには初期化が必要
初期化とは、変数の初期値を決める作業。
箱の中の最初の値を決め無いで使うとエラーになる。
初期値は自由に設定できる。
(ただし、エラーにならない値であること。)
初期値は 0 じゃなくてもいい。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
上記図のやり方は、宣言と同時に初期化している。
しかし、以下のように宣言と初期化を分けてもできる。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
変数の宣言と初期化を分けた場合 |
|
int a;
// |
変数 a を宣言。 |
a = 0;// |
変数 a を初期化。 |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
同じ型の変数なら、以下のようにカンマで区切って
まとめて宣言・初期化する方法もある。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
同じ型の変数をまとめて宣言・初期化する方法 |
|
int a = 0,b
= 0,c = 0;
// |
変数 a b cを宣言して初期化。 |
|
|
書式 |
型 変数名 = 初期値 , 変数名 = 初期値 , ・・・ ;
|
|
|
型の後、変数名と初期値を書き、カンマで区切る。
以後、変数名と初期値を変数分繰り返す。
初期化をしないで、宣言だけをまとめてすることも可能。
その場合は、変数名だけをカンマでつなげる。
例:int a,b,c; |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数は宣言・初期化以後に利用可能になる。
宣言より前にある処理からは利用できない。
変数は何個でも宣言できる。個数に制限はない。
(メモリー容量など開発の環境による。) |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
変数の宣言の注意 まとめ
|
・変数を使うには初期化が必要。 |
・初期化は宣言と同時でも分けても可能。 |
・宣言より前にある処理からは利用できない。 |
・変数は何個でも宣言できる。個数に制限はない。 |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数への値の入れ方は、「=」を挟んで右から左へ入れる。
つまり、普通の計算とは逆になる。
右辺で出した結果を、最後に左辺に入れる。
これを値を代入すると言う。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数に変数を代入した場合はどうなる?
答え:値と同じように利用できる。
aとbの値はコピーされて計算されているため、
元の変数の値は変わらない。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数は同じ変数に再度値を入れた場合は、
後から入れた値で上書きされる。
変数は何度でも上書きして使える。
図のように、a と b を足して、結果を、
また b に入れるように、
自分自身に入れることもできる。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
練習問題1 解答改変 変数の再利用
(KotoTest2のKNMain.java)38行目~ |
|
・・・ |
|
|
|
|
|
038 |
|
//
昼(変数 a)と夜(変数 b)の合計を計算して変数
b
に代入 |
|
|
|
039 |
|
b = a + b; |
|
|
|
040 |
|
//昼と夜の合計を表示 |
|
|
|
041 |
|
System.out.println("昼と夜の合計は"
+
b +
"円です。"); |
|
|
|
・・・ |
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
この変数自身に値を代入できるのを利用して
変数に値を加算する事ができる。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
 |
|
|
 |
|
 |
|
変数の使い方の注意点 |
|
|
|
同じ変数に何回でも値を入れて、使用することができる。 |
|
|
|
 |
int a = 0;
a = 10;
System.out.println("最初のaの値は"
+ a);
a = 20;
System.out.println("2番目のaの値は"
+ a); |
|
|
|
|
|
|
|
|
|
初期化の代入は計算や変数でも可能。 |
|
|
|
 |
int a = 100 * 5;
int b = a; |
|
|
|
|
|
|
|
|
|
数値型の変数は、前後に文字列値がある場合、文字列値に自動変換され連結される。 |
|
|
|
 |
int a = 0;
System.out.println("値は"
+ a); |
|
|
|
|
|
|
|
|
|
初期化しないで使うことは不可。 |
|
|
|
 |
int a;
System.out.println("値は"
+ a); |
|
|
|
|
|
|
|
|
|
範囲外の値を入れることは不可。 |
|
|
|
 |
int a = 0;
a = 999999999999999999999999999999999999999999999; |
|
|
|
|
|
|
|
|
|
違う型の値を入れることは不可。 |
|
|
|
 |
int a = 0;
a = "Hello world!"; |
|
|
|
|
|
|
|
|
|
宣言後は型の変更は不可。 |
|
|
|
 |
int a = 0;
byte a = 0; |
|
|
|
|
|
|
|
|
|
関数内で同じ変数名は不可。 |
|
|
|
 |
int a = 0;
byte a = 0; |
|
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数の有効範囲(スコープ)
変数は使える範囲が決まっている。
・宣言・初期化より後じゃないと使用できない。
・変数は、宣言したブロック内でのみ有効。ブロック外では使用できない。
・内側のブロックからは外側のブロックの変数も使える。
・変数の有効範囲内なら、何回でも使い回しできる。
・値の書き換えも可能。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数の宣言は、メイン関数内のどの場所でもできる。
(この段階ではクラスの概念を除く)
関数内の先頭でまとめて宣言してもいいし、
以下のように、使う直前にバラバラに宣言することもできる。
一般的には、
関数内全体を通して使う変数は先頭でまとめて宣言。
部分でしか使わないものはその処理の直前。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
練習問題1 解答改変 変数対応(KotoTest2のKNMain.java)17行目~ |
|
・・・ |
|
|
|
|
|
017 |
|
public static void
main(String[] args) { |
|
|
|
018 |
|
// TODO code
application logic here |
|
|
|
019 |
|
|
|
|
|
020 |
|
//System.out.println((2048
* (1024 + 1024)) - 8658 + |
|
|
|
021 |
|
// 896 *
1024); |
|
|
|
022 |
|
|
|
|
|
023 |
|
//変数 a と b と c を宣言。同時に初期化 |
|
|
|
024 |
|
//int a = 0; |
|
|
|
025 |
|
//int b = 0; |
|
|
|
026 |
|
//int c = 0; |
|
|
|
027 |
|
|
|
|
|
028 |
|
//昼の合計を計算して変数 a に代入 |
|
|
|
029 |
|
int a = 100 * 5; |
|
|
|
030 |
|
//昼の合計を表示 |
|
|
|
031 |
|
System.out.println("昼の合計は"
+ a +
"円です。"); |
|
|
|
032 |
|
033 |
|
//夜の合計を計算して変数 b に代入 |
|
|
|
034 |
|
int
b = 200 * 3; |
|
|
|
035 |
|
//夜の合計を表示 |
|
|
|
036 |
|
System.out.println("夜の合計は"
+ b +
"円です。"); |
|
|
|
037 |
|
|
|
|
|
038 |
|
//昼(変数 a)と夜(変数 b)の合計を計算して変数
c に代入 |
|
|
|
039 |
|
int
c = a + b; |
|
|
|
040 |
|
//昼と夜の合計を表示 |
|
|
|
041 |
|
System.out.println("昼と夜の合計は"
+ c +
"円です。"); |
|
|
|
042 |
|
|
|
|
|
043 |
|
} |
|
|
|
・・・ |
|
|
|
|
|
|
|
宣言を個別にすることもできる。宣言と同時に計算で初期化している。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
メイン関数の外にも変数は宣言できる?
答え:書ける。
それはメンバ変数(フィールド)と言って
クラスと関係してくるので今はパスします。
また、メイン関数以外の関数にも書けます。
ややこしくなるので
最初はメイン関数の中だけで考え、
今後の要点で追記します。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
数値型の変数の場合、型が違っても互換性がある。
つまり、お互いの型が違っていても
値を入れることができる。
以下は、byte型の値をint型の変数に入れた例。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
型変換テスト byte型の値をint型変数に代入
(KotoTest3のKNMain.java)17行目~ |
|
・・・ |
|
|
|
|
|
017 |
|
public static void
main(String[] args) { |
|
|
|
018 |
|
// TODO code
application logic here |
|
|
|
019 |
|
|
|
|
|
020 |
|
//
変数を宣言と初期化 |
|
|
|
021 |
|
int
a = 11; |
|
|
|
022 |
|
byte
b = 99; |
|
|
|
023 |
|
|
|
|
|
024 |
|
//
byte型の値をint型の変数に代入 |
|
|
|
025 |
|
a
= b; |
|
|
|
026 |
|
|
|
|
|
027 |
|
//
変数を表示 |
|
|
|
028 |
|
System.out.println("変数の値は "
+ a +
" です。"); |
|
|
|
029 |
|
|
|
|
|
030 |
|
} |
|
|
|
・・・ |
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
 |
実行結果(出力ウィンドウ) |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
逆にbyte型にint型入れた場合は?
答え:値のまるめが起こりエラーになる。
しかし、int型のデータをbyte型に写したい時もある。
そんな時、強制的に型を変換する方法がキャスト(型変換)。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
型変換テスト改変 キャスト使用例
(KotoTest3のKNMain.java)17行目~ |
|
・・・ |
|
|
|
|
|
017 |
|
public static void
main(String[] args) { |
|
|
|
018 |
|
// TODO code
application logic here |
|
|
|
019 |
|
|
|
|
|
020 |
|
//
変数を宣言と初期化 |
|
|
|
021 |
|
int
a = 11; |
|
|
|
022 |
|
byte
b = 99; |
|
|
|
023 |
|
|
|
|
|
024 |
|
//
int型の変数をキャストしてbyte型変数に代入 |
|
|
|
025 |
|
b
= (byte)a; |
|
|
|
026 |
|
|
|
|
|
027 |
|
//
変数を表示 |
|
|
|
028 |
|
System.out.println("変数の値は "
+ b +
" です。"); |
|
|
|
029 |
|
|
|
|
|
030 |
|
} |
|
|
|
・・・ |
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
まるめとは・・・
自分より小さい型に変換した場合、
値が削られて正確じゃなくなること。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
このキャスト(型変換)は
数値型以外の変数にもいろいろ使われます。
今後の要点で追記します。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
変数の名前の付け方
変数名はいくつかの制限を除いて、
基本的に自由につけられる。
長さに制限もない。
以下、変数名にできないもののまとめ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
変数名に使えないもの
|
・数字で始まる名前 |
・「$」「_」以外の記号 |
・予約語(Java言語仕様で予約済みの単語) |
・すでに関数内で使われている変数名 |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
また、Javaのコーディング規約に従って書くようにすること。
コーディング規約とは
コードを書くときに「みんな守ってね!」という約束事。
守らないでもコードは書けるが、
他の人が読んだりする事も考えて必ず守ること。
統一性のあるコードにもなります。
今後の要点で必要に応じて追記します。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
Javaの変数のコーディング規約(一部)
・半角英数 |
・先頭は英文字で小文字 |
・複数単語で構成する場合は、2つ目以降の先頭を大文字 |
|
|
|
|
|
 |
|
 |
|
|
|
 |
|
 |
|
Javaの一般的な変数の書き方 |
|
単語の場合はすべて小文字 |
int
score; |
|
複数単語で構成する場合は、2つ目以降の先頭を大文字 |
int
totalScore; |
|
3つ目以降の先頭も大文字 |
int
userBattleTime; |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
その他の書き方の注意
・変数名はあまり長かったり、短すぎるのは避けた方がよい。
・変数の内容が分かりやすい名前がよい。
(今回は例では説明上a、b、cとかにしたが本当は一文字の変数は、
一時的もの以外は使わない方がいい。
例えば、変数 a、b、c をdayTotal、nightTotal、allTotal
とかにした方が、処理内容が分かりやすかった。) |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|