| この記事の要点 |
|
宣言と代入
int count = 10; // 型を明示する
String name = "田中";
double price = 1980.5;
boolean isActive = true;
int a, b; // まとめて宣言できる
a = 1;
b = 2;
int x = 1, y = 2; // 宣言と同時に代入
// count = "十"; // コンパイルエラー: 型が違う
ローカル変数は初期化が必須
public void run() {
int n;
// System.out.println(n);
// エラー: variable n might not have been initialized
n = 1;
System.out.println(n); // OK
int m;
if (cond) {
m = 1;
}
// System.out.println(m); // エラー: 通らない経路がある
int k;
if (cond) { k = 1; } else { k = 2; }
System.out.println(k); // OK: すべての経路で代入されている
}
「代入されていない可能性がある」だけでコンパイルが通りません。実行時に未初期化の値を読む事故が起きないようになっています。
フィールドには既定値が入る
public class Sample {
int count; // 0
double rate; // 0.0
boolean flag; // false
char c; // ' '
String name; // null ← 参照型は null
int[] items; // null
public void show() {
System.out.println(count); // 0
System.out.println(name.length()); // NullPointerException
}
}
| 型 | 既定値 | 型 | 既定値 |
|---|---|---|---|
byte short int long | 0 | float double | 0.0 |
char | ' ' | boolean | false |
参照型(String 配列 クラス) | null | ||
フィールドが null のまま使われるのが NullPointerException の最大の原因です。コンストラクタで必ず値を入れるか、final を付けて代入を強制してください。
プリミティブ型と参照型
// プリミティブ: 値そのものを持つ
int a = 1;
int b = a;
b = 2;
System.out.println(a); // 1 影響しない
// 参照型: オブジェクトの場所を持つ
int[] x = {1, 2, 3};
int[] y = x;
y[0] = 99;
System.out.println(x[0]); // 99 同じ配列を指している
// コピーしたいなら複製する
int[] z = x.clone();
z[0] = 0;
System.out.println(x[0]); // 99 影響しない
// メソッドの引数も同じ
void f(int n) { n = 99; } // 呼び出し元は変わらない
void g(int[] arr) { arr[0] = 99; } // 中身が変わる
void h(int[] arr) { arr = new int[]{0}; } // 呼び出し元は変わらない
Java の引数はすべて値渡しです。参照型では「参照の値」がコピーされるため、中身は変えられますが、引数自体に別のオブジェクトを代入しても呼び出し元には反映されません。
var による型推論
var count = 10; // int と推論される
var name = "田中"; // String
var list = new ArrayList<String>(); // ArrayList<String>
var map = new HashMap<String, List<Integer>>(); // 長い型名を書かずに済む
for (var entry : map.entrySet()) { }
// count = "十"; // エラー: int のまま
// var n; // エラー: 初期値が必要
// var x = null; // エラー: 型を決められない
// var f = () -> {}; // エラー: ラムダは推論できない
Java 10 以降で使えます。型が消えるわけではなく、右辺から決まった型に固定されます。ローカル変数だけで、フィールドや引数には使えません。
右辺を見ても型が分からない場合(var result = service.process();)は、読み手が困るので明示的に書いたほうが親切です。
final
final int MAX = 100;
// MAX = 200; // エラー: 再代入できない
final List<String> items = new ArrayList<>();
items.add("a"); // OK: 中身は変えられる
// items = new ArrayList<>(); // エラー: 参照先は変えられない
// 中身も変えたくないなら不変のコレクションにする
final List<String> fixed = List.of("a", "b");
// fixed.add("c"); // UnsupportedOperationException
// ラムダや匿名クラスから使う変数は final 相当でなければならない
int n = 1;
Runnable r = () -> System.out.println(n);
// n = 2; // エラー: n が実質 final でなくなる
final は「この名前が別のものを指さない」ことだけを保証します。不変にしたいなら List.of() や record を使ってください。
スコープ
public class Sample {
private int field = 1; // インスタンス全体で使える
private static int shared = 0; // クラス全体で 1 つ
public void run() {
int local = 2; // このメソッドの中だけ
if (true) {
int inner = 3; // このブロックの中だけ
System.out.println(local);
}
// System.out.println(inner); // エラー
for (int i = 0; i < 3; i++) { }
// System.out.println(i); // エラー: for の外では使えない
}
}
同じ名前で隠れる(シャドーイング)
public class User {
private String name;
private int count = 1;
public User(String name) {
// name = name; // 引数に引数を代入しているだけ。フィールドは null のまま
this.name = name; // this. でフィールドを指す
}
public void run() {
int count = 99; // フィールドと同じ名前のローカル変数
System.out.println(count); // 99 ローカルが優先
System.out.println(this.count); // 1 フィールドは this. で見る
}
}
コンストラクタでの this. の付け忘れはコンパイルエラーにならず、フィールドが null のまま残ります。IDE の警告を有効にしておいてください。
命名規則
| 対象 | 書き方 | 例 |
|---|---|---|
| 変数・メソッド | camelCase | userName getTotal() |
| クラス・インターフェース | PascalCase | UserProfile |
定数(static final) | UPPER_SNAKE | MAX_RETRY |
| パッケージ | すべて小文字 | com.example.app |
| 型パラメータ | 大文字 1 文字 | T K V E |
// 使える文字: 英数字 _ $(先頭は数字以外)
int _count = 1; // 使えるが避ける
// int 2nd = 1; // エラー
// int class = 1; // エラー: 予約語
// 数値リテラルはアンダースコアで区切れる
int million = 1_000_000;
long hex = 0xFF_FF;
関連
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- MariaDB Monitor (mysql コマンド) の使い方 2026-10-14 15:21:02
- MariaDB の管理ツール (phpMyAdmin / DBeaver 等) 2026-10-14 15:21:02
- Google Custom Search JSON API|新規受付終了・移行期限と既存実装の確認 2026-10-14 14:50:13
- MySQL rootの初期パスワード確認|導入方式・Docker既存DB・復旧の注意 2026-10-14 14:39:34
- MySQL root パスワードの変更方法(ALTER USER / mysqladmin / パスワード忘れ時の復旧) 2026-10-14 14:39:34
- MySQL ALTER USER の使い方|パスワード変更・アカウントロック 2026-10-14 14:39:34
- MySQL ERROR 1129|ホスト遮断の原因・カウンタ・解除前の確認 2026-10-14 14:04:49
- MySQL ERROR 1820・1862|期限切れパスワードの安全な更新と確認 2026-10-14 14:04:49
- MySQL ERROR 1698|ソケット認証・OSユーザー・接続経路の確認 2026-10-14 14:04:49
- mysql_configが見つからない|mysqlclientの旧ビルドとpkg-configの確認 2026-10-14 13:36:32
- MySQLエラー一覧|番号・SQLSTATE別の原因と安全な確認手順 2026-10-14 13:36:32
- インストール直後にNetbeansが反応しない 2026-10-14 13:07:02
- NetBeans でよくあるエラー一覧と対処法 — JDK / Tomcat / PHP / メモリ不足 2026-10-14 13:07:02
- Apache NetBeans入門|起動JDK・プロジェクト作成・関連手順 2026-10-14 13:07:02
- 【Laravel】ページング(ページネーション)をする方法 2026-10-14 12:31:44