JPIN#2
データ型
標準はint型 もっと容量を使いたいならlong型
容量が小さいデータ型から大きい方に変換は可能だが、逆はもちろん不可
なぜならビット数が足りないからである
ただキャスト式を用いればこれが可能である
キャスト式とは、変換する前の容量が大きい変数をa、容量小さい変数をbとする
long a=10;
int b=(int)a;
とすれば変換可能である
ちなみにa+bを行う場合、
long a=10;
int b = 10;
a+b;
a+bは[long a+long b]の足算に変換してくれる
int c=a+b;
とやるとint型にlong型を入れる形となるためエラーとなる
これもキャスト式で
int c = (int)(a+b)とすればok
if else else if
c言語と同じ!
switch
c言語と一緒だが復習がてらに・・・
基本的な形
switch(a){
case 10:System.out.println( a ); //aが10ならa
case 20: System.out.println( b ); //aが20ならb
case 30: sSystem.out.println( c ); //aが30ならc
defalt: System.out.println( d ); //aがそれ以外ならd
}
aが該当するところから下の文が実行される
これをフォールスルーという
それしたくないなら
switch(a){
case 10:System.out.println( a ); //aが10ならa
break;
case 20: System.out.println( b ); //aが20ならb
break;
case 30: System.out.println( c ); //aが30ならc
break;
defalt: System.out.println( d ); //aがそれ以外ならd
}
このように[break]を入れることでその条件に達したら以下の文はスキップされる
※switch構文はlong型は使えない!
繰り返し
forに関してはc言語と一緒だがcontinueについて抜けていたので復習
continueとはbreakの仲間で
breakの場合、break以下はスルーして実行する
continueの場合、continue以下にある同じ括りの繰り返しをスキップする
という違いがある
while(l<10) {
System.out.println("hello!");
if(l%2==0) {
continue;//以下スキップして繰り返しに戻る
}l++;
上のコードの場合、最初、lは2で割り切れないためlに+1されてl==2となる
次にlは2で割り切れるのでcontinueが実行されてl++がスキップされる
そしてまたwhile文の先頭に戻る
よって永遠にhello!!と言い続けるコードになってしまう
配列
①宣言方法
データ型 [] 配列名 = new データ型[要素数];
と書く
②配列の長さ 配列名.length
で指定した配列の長さがわかる
c言語ならsizeofでやった記憶がある
③要素の初期化
要素を初期化したい場合は、以下の2通りがある
Aパターン
int [] array = new int[3];
array[0] = 10;
array[1] = 20;
array[2] = 30;
Bパターン
int[] array = {10,20,30};
Bパターンでは宣言と初期化を同時にやる方法である
※変数宣言してからまとめて初期化はできないので注意
↓
int [] array = new int[3];
array = {10,20,30};
はできない
拡張for文
上記のfor文と配列と組み合わせて使う文である
基本の形
for (データ型 変数名: コレクション){
実行する文1;
実行する文2;
...
}
例
for(int num : array) {
System.out.println(num);
}
上は
1)配列から要素に含まれる値を1つ取り出し変数numに代入
2)変数numを出力
3)配列から要素に含まれる値を1つ取り出し変数numに代入
4)変数numを出力
5)配列から要素に含まれる値を1つ取り出し変数numに代入
6)変数numを出力
7)配列から全ての値を取り出したので繰り返しを終了
となる
メソッド
メソッドとは一連の処理のことである
プログラミングをコードで細かく分解する
ここでこのメソッドである
メソッドを連携させて一つの大きなコードになる
javaではこれがclassになっている
main メソッドブロックは特殊なメソッドで主となるメソッドになるので、
他のメソッドが先に書かれていてもmainからJVMは読む
mainメソッドにはいろいろ指示が書いている
その指示の中にある手順を参照する必要がある
このようにmainメソッドを読み解くには多くの他のメソッドが必要である
スタック領域
JVMはメインメソッドの途中で他のメソッドが出てきたときに順番に読み取っていく
これはメモリでメインメソッド、メソッドA、メソッドB・・・のように順に積まれていく
これの上から順に処理して読み取っていく
これをスタック領域と言う
積まれていくものをスタックフレームといい2つの領域に分かれる
1.やらないといけないことが書かれている領域(手順)
2.変数収納領域
1に他のスタックフレームが書いている時はそれをそのフレームの上に積む
このフレームにももちろん2つの領域がある
このように呼び出すことを”メソッドを呼び出す”という
それぞれのスタックフレームで収納された変数しかそれぞれのフレームでは使うことができない
使いたい場合は元の変数をコピーして使いたいスタックフレームに渡すことはできる
これを引数(ひきすう)と呼ぶ
受け取った引数は受け取ったスタックフレームで別の変数に代入する必要がある
例えばメインメソッドでxを引数で渡したら次のフレームの変数yに代入することができる
なぜそうするかというとそれぞれで使うことができるメモリが異なり、それぞれのフレームで使用することができる
メモリにコピーしなければいけないからである
処理が終わったフレームの値を下に積まれているフレームで使いたい場合、処理結果を戻すことができる
これを”戻り値”という
<暗記>
メインメソッドをエントリーポイントという
上から順に処理して読み取っていく処理→FILO(先入れ後出し)
感想
今回の講義の内容はほぼc言語と同じであった
ただ少し違いがあるので注意しようと思う
メソッドとスタック領域についてとても分かりやすい解説で理解できてよかった