点数
86点
感想
仕事で久しぶりにJavaを触ることになったので、復讐を兼ねて読んでみた。
ベストセラーとなっている書籍だけあって全体的にわかりやすく、なかなかの良書だと思う。
データ型
- int, String, booleanを使えばOK。数値は少数を扱う場合だけdoubleを使う。
- 小さな型から大きな型への代入は可能、逆は不可。
doubole num = 100;
のようにdouble型変数にintの値は代入可能。逆は不可。
演算時は大きい方の型に統一されてから演算される。
5.0 / 2はdoubleに統一され5.0 / 2.0となってから演算が行われ2.5となる。 - swtich文は整数の場合のみ使うことができる。
- シングルクォートはchar型、ダブルクォートはstring型。
- +演算子による数値と文字列の連結は、数値が文字列に変換されてから連結される。
String msg = 100 + "円です";
- 定数にはfinalを付ける。
final double PI = 3.14;
- 乱数発生
new java.util.Random().nextInt(5) // 0以上5未満
- スリープ
Thread.sleep(1000);
- ラッパークラスのインスタンス作成はvalueOfメソッドを使う。
newを使う方法はJava9から非推奨となった。
パッケージ
- メソッドが増えたら複数クラスに分割、クラスが増えたら複数パッケージに分割する
- パッケージ名は小文字にするのが一般的
- パッケージに親子関係はないため、hoge.aaaとhoge.bbbは相互に全く関係がない独立したパッケージである
import hoge.*としてもhoge.aaa.MyClassなどhoge.aaaパッケージのクラスをインポートすることはできない。
(import hoge.aaa.*が必要) - デフォルトパッケージのクラスはimport文でインポートすることはできない
- パッケージを使うことで名前空間を分けることができる
- import文はあくまで入力軽減機能である
他の言語のincludeやrequireと同じものと勘違いされることが多いが、Javaでは宣言することなくクラスを使うことができる。
import文はFQCNの記述を省略するための構文にすぎない。
継承
以下はOyaの後にKoが出力される。
public class Oya {
pubilc Oya() {
system.out.print("Oya");
}
}
public class Ko extends Oya {
pubilc Ko() {
system.out.print("Ko");
}
}
public class Main {
public static void main(String[] args) {
Ko ko = new Ko();
}
}
Javaでは「全てのコンストラクタは、その先頭で親クラスのコンストラクタを呼び出さなければならない」というルールになっている。
よって、本来は以下のように書かなければならないが、先頭に親クラスのコンストラクタを呼び出しがない場合はコンパイラによって自動的にsuper()が追加される。
pubilc Ko() {
super();
system.out.print("Ko");
}
親クラスに引数ありのコンストラクタしか定義されていない場合は、super(引数);
を記述する必要がある。
(コンパイラによって自動的にsuper()が追加されても、それを実行できないため)