目的
Java Silverの黒本勉強中に躓いたところ、なかなか覚えられないところを順次アウトプットし、いつでも見返せる自分用メモを作成する。
Javaの基本データ型と文字列操作
基本データ型
データ型 | 値 |
---|---|
boolean | true, false |
char | 16ビットUnicode文字 |
byte | 8ビット整数 |
short | 16ビット整数 |
int | 32ビット整数 |
long | 64ビット整数 |
float | 32ビット単精度浮動小数点数 |
double | 64ビット倍精度浮動小数点数 |
配列の操作
配列変数の宣言
例
// 方法1
int[] array;
int[][] array;
// 方法2
int array[];
int array[][];
// 方法3
int[] array[];
int[][] array[];
例 (エラー)
// 宣言時に要素数の指定は不可
int[3] array;
配列インスタンス生成
new演算子を使う。
例
// 宣言後に生成
int[] array;
array = new int[3];
// 宣言時に生成
int[] array = new int[3];
例 (エラー)
// 要素数を指定していない
int[] array = new int[];
// 1次元目の要素数は省略不可
int[][] array = new int[][3];
配列の宣言と同時に初期化
初期化演算子{}を使う。
例
// 簡潔な初期化
int[] array = {1, 2, 3};
// 明示的な初期化
int[] array = new int[]{1, 2, 3};
// 要素数ゼロも可
int[] array = {};
int[] array = new int[]{};
例 (エラー)
// 初期化演算子 + 大カッコに要素数を指定
int[] array = [3]{1, 2, 3};
int[] array = new int[3]{1, 2, 3};
// 変数宣言と初期化が別タイミング
int array[];
array = {1, 2, 3};
// これはOK
int[] array;
array = new int[]{1, 2, 3};
配列要素のデフォルト値
型 | デフォルト値 |
---|---|
整数型 | 0 |
浮動小数点数型 | 0.0 |
真偽型 | false |
文字型 | \u0000 |
オブジェクト型 | null |
インスタンスとメソッド
アクセス修飾子
修飾子 | 同クラス | 同パッケージ | サブクラス | 全クラス |
---|---|---|---|---|
public | ○ | ○ | ○ | ○ |
protected | ○ | ○ | ○ | |
なし | ○ | ○ | ||
private | ○ |
オーバーロード = 多重定義
オーバーロードのルールは、以下のとおり。
- メソッド名が同じ
- 引数が異なる
「引数が異なる」とは、具体的には以下のケース。
例
// 1. 引数の型が異なる
public void test (int a) {}
public void test (long a) {}
// 2. 引数の数が異なる
public void test (int a) {}
public void test (int a, int b) {}
// 3. 引数の並びが異なる
public void test (int a, String s) {}
public void test (String s, int a) {}
ちなみに、オーバーロードに関係するのは上の3つのケースのみなので、以下のようなパターンは関係なし。
例 (エラー)
// × アクセス修飾子の違いは関係なし
public void test (int a) {}
private void test (int a) {}
// × 戻り値は関係なし
public void test (int a) {}
public long test (int a) {}
// × 引数の名前は関係なし
public void test (int a) {}
public void test (int b) {}
これらのパターンはすべてオーバーロードにはならず、同じメソッドが二つあると判断され、コンパイルエラーとなる。
オーバーライド = 再定義
オーバーライドのルールは以下のとおり。
- メソッド名が同じ
- 引数の型、名前、数、並びが同じ
- 戻り値の型が同じ又はそのサブクラスである
- アクセス修飾子が同じ又はそれよりスコープが広い
以下、オーバーライドにならない例。
例
// 元のメソッド
public void test (int a) {}
public void sample (int a) {} // × メソッド名が違う → 別のメソッドとみなされる
public void test (String a) {} // × 引数が違う → オーバーロードとみなされる
public int test (int a) {} // × 戻り値の型が違う → コンパイルエラー
private void test (int a) {} // × アクセス修飾子がNG → コンパイルエラー