変数(へんすう) つづき |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
次に変数の有効範囲を見てみよう。
変数は使える範囲が決まってるんだ。
まず、宣言・初期化より後じゃないと使用できない。
それから、ほら、前にブロックをみただろ。
変数は、宣言したブロック内でのみ有効だ。
ブロック外では使用できない。
また、変数の有効範囲内なら、何回でも使い回しできる。
もちろん、値の書き換えも可能だ。
じゃあ、変数の有効範囲を図を使って見てみよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
基本的に
ブロックが変数の
有効範囲になるって
ことだ。 |
|
|
|
ブロックが
範囲なんだ。 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
参考コードを書いてみたからよく見てくれ。
まだ勉強してない if文(いふぶん) が出てくるけど、
それは無視してブロック部分だけ見てくれ。
ちなみに、
プログラミングでは有効範囲をスコープと言うんだ。
覚えておいてくれ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
 |
はい。
変数の
スコープだね。 |
|
|
|
|

|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
内側のブロックからは
外側のブロックの変数も
使えるんだ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ああ。
内側のブロックは
外側のブロックに
含まれているんだからな。
当然ちゃ当然だろ。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
そうか。 |
 |
|
 |
蛇足で
言うなら
こんな感じ。
内側ほど
権利が
広いだろ。 |
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
それから、
変数の宣言は、メイン関数内のどこでもできるよ。
ルールを守っていればね。
「解答改変 変数対応」では、先頭でまとめて宣言したけど、
別に使う直前にバラバラに宣言することもできる。
この例を見てね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
KotoTest2を
見てね。 |
 |
|
 |
どこでも
出来るんだ。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
一般的には、
関数全体を通して使う変数は
先頭でまとめて宣言。
部分でしか使わないものは
その処理の直前、って感じだな。
絶対ってわけじゃないから
読みやすいように
いろいろ考えてみてくれ。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
まあ、ここらへん
臨機応変だな。 |
|
臨機応変ね。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
あー、実は書ける。
それはメンバ変数(フィールド)と言って
クラスと関係してくるから今はパス。
あと、メイン関数以外の関数にも
書けるけど、これもあとな。
ややこしくなるからな。
今はメイン関数の中だけで考えよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
何ブツブツ
言ってるの? |
 |
|
|
あー、
クラスを考えると、
正確にはブロックが
変数の有効範囲とは
言えないんだよな。
継承とかあるし。
独り言。。。 |
|
|
|
KotoTest3ね。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
数値型の変数の場合、
型が違っても互換性がある。
つまり、お互いの型が違っていても
値を入れることができるんだよ。
byte型の値をint型の変数に
入れてみよう。
新しいプロジェクトを作って
テストしてみてくれ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ほんとだ。byte型の
変数に入ってる値と
同じのが表示された。
普通に代入できるんだね。
|
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
型変換テスト 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型入れた場合は?
byte型の箱は-128~127しか
入らないんでしょ。
もし、int型の値が777とかだったら
byte型じゃ入らないよね。
byte型の箱は、int型の箱より
小さいから入れたら溢れちゃうよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
お前の言うとおり、エラーに
なるよ。
値のまるめが起こるから
だめですってな。
でも、int型のデータをbyte型に
写したい時もある。
たとえint型でも127以下の値
なら問題ないはずだろ。
そんな時、強制的に型を
変換する方法があるんだ。
それがキャスト(型変換)だ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
型変換テスト改変 キャスト使用例
(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 |
|
} |
|
|
|
・・・ |
|
|
|
|
|
|
黄色の部分が追加・改変部分です。
書き写して実行して下さい。 |
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ちなみにまるめとは
自分より小さい型に変換した場合、
値が削られて正確じゃなくなることだ。
このキャスト(型変換)は
数値型以外の変数にもいろいろ
使われる。
その都度見ていくから覚えておいてくれ。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|