自己啓発マン  2020/12/13更新

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言語と同じであった

ただ少し違いがあるので注意しようと思う

メソッドとスタック領域についてとても分かりやすい解説で理解できてよかった


タイトルとURLをコピーしました