Java初心者向け資料を全力でまとめてみた! 

最近仕事でJavaを触り始めました。正直Javaは今まで研修的なことしかやってこなかったので、かなり苦戦していますが、新しい言語を学ぶ楽しさのおかげで毎日がめっちゃ充実しています!
ということで、最近ネットで探しているJavaの入門用資料を中心にまとめてみました。


Java基礎文法最速マスタ

Java基礎文法最速マスター

言語系の最速マスタ記事。めちゃくちゃわかりやすくてクオリティが高い。素敵すぎる!

Javaを使うなら必ず覚えておきたいデータ構造 - 配列・リスト・マップ

Javaの配列、リストはめちゃくちゃよく使うので、早い段階で理解しておきたい!

mixi/Javaの文法の基礎

A.02. Java の文法の基礎

mixiさんがGitHubで公開しているAndroid開発用のドキュメントの一部ですが、量・質ともにすばらしいです!
たとえば修飾子など初心者が「?」となりがちな部分もわかりやすく、かつ網羅的に説明してくれています。

修飾子

<<修飾子>>
abstract: クラスの場合はインスタンス化出来ないことを示す。メソッドの場合は継承したサブクラスで実装を要求する。
final: 継承やオーバライドを禁止。クラスに対しfinalと宣言すると、そのクラスのメソッドもfinal扱いとなる
static     クラスそのものに属することを示す

Switch文の判定条件

1
2
3
4
5
6
7
8
9
10
11
switch (判定対象) {
case 条件値リテラル:
文;
break;
case 条件値リテラル:
break;
default:
文;
break;
}

判定対象で使えるのは、byte、short、int、char、Enum。これ以外はコンパイルエラー。

インタフェース

実体を持たないメソッド郡の定義。 implements するクラスの振る舞いを規定する。

1
2
3
public interface MyInterface {
public void hoge();
}

列挙型

Javaの Enum はオブジェクトの列挙になるので、メソッドを宣言したり、メンバー変数を宣言したりと振る舞いを持たせることができる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Hoge {
public static enum Type {
HOGE(1),
HUGA(2);
private final int id;
private Type(final int id) {
this.id = id;
}
public int getInt() {
return this.id;
}
}
public static Type getType(final int id) {
Type[] types = Type.values();
for (Type type : types) {
if (type.getInt() == id) {
return type;
}
}
return null;
}
}

staticイニシャライザ

クラスのロード時に実行される処理のまとめるブロック

1
2
3
4
5
6
7
public class HogeClass {
public static final HashMap<String, String> SOME = new HashMap<String, String>();
static {
SOME.put("hoge", "fuga");
}
}

アノテーション

java.lang.Annotation を継承したインタフェースで、コンパイラに意思表示したり、実行時に意味をもつものなどがある。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// @Deprecated アノテーションによって、このクラスの使用が推奨されないことを示す
// もし他のクラスがこのクラスを使用している場合、コンパイラが警告を発する
@Deprecated
public class MyClass extends Hoge {
// @Override アノテーションによって、このメソッドが、親クラスのメソッドをオーバライドしていることを示す
// これにより、オーバライドしているようで実はオーバライドになっていない、という不幸なバグをコンパイル時に検知できる
@Override
public void hoge() {
// @SuppressWarnings によって、コンパイラに対して警告表示の抑制を指示する
// アノテーションに引数を渡すことも可能
@SuppressWarnings("rawtypes")
List list = new ArrayList();
}
}

例外の種類

  • 実行時例外 (RuntimeException) => プログラムの実行中に発生する予期しない動作を扱う。NullPointerException など
  • 検査例外 (Exception) => 処理の続行が不可能(失敗)したことを示す場合を扱う。IOException など
  • エラー(Error)=> アプリケーションのハンドリングを超えた、 重大な問題を扱う。OutOfMemoryError など

参照オブジェクトの比較

参照オブジェクトの比較には Object#equalsObject#hashCode() がよい。

Camparableインタフェース

Comparable<T>#compareTo(T) が返す int 型整数によって順序を決定する。
戻り値が -1 は引数のオブジェクトより小さい。0 が等しい。 1 が大きいを表す。

Javaコーディング規約

本当はOracleのコーディング規約読んだほうがいいっぽいけど心が折れた初心者向けに。

Androidのコーディング規約(英語)

Twitter Java StyleGuid - GitHub

ドットインストール Java入門

Java入門 (全23回) - プログラミングならドットインストール

めっちゃ助かりました! 個人的にはJavaみたいな言語こそスクリーンキャストで学びたい。(環境構築系でまりやすいので)

書籍

@hotchemiさんから教えていただいた、初心者向けの書籍がこちら。

パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)

なぜJavaではこう書くのかを徹底解明。言語の基本からサーブレット、データベース、GUIの実践まで完全網羅

EFFECTIVE JAVA 第2版 (The Java Series)

自分のJavaプログラミングに関する知識/スキルの棚卸しと補正ができるそうです。

練習問題: CodeResume

CodeResume

環境構築を一切必要とせずにWeb画面上でコードを書くことができます。
四則演算や、ループ文、Javaっぽい記法、ファイルの入出力など、基礎から実用レベルの問題がかなり充実しています。
@avion_de_papierさんからサイトを教えていただきました。
ありがたうございます!

練習問題: AOJ(Aizu Online Judge)

AIZU ONLINE JUDGE: Programming Challenge

現在AOJで、Javaの練習問題を順番にこなしていっています。ドキュメントを読みつつ、飽きたらコードを書くようにすることで、
勉強したことを活かしつつ、練習問題的なもので基礎的なコーディング力を気軽に身につけられるので、オススメです!

お願い

ネットの資料でJava入門者向けにお勧めのドキュメントとかあればぜひコメントください。
スクリーンキャストとか欲しいぉ…