Java基礎中の基礎

Java SE Bronzeに必要な基礎知識をメモ

基本データ型

| データ型 | サイズ(bit) |
|:--------|:---|
| byte    | 8  |
| short   | 16 |
| int     | 32 |
| long    | 64 |
| float   | 32 |
| double  | 64 |
| char    | 16 |
| boolean | 1  |

予約語

|　　　　　　|　　　　　　 |　　　　　　|　　　　　　 |　　　　　　 |　　　　　　　　|　　　　　　 |
|:---------|:----------|:---------|:----------|:---------|:-------------|:----------|
| abstract | assert    | boolean  | break     | byte     | case         | volatile  |
| catch    | char      | class    | const     | continue | default      | while     |
| do       | double    | eles     | enum      | extends  | final        | void      |
| finally  |float      | for      | goto      | if       | implements   | try       |
| import   |instanceof | int      | interface | long     | native       | transient |
| new      | package   | private  | protected | public   | return       | throws    |
| short    | static    | strictfp | super     | switch   | synchronized | throw     |
| this     |           |          |           |          |              |           | 

算術演算子

|演算子|記述例|説明|
|:--|:--|:--|
|+  |a+b|aとbを加算|
|-  |a-b|aからbを減算|
|*  |a*b|aとbを乗算|
|/  |a/b|aとbを除算|
|%  |a%b|aをbで除算した余り|

演算子（優先順）

| 演算子 | 結合規則 |
|:------|:--------|
|++ -- + - ~ !|  右 |
|* / % |左|
|<< >> >>>|左|
|< > <= >= instanceof |左|
|== !=|左|
|&|左|
|^|左|
|｜|左|
|&&|左|
|｜｜|左|
|??|左|
|?:|右|
|= *= /= %= += -= <<= >>= >>>= &= ^= != |右|

単項演算子（例）

|aの初期値|式     |実行後のa|実行後のb|説明|
|:-------|:-----|:-------|:-------|:---|
|10      |b= ++1|11     |11       |計算してから代入|
|10|b = a++|11|10|代入してから計算|
|10|b = --a|9|9|計算してから代入|
|10|b = a--|9|10|代入してから計算|

if else if else 文
<pre>
if (条件式) {
　処理文１
else if (条件式) {
　処理文２
} else {
　処理文３
}
</pre>

条件演算子
<pre>
条件式 ? 式１ : 式2
</pre>

switch文
<pre>
switch (式) {
  case 定数1 : 
    処理１
    continue; // <- 次の条件へ続く
    処理２ // 残りの処理はスキップ
  case 定数2 : 
    処理２
    break; // <- switchから抜ける
  ・・・・
  default : 
    処理n;
}
//結果は**byte**,**char**,**short**,**int**,**enum**,**string**である
</pre>

while文
<pre>
while (条件式) {
  処理;
}
</pre>

do while 文
<pre>
do {
  処理;
} while (条件式);
</pre>

※ do-while文とwhile分の違いは条件判定が行われるタイミング

for文
<pre>
ラベル名 :
for (式1,式2,式3) {
  処理;
  for (式1,式2,式3) {
    break ラベル名 // <- 外側のforから抜ける
  }
}
//拡張型
for (変数宣言 : 参照変数名) {
  処理;
}
//配列などを指定して実行させる
</pre>

クラスの定義
<pre>
class クラス名 {}
</pre>

変数の定義
<pre>
データ型 メンバ変数名;
</pre>

メソッドの定義
<pre>
戻り値の型 メソッド名(引数リスト) {}
</pre>

インスタンス化
<pre>
データ型 変数名 = new クラス名();
</pre>

static変数
<pre>
クラス名.static 変数名 || クラス名.static.メソッド名 //呼び出し
</pre>

アクセス修飾子とカプセル化

アクセスの幅が広い順

| アクセス修飾子 | クラス | コンストラクタ | メンバ変 数| メソッド |
|:-------------|:------|:------------|:----------|:-------|
| public       |  ok   | ok          |    ok     |    ok  |
| protected    | ng    | ok          | ok        | ok     |
| デフォルト(指定なし)     | ok    | ok          | ok        | ok     |
| private     | ng | ok | ok | ok |
※ protectedとprivateはクラスに指定することはできない

**推奨されているアクセスルール**

* インスタンス変数はprivateにする
* メソッドはアクセスをpubicにする

スーパークラスとサブクラス（受け継ぐ）
<pre>
class サブクラス名 extends スーパークラス名 {}
</pre>

final
<pre>
// サブクラスでオーバーライドできなくする
final 戻り値の型 メソッド名(引数リスト) {} //メソッドに適応
// 定数にする
final class クラス名 {} //クラスに適応
</pre>

this
<pre>
this.変数名 // 自オブジェクトがもつ変数
</pre>

super
<pre>
super.メソッド名 //サブクラスでスーパークラスのメソッドを呼び出している
</pre>

抽象クラスとメソッド
<pre>
abstract class クラス名 {} //クラス
abstract 戻り値の型 メソッド名(引数リスト); // メソッド
// 処理を持たないので、{}せず;で終わる
</pre>

インターフェイス
<pre>
// インターフェイスとは公開すべき操作をまとめたクラスの仕様
// classではなくinterfaceキーワードを仕様する
interface インターフェイス名 {}
</pre>

* 変数は定数のみ
* インスタンス化できないので実装クラスを定義する
* 抽象メソッドをすべてオーバーライドする
* 実装クラスを定義するには**implements**を使用
* サブインターフェイスを宣言するには**extends**を使用