キーワードの分類と用途
Javaのキーワードは言語仕様によって予約された単語であり、特定の意味を持つため、識別子として使用することはできません。すべて小文字で構成されます。
- データ型定義:
int,double,char,boolean,class,interface,enum - 制御フロー:
if,for,while,switch,return,break - アクセス修飾子:
public,protected,private - クラス・メソッド修飾子:
static,final,abstract,synchronized - 継承と実装:
extends,implements - オブジェクト操作:
new,this,super,instanceof - 例外処理:
try,catch,finally,throw,throws - パッケージ管理:
package,import - その他の修飾子:
volatile,transient,native,assert - リテラル値:
true,false,null
識別子の命名規則と慣例
変数名、メソッド名、クラス名などに使用する識別子には厳密なルールと推奨される命名スタイルがあります。
必須ルール(構文要件)
- 英字(大文字・小文字)、数字、アンダースコア(_)、ドル記号($)のみ使用可能
- 先頭を数字にすることはできない
- キーワードや将来の予約語は使用不可
- 空白や特殊文字(スペース、タブなど)を含めない
- 大文字と小文字が区別される
命名慣例(ベストプラクティス)
- パッケージ名: 全て小文字(例:
com_example_app) - クラス・インタフェース: パスカルケース(例:
StudentRecord) - 変数・メソッド: キャメルケース(例:
studentName,calculateTotal()) - 定数: アンダースコア付き大文字(例:
MAX_VALUE,DEFAULT_TIMEOUT)
変数の基本概念
変数はメモリ上の一時的な格納領域であり、値を保持してプログラム中で再利用できるようにします。
構成要素
- データ型: 格納可能な値の種類(例:
int,String) - 変数名: 識別子として使用(命名規則に従う)
- 値: 実際に格納されるデータ
宣言形式
データ型 変数名 = 初期値;
例: int age = 25;
スコープの原則
- 変数は宣言されたブロック内でのみ有効
- 同一スコープ内で同じ名前の変数を複数宣言できない
- ブロックを抜けると自動的に破棄される
基本データ型の詳細
整数型
| 型 | サイズ | 範囲 |
|---|---|---|
| byte | 1バイト | -128 〜 127 |
| short | 2バイト | -32,768 〜 32,767 |
| int | 4バイト | -2^31 〜 2^31-1 |
| long | 8バイト | -2^63 〜 2^63-1(末尾にLを付ける) |
整数リテラルのデフォルト型は int です。大きな値には long を使用します。
浮動小数点型
| 型 | サイズ | 精度 |
|---|---|---|
| float | 4バイト | 単精度(末尾にFまたはf) |
| double | 8バイト | 倍精度(デフォルト) |
浮動小数点数は二進法による近似表現のため、正確な計算が必要な場合は BigDecimal クラスを使用すべきです。
文字型 char
- 2バイトでUnicode文字を表現
- 単一引用符で囲む(例:
'A','あ') - エスケープシーケンスも使用可能:
\n(改行)、\t(タブ)、\"(二重引用符)、\\(バックスラッシュ) - 内部的には数値として扱われ、算術演算も可能
真偽型 boolean
- 条件判定に使用される唯一の型
- 取り得る値は
trueとfalseのみ - 0や非0値で代替できない(C言語とは異なる点)
型変換のルール
自動型変換(昇格)
小さい範囲の型から大きい範囲の型へは自動的に変換されます。
byte → short → int → long → float → double
例外: byte, short, char 同士の演算結果は常に int になります。
強制型変換(キャスト)
大きな型から小さな型へ変換する場合、明示的なキャストが必要です。
int num = 100;
byte b = (byte) num; // 明示的なキャスト
このとき、値が範囲外の場合には情報の損失が発生する可能性があります。
文字列との連結
String 型は参照型ですが、+ 演算子を使って基本データ型と連結できます。
String message = "年齢: " + 30; // 結果は "年齢: 30"
この演算では、右辺の値が自動的に文字列に変換されます。
進数とビット表現
- 十進数: 通常の数値(例: 123)
- 二進数:
0bまたは0B接頭辞(例:0b1010) - 八進数:
0接頭辞(例:017) - 十六進数:
0xまたは0X接頭辞(例:0xFF)
負数は「2の補数」形式で表現され、最上位ビットが符号を表します。
主な演算子の種類
算術演算子
+ - * / %: 四則演算と剰余++,--: 前置・後置インクリメント/デクリメント+: 文字列連結にも使用
代入演算子
=: 単純代入+=,-=など: 複合代入(左辺の型は変更されない)
比較演算子
==,!=,<,>,<=,>=- 戻り値は常に
boolean instanceof: オブジェクトの型チェック
論理演算子
&&(短絡AND): 左がfalseなら右を評価しない||(短絡OR): 左がtrueなら右を評価しない!: 否定&,|: 条件式に関わらず両方を評価
ビット演算子
<<: 左シフト(2倍の効果)>>: 右シフト(符号維持)>>>: 論理右シフト(ゼロ埋め)&,|,^,~: ビット単位のAND/OR/XOR/NOT
三項演算子
条件に基づいて値を選択します。
int max = (a > b) ? a : b;
これは if-else 文の簡略形ですが、式として扱えるため変数への代入に便利です。
優先順位と可読性
演算子には厳密な優先順位がありますが、複雑な式では括弧 () を使って明示的に順序を指定することが推奨されます。
int result = ((a + b) * c) >> 1; // 可読性向上のため括弧を使用
過度に複雑な1行式は避けて、複数ステップに分けて記述することで保守性を高めましょう。