Javaで開発していても、良く知らずに使っている箇所が多い。
##配列
###初期化
int[] arrayInt = new int[2];
System.out.println(arrayInt .length); // 2が表示される
for (int i : arrayInt ) {
System.out.println(i); // 0が表示される
}
String[] arrayStr = new String[2];
System.out.println(arrayStr.length); // 2が表示される
for (String str : arrayStr) {
System.out.println(str); // nullが表示される
}
int[] arrayInt = new int[2] { 1, 2 }; // コンパイルエラー
参照渡し
int[] array1 = new int[1];
int[] array2 = { 1, 2, 3 };
array1 = array2;
for (int i : array1) {
System.out.println(i); // 1, 2, 3と表示される
}
###コピー
int[] array1 = { 1 };
int[] array2 = array1.clone();
array2[0] = 2;
System.out.println(array1[0]); // 1が表示される
System.out.println(array2[0]); // 2が表示される
##比較
StringBuilder sb = new StringBuilder(5);
String str = "";
System.out.println(sb.equals(str)); // 参照の比較のためfalse
System.out.println(sb.toString().equals(str)); // 値の比較のためtrue
##ポリモーフィズム
interface A {
void test1(); // publicが自動でつけられる
void test2(); // publicが自動でつけられる
}
abstract class B implements A{
abstract void test3(); // publicは自動でつけられない
// privateの修飾は不可
}
class C extends B{
public void test1(){} // 定義しないとコンパイルエラー
public void test2(){} // 定義しないとコンパイルエラー
public void test3(){} // 定義しないとコンパイルエラー
}
public class test {
public static void main(String[] args) {
A a = new A(); // コンパイルエラー
B b = new B(); // コンパイルエラー
C c = new C();
}
}
##オーバーロード
public static void main(String[] args) {
test(1, 2);
}
private static void test(int... i) {
System.out.println("A");
}
private static void test(int i, int j) { // 呼び出される
System.out.println("B");
}
##ループ
###whileの省略形式
int i = 0;
do
System.out.println("A");
i++; // 省略形式では、複数行書けないためコンパイルエラー
while (i < 3);
###forの初期化
for (int i = 0, j = 0; i < 5; i++) {
System.out.println("A");
}
for (int i = 0, int j = 0; i < 5; i++) { // コンパイルエラー
System.out.println("A");
}