【初心者向け】Java入門　Java言語の基礎知識②

#はじめに
今回も前回に引き続き第２回Java初心者向けの基礎知識の解説を行います。
前回の記事を見てないという方は、こちらも併せてご覧ください。→<a href = "https://qiita.com/kazuiti10/items/a4a4966b78654a5454eb">「【初心者向け】Java入門　Java言語の基礎知識①」</a>
今回はJavaの識別子、変数、データ型、演算子の解説をしていきます。
#識別子
識別子は、変数、定数、クラス、メソッドなどに付ける名前です。識別子の長さには制限はありませんが、いくつかの規約に従う必要があります。識別子の規約に反する名前の場合はコンパイル時にエラーが発生します。代表的な識別子の規約は以下の5つです。

・識別子の規約

####１．先頭で使用可能な文字は、英字(a～z A～Z)、_(アンダースコア)、$(ドルマーク)</span>

####２．2文字目以降は0～9の数字も使用可能</span>

####３．英字、_、$、0～9以外は使用不可

####４．大文字と小文字を区別する

####５．double int if forなどjava言語で予め決まっている予約語は識別子に使用不可

　正しい例：number _number number2 $numbe

  使用できない例：1number(先頭数字) number% (使用できない文字) for(予約語)

#変数
変数はWikipediaにおいて以下のように記述しています。

> プログラミングにおいて、変数（へんすう、variable）とは、プログラムのソースコードにおいて、扱われるデータを一定期間記憶し必要なときに利用できるようにするために、データに固有の名前を与えたものである。 一人一人の人間が異なる名前によって区別されるように、一つ一つの変数も名前によって区別される。これにより、複数のデータを容易に識別することができる。出典元　Wikipedia　変数

簡単にいえば、変数＝プログラム内で使用する値を格納しておく入れ物のことです。よく、変数は「箱のようなもの」や「名札のようなもの」と例えられることが多いです。
追記：以下のコメントを頂きとても分かりやすかったので以下参考にしました。
>私は、基本データ型が箱のようなもの、参照型が名札のようなもの思えます。
箱に値を入れるか、値に名札を付けるか、の違い。
箱(変数)から別の箱に値を代入するときは、値を移動するのではなく、値をコピーする。
一つの値に複数の名札を付けられる（共有できる）のが参照型。

変数を利用するためには、変数に格納する値が文字なのか、また、その変数の名前が何なのか分からないためデータ型（値の種類）と変数名を指定し宣言する必要があります。変数を宣言すると、データ型に対応する領域がメモリに確保されます。

宣言した変数に値を格納するためには<code>＝</code>（代入演算子）を使います。右辺で指定した値が左辺の変数に格納されます。このことを<b>代入</b>といい、一度代入した後に、新しい値を代入すると新しく代入した値に上書きされます。また、変数の宣言と代入は１行で記述できます。この、変数の宣言と代入を１行で記述することを<b>初期化</b>といいます。書式は以下の通りです。

```
変数宣言   ：型名 変数名; 　         例：int　age; //数値型のage変数を宣言

値の代入   ：型名 ＝ 値;  　           例：age = 20; //変数ageに20を代入

初期化  　 ：型名 変数名　= 値;    例：int high = 20; //数値型の変数highを宣言し20で初期化。
```

#変数の命名規則
守らなくてもプログラムは動きますが、命名が適当だと他の人がソースコードを読んだり、プログラムを作成してしばらく経った後に見た時に作成したソースコードをを読み返したときに可読性が低く、解読に時間がかかってしまうため、命名規則に従う必要があります。もちろん、変数だけではなく、クラス名、メソッド名、定数名、インターフェース名、すべての命名規則に従う必要があります。代表的な変数の命名規則は以下の通りです。

・大文字、小文字による名詞を使う

・先頭は大文字を使用し、単語の切れ目は大文字を使用する。

・変数名にはアンダースコアは使用しない。また、i、jのようなカウンタ変数を除き１文字の変数名は付けない。

```
例：high age weight width employeeName
```
#データ型
変数の解説の時に説明しましたが、変数を宣言するときは型の種類を指定する必要があります。この型の種類のことをデータ型といいます。Javaで使うデータ型は<b>基本データ型</b>と<b>参照型</b>の２種類があります。

<span style="font-size: 120%"><b>１．基本データ型</b></span>

基本データ型は以下の８種類があります。基本データ型は変数に値が直接代入されます。

全部覚えておいて損はないですが、<code>int、double、char、boolean</code>あたりをよく使う印象です。char型は<code>' '</code>(シングルクォーテーション)で文字を囲みます。
追記：char型の説明が説明不足で、以下のご指摘を頂いたので、引用という形で補足します。
>Java Language Specification の 「3.8 Identifiers」 によれば中国語、日本語、韓国語を含むほとんどの文字が識別子として使用できます。
文字型はUTF-16の単一の文字コードのみ格納できます。例えば「𩸽」はUTF-16では2文字となるサロゲートペアなので、単一の文字型の変数に格納できません。

<table width="0">
<tbody>
<tr>
<td width="114">
<p>分類</p>
</td>
<td width="82">
<p>データ型</p>
</td>
<td width="87">
<p>サイズ</p>
</td>
<td width="350">
<p>表現できる値</p>
</td>
</tr>
<tr>
<td rowspan="4" width="114">
<p> </p>
<p>整数型</p>
</td>
<td width="82">
<p>byte</p>
</td>
<td width="87">
<p>1バイト</p>
</td>
<td width="350">
<p>-128～127</p>
</td>
</tr>
<tr>
<td width="82">
<p>short</p>
</td>
<td width="87">
<p>2バイト</p>
</td>
<td width="350">
<p>-32,768～32767</p>
</td>
</tr>
<tr>
<td width="82">
<p>int</p>
</td>
<td width="87">
<p>4バイト</p>
</td>
<td width="350">
<p>-2147483648～2147483647</p>
</td>
</tr>
<tr>
<td width="82">
<p>long</p>
</td>
<td width="87">
<p>8バイト</p>
</td>
<td width="350">
<p>-9223372036854775808～9223372036854775807</p>
</td>
</tr>
<tr>
<td rowspan="2" width="114">
<p>浮動小数型</p>
</td>
<td width="82">
<p>float</p>
</td>
<td width="87">
<p>4バイト</p>
</td>
<td width="350">
<p>±1.401298E-45～±3.4028235E+38</p>
</td>
</tr>
<tr>
<td width="82">
<p>double</p>
</td>
<td width="87">
<p>8バイト</p>
</td>
<td width="350">
<p>±1.79769313486231570E+308</p>
<p>～±4.94065645841246544E-324</p>
</td>
</tr>
<tr>
<td width="114">
<p>文字型</p>
</td>
<td width="82">
<p>char</p>
</td>
<td width="87">
<p>2バイト</p>
</td>
<td width="350">
<p>UTF-16の単一の文字コード　例:’A’</p>
</td>
</tr>
<tr>
<td width="114">
<p>論理型</p>
</td>
<td width="82">
<p>boolean</p>
</td>
<td width="87">
<p>1バイト</p>
</td>
<td width="350">
<p>true(真)またはfalse(偽)</p>
</td>
</tr>
</tbody>
</table>
<span style="font-size: 120%"><b>２．参照型</b></span>

Javaでは、基本データ以外を参照型とします。参照型の例として文字ではなく文字列を扱うString型があります。文字列型は<code>" "</code>(ダブルクォーテーション)で文字を囲みます。

また、文字列は+で連結することができます。

```
例：String firstName = “テスト”;

       String lastName = “太郎”;

       String fullName;

       fullName = firstName + lastNamel
```

基本データ型は変数に値が直接代入されるのに対し、参照型は、値そのものではなく<b>参照先の先頭番地（値が置いてある場所の先頭）が格納</b>されます。基本データ型はどのぐらい領域を確保すればいいかわかっていますが、<b>参照型は可変</b>であり、どのぐらいの領域を確保すればいいか分かりませんそのため、参照型の変数には参照先の先頭番地が格納されます。例えば、文字列型の場合、String型の変数が作成されたら、String型の設計書をもとに代入する値を入れて、メモリのどこかの場所に文字列を実体化させて作ります。その際、最初に作成した、変数には直接、値を格納せずに、メモリのどこかの場所に作られた文字列の先頭の場所が格納されます。簡単な図を用意しました。![データ型.jpg](https://qiita-image-store.s3.amazonaws.com/0/299197/92ce4dd5-9583-b773-3e7e-76af0e279c39.jpeg)
この図では、基本データ型であるint型とchar型変数はデータ型分のサイズが確保され、char型には、'A'が直接代入されます。
一方参照型のString型は変数が作成された時に、String型の設計書に"イルカ"を代入し、実体化した"イルカ"の文字列を1094番地以降に作成します。この時に、String型の変数には直接値が格納されずに、実体化した"イルカ"文字列の先頭番地の1094が格納されています。
おそらく、基本データ型は理解できたと思いますが、参照型を理解するためには、オブジェクト指向の考えを理解しなければ厳しいので参照型は理解が難しいと思います。そのため、今は、基本データ型は直接値が代入されて、参照型は直接値は代入されないという認識で大丈夫です。

#演算子
コンピュータに対して演算を行わせる記号を演算子といいます。

<p><strong>算術演算子</strong>：四則演算を行う演算子</p>
<table>
<tbody>
<tr>
<td width="114">
<p>演算子</p>
</td>
<td width="158">
<p>種類</p>
</td>
<td width="142">
<p>例</p>
</td>
<td width="142">
<p>結果</p>
</td>
</tr>
<tr>
<td width="114">
<p>+</p>
</td>
<td width="158">
<p>加算</p>
</td>
<td width="142">
<p>3+3</p>
</td>
<td width="142">
<p>6</p>
</td>
</tr>
<tr>
<td width="114">
<p>-</p>
</td>
<td width="158">
<p>減算</p>
</td>
<td width="142">
<p>7-8</p>
</td>
<td width="142">
<p>-1</p>
</td>
</tr>
<tr>
<td width="114">
<p>*</p>
</td>
<td width="158">
<p>乗算</p>
</td>
<td width="142">
<p>2*6</p>
</td>
<td width="142">
<p>12</p>
</td>
</tr>
<tr>
<td width="114">
<p>/</p>
</td>
<td width="158">
<p>除算</p>
</td>
<td width="142">
<p>12/6</p>
</td>
<td width="142">
<p>2</p>
</td>
</tr>
<tr>
<td width="114">
<p>%</p>
</td>
<td width="158">
<p>剰余 (余りを求める)</p>
</td>
<td width="142">
<p>5%4</p>
</td>
<td width="142">
<p>1</p>
</td>
</tr>
</tbody>
</table>
<p><strong>代入演算子</strong>：値を代入する演算子</p>
<table>
<tbody>
<tr>
<td width="138">
<p>演算子</p>
</td>
<td width="138">
<p>種類</p>
</td>
<td width="138">
<p>例</p>
</td>
<td width="138">
<p>結果</p>
</td>
</tr>
<tr>
<td width="138">
<p>+=</p>
</td>
<td width="138">
<p>加算と代入</p>
</td>
<td width="138">
<p>i += 2</p>
</td>
<td width="138">
<p>i=5のときiは7</p>
</td>
</tr>
<tr>
<td width="138">
<p>-=</p>
</td>
<td width="138">
<p>減算と代入</p>
</td>
<td width="138">
<p>i -= 6</p>
</td>
<td width="138">
<p>i=7のときiは1</p>
</td>
</tr>
<tr>
<td width="138">
<p>*=</p>
</td>
<td width="138">
<p>乗算と代入</p>
</td>
<td width="138">
<p>i *= 3</p>
</td>
<td width="138">
<p>i=3のときiは9</p>
</td>
</tr>
<tr>
<td width="138">
<p>/=</p>
</td>
<td width="138">
<p>除算と代入</p>
</td>
<td width="138">
<p>i /= 2</p>
</td>
<td width="138">
<p>i=4のときiは2</p>
</td>
</tr>
<tr>
<td width="138">
<p>%=</p>
</td>
<td width="138">
<p>剰余と代入</p>
</td>
<td width="138">
<p>i %= 2</p>
</td>
<td width="138">
<p>i=3のときiは1</p>
</td>
</tr>
<tr>
<td width="138">
<p>&amp;=</p>
</td>
<td width="138">
<p>ANDと代入</p>
</td>
<td width="138">
<p>i &amp;= 2</p>
</td>
<td width="138">
<p>i=3のときiは2</p>
</td>
</tr>
<tr>
<td width="138">
<p>|=</p>
</td>
<td width="138">
<p>ORと代入</p>
</td>
<td width="138">
<p>i |= 2</p>
</td>
<td width="138">
<p>i=3のときiは3</p>
</td>
</tr>
<tr>
<td width="138">
<p>^=</p>
</td>
<td width="138">
<p>XORと代入</p>
</td>
<td width="138">
<p>i ^= 2</p>
</td>
<td width="138">
<p>i=3のときiは1</p>
</td>
</tr>
<tr>
<td width="138">
<p>&lt;&lt;=</p>
</td>
<td width="138">
<p>左シフトと代入</p>
</td>
<td width="138">
<p>i &lt;&lt;= 2</p>
</td>
<td width="138">
<p>x=3のときxは12</p>
</td>
</tr>
<tr>
<td width="138">
<p>&gt;&gt;=</p>
</td>
<td width="138">
<p>右シフトと代入</p>
</td>
<td width="138">
<p>i &gt;&gt;= 2</p>
</td>
<td width="138">
<p>i=3のときiは0</p>
</td>
</tr>
<tr>
<td width="138">
<p>++</p>
</td>
<td width="138">
<p>1を加算して代入</p>
</td>
<td width="138">
<p>i ++または++i</p>
</td>
<td width="138">
<p>i=3のときiは4</p>
</td>
</tr>
<tr>
<td width="138">
<p>--</p>
</td>
<td width="138">
<p>1を減算して代入</p>
</td>
<td width="138">
<p>i--または--i</p>
</td>
<td width="138">
<p>i=3のときiは2</p>
</td>
</tr>
</tbody>
</table>
<p><strong>関係演算子</strong>：２つの整数の等価や大小を比較する演算子(booleanで評価する)</p>
<table>
<tbody>
<tr>
<td width="111">
<p>演算子</p>
</td>
<td width="161">
<p>種類</p>
</td>
<td width="142">
<p>例</p>
</td>
<td width="151">
<p>結果</p>
</td>
</tr>
<tr>
<td width="111">
<p>&gt;</p>
</td>
<td width="161">
<p>より大きい</p>
</td>
<td width="142">
<p>5 &gt; 2</p>
</td>
<td width="151">
<p>5は2より大きい</p>
</td>
</tr>
<tr>
<td width="111">
<p>&lt;</p>
</td>
<td width="161">
<p>より小さい</p>
</td>
<td width="142">
<p>3 &lt; 5</p>
</td>
<td width="151">
<p>3は4より小さい</p>
</td>
</tr>
<tr>
<td width="111">
<p>&gt;=</p>
</td>
<td width="161">
<p>以上</p>
</td>
<td width="142">
<p>5 &gt;= 2</p>
</td>
<td width="151">
<p>5は2以上</p>
</td>
</tr>
<tr>
<td width="111">
<p>&lt;=</p>
</td>
<td width="161">
<p>以下</p>
</td>
<td width="142">
<p>3 &lt;= 5</p>
</td>
<td width="151">
<p>3は5以下</p>
</td>
</tr>
<tr>
<td width="111">
<p>==</p>
</td>
<td width="161">
<p>等しい</p>
</td>
<td width="142">
<p>3 == 3</p>
</td>
<td width="151">
<p>3と3は等しい</p>
</td>
</tr>
<tr>
<td width="111">
<p>!=</p>
</td>
<td width="161">
<p>等しくない</p>
</td>
<td width="142">
<p>3 != 5</p>
</td>
<td width="151">
<p>3と5は等しくない</p>
</td>
</tr>
</tbody>
</table>
<p><strong>論理演算子</strong>：AND、OR、NOTなど論理演算を行う演算子(booleanで評価する)</p>
<table>
<tbody>
<tr>
<td width="56">
<p>演算子</p>
</td>
<td width="161">
<p>種類</p>
</td>
<td width="123">
<p>用例</p>
</td>
<td width="225">
<p>結果</p>
</td>
</tr>
<tr>
<td width="56">
<p>||</p>
</td>
<td width="161">
<p>又は(どちらかor両方)</p>
</td>
<td width="123">
<p>3 &lt;5 || 2 == 2</p>
</td>
<td width="225">
<p>3は5未満、又は2と2は等しい</p>
</td>
</tr>
<tr>
<td width="56">
<p>&amp;&amp;</p>
</td>
<td width="161">
<p>かつ (両方一致)</p>
</td>
<td width="123">
<p>3 &lt;5 &amp;&amp; 2 == 2</p>
</td>
<td width="225">
<p>3は4未満かつ、2と2は等しい</p>
</td>
</tr>
<tr>
<td width="56">
<p>!</p>
</td>
<td width="161">
<p>否定（一致しない）</p>
</td>
<td width="123">
<p>!(5&lt;4)</p>
</td>
<td width="225">
<p>5は3未満ではない</p>
</td>
</tr>
</tbody>
</table>
<p><strong>ビット演算子</strong>：2進数の0か1で表現するビット単位で計算する演算子。</p>
<table width="0">
<tbody>
<tr>
<td width="56">
<p>演算子</p>
</td>
<td width="142">
<p>種類</p>
</td>
<td width="321">
<p>用例</p>
</td>
<td width="47">
<p>結果</p>
</td>
</tr>
<tr>
<td width="56">
<p>&amp;</p>
</td>
<td width="142">
<p>AND</p>
</td>
<td width="321">
<p>5&amp;3(2進数に直した101と011の1,1の組み合わせのみを抽出)</p>
</td>
<td width="47">
<p>1</p>
</td>
</tr>
<tr>
<td width="56">
<p>|</p>
</td>
<td width="142">
<p>OR</p>
</td>
<td width="321">
<p>5|3(2進数に直した101と011の1,1 0,1 1,0の組み合わせを抽出)</p>
</td>
<td width="47">
<p>7</p>
</td>
</tr>
<tr>
<td width="56">
<p>^</p>
</td>
<td width="142">
<p>XOR</p>
</td>
<td width="321">
<p>5^3(2進数に直した101と011の0,1 1,0の組み合わせを抽出)</p>
</td>
<td width="47">
<p>6</p>
</td>
</tr>
<tr>
<td width="56">
<p>&lt;&lt;</p>
</td>
<td width="142">
<p>左シフト</p>
</td>
<td width="321">
<p>5&lt;&lt;3(2進数に直した101を左に３ビット移動)</p>
</td>
<td width="47">
<p>40</p>
</td>
</tr>
<tr>
<td width="56">
<p>&gt;&gt;</p>
</td>
<td width="142">
<p>右シフト</p>
</td>
<td width="321">
<p>5&gt;&gt;3(2進数に直した101を右に3ビット移動)</p>
</td>
<td width="47">
<p>0</p>
</td>
</tr>
</tbody>
</table>
#まとめ
####変数はプログラム内で使用する格納する入れ物

####変数を宣言する時にはデータ型を指定

####データ型には基本データ型と参照型の２種類

####基本データ型は8種類あり、値は直接基本データ型の変数に格納

####参照型は基本データ以外の型で、参照型変数には参照先の先頭番地が格納

####プログラムの可読性を高めるために命名規則には従うべき

####演算子はコンピュータに対して演算を行う記号

今回は、以上です。最後まで読んでくださりありがとうございました。次回は、配列、選択構造、反復構造の解説を行います。

#参考
参考記事
><a href="http://msugai.fc2web.com/java/primitive.html">・基本データ型</a>
<a href="https://ts0818.hatenablog.com/entry/2017/06/29/230038">・Javaのプリミティブ型と参照型、値渡しと参照渡しなど</a>