Javaの基本文法を徹底解説!プログラムの書き方・ルール・構造を理解しよう
生徒
「Javaのプログラムを書き始めたいんですが、基本的な文法やルールがよくわからなくて...」
先生
「Javaには決まった書き方やルールがあります。最初は難しく感じるかもしれませんが、一つずつ理解していけば大丈夫ですよ。」
生徒
「プログラムの構造や文法のポイントを教えてください!」
先生
「それでは、Javaの基本文法を順番に見ていきましょう!」
1. Javaプログラムの基本構造を理解する
Javaのプログラムは「クラス」という単位で作られています。まずこのクラスがなければ、Javaのプログラムは一切動きません。初心者の方は「クラス=プログラムの設計図」くらいのイメージで問題ありません。そのクラスの中に、処理のまとまりである「メソッド」を書いていきます。
Javaでは、プログラムを実行すると必ずmainメソッドから処理が始まるというルールがあります。どんなに複雑なアプリでも、最初の入口は必ずmainメソッドです。この決まりを理解することが、Java学習の最初の重要なポイントになります。
次に、最も基本的なJavaプログラムの構造を見てみましょう。クラス名はファイル名と完全に一致させる必要があります。例えば、BasicStructure.javaというファイル名の場合、クラス名も必ずBasicStructureにします。また、Javaは大文字と小文字を厳密に区別するため、Mainとmainはまったく別物として扱われる点にも注意しましょう。
public class BasicStructure {
public static void main(String[] args) {
System.out.println("Javaプログラムの基本構造");
System.out.println("mainメソッドから実行されます");
}
}
上記プログラムを実行すると、次のような結果が画面に表示されます。
Javaプログラムの基本構造
mainメソッドから実行されます
このサンプルでは、public class BasicStructureでクラスを定義し、その中にmainメソッドを書いています。System.out.printlnは、画面に文字を表示するための命令で、Javaでは最初に必ず覚える基本中の基本です。まずは「Javaはこの形から始まる」ということをしっかり覚えておきましょう。
public static void main(String[] args)はJavaプログラムの決まり文句です。意味が完全に理解できなくても、最初はそのまま書けるようになることが大切です。
2. 変数の宣言と初期化の文法
変数とは、プログラムの中で数値や文字などのデータを一時的に保存しておくための「箱」のようなものです。Javaでは、この箱を使う前に「どんな種類のデータを入れる箱なのか」を必ず指定します。これをデータ型を指定した変数の宣言と呼び、Javaの基本ルールの一つです。
変数の宣言は「データ型 変数名;」という形で書きます。また、宣言と同時に値を入れることを初期化といいます。変数名は英数字とアンダースコアが使えますが、数字から始めることはできません。classやpublicなどの予約語も使えないため注意しましょう。
まずは、プログラミング未経験の方でも理解しやすい、シンプルな例を見てみましょう。
public class VariableSample {
public static void main(String[] args) {
int age = 20;
String name = "山田太郎";
boolean isStudent = true;
System.out.println("名前: " + name);
System.out.println("年齢: " + age);
System.out.println("学生ですか?: " + isStudent);
}
}
このプログラムでは、int型で年齢、String型で名前、boolean型で「はい・いいえ」の情報を保存しています。変数名を見ただけで意味が分かるようにすると、コードが読みやすくなります。
次に、宣言と代入を分けて書く例です。どちらの書き方も正しく、状況に応じて使い分けます。
public class VariableDeclaration {
public static void main(String[] args) {
int number;
number = 100;
double price = 1980.50;
String productName = "ノートパソコン";
boolean inStock = true;
char grade = 'A';
System.out.println("商品名: " + productName);
System.out.println("価格: " + price + "円");
System.out.println("在庫数: " + number);
System.out.println("在庫あり: " + inStock);
System.out.println("評価: " + grade);
}
}
Javaの主なデータ型には、整数を扱うint型、小数を扱うdouble型、文字列を扱うString型、真偽値を扱うboolean型、一文字を扱うchar型などがあります。用途に合ったデータ型を選ぶことで、プログラムのミスを防ぎ、効率よく処理できます。
3. 演算子の種類と使い方
Javaには様々な演算子があり、計算や比較、論理判断などを行います。算術演算子は数値計算に使い、比較演算子は値の大小関係を調べ、論理演算子は複数の条件を組み合わせる際に使用します。
算術演算子
算術演算子には加算(+)、減算(-)、乗算(*)、除算(/)、剰余(%)があります。整数同士の除算では小数点以下が切り捨てられるため注意が必要です。
比較演算子
比較演算子は二つの値を比較して、真偽値を返します。等しい(==)、等しくない(!=)、大きい(>)、小さい(<)、以上(>=)、以下(<=)などがあります。
論理演算子
論理演算子には論理積(&&)、論理和(||)、否定(!)があります。複数の条件を組み合わせて判定する際に使用します。
public class OperatorExample {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println("算術演算:");
System.out.println("a + b = " + (a + b));
System.out.println("a - b = " + (a - b));
System.out.println("a * b = " + (a * b));
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));
System.out.println("\n比較演算:");
System.out.println("a == b: " + (a == b));
System.out.println("a > b: " + (a > b));
System.out.println("\n論理演算:");
boolean x = true;
boolean y = false;
System.out.println("x && y: " + (x && y));
System.out.println("x || y: " + (x || y));
}
}
実行結果は以下のようになります。
算術演算:
a + b = 13
a - b = 7
a * b = 30
a / b = 3
a % b = 1
比較演算:
a == b: false
a > b: true
論理演算:
x && y: false
x || y: true
4. 制御構文の基本文法
制御構文はプログラムの流れを制御するための文法です。条件によって処理を分岐させるif文、複数の条件を効率的に判定するswitch文があります。これらの制御構文を使いこなすことで、複雑な処理を実現できます。
if文の文法
if文は条件式が真のときに処理を実行します。else ifで複数の条件を追加でき、elseでどの条件にも当てはまらない場合の処理を記述します。条件式は必ず括弧で囲み、真偽値を返す式を記述します。
switch文の文法
switch文は一つの値に対して複数の選択肢を判定する際に便利です。各caseの最後にはbreak文を記述して、処理を抜けることを明示します。breakを忘れると次のcaseの処理も実行されてしまうため注意が必要です。
public class ControlStatement {
public static void main(String[] args) {
int score = 75;
String grade;
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else if (score >= 60) {
grade = "D";
} else {
grade = "F";
}
System.out.println("点数: " + score);
System.out.println("評価: " + grade);
int dayOfWeek = 3;
String dayName;
switch (dayOfWeek) {
case 1:
dayName = "月曜日";
break;
case 2:
dayName = "火曜日";
break;
case 3:
dayName = "水曜日";
break;
default:
dayName = "その他";
break;
}
System.out.println("\n今日は" + dayName + "です");
}
}
このプログラムの実行結果です。
点数: 75
評価: C
今日は水曜日です
if文の条件式には必ず真偽値を返す式を書きます。数値を直接書くとコンパイルエラーになるので注意しましょう。
5. 繰り返し処理の文法パターン
繰り返し処理はプログラミングの基本であり、同じ処理を効率的に実行するために使います。Javaにはfor文、while文、do-while文という三つの繰り返し構文があります。それぞれ特徴が異なるため、状況に応じて使い分けることが大切です。
for文の使い方
for文は繰り返し回数が決まっている場合に適しています。初期化式、条件式、増減式の三つの要素で構成され、カウンタ変数を使って繰り返しを制御します。配列やリストの要素を順番に処理する際によく使われます。
while文の使い方
while文は条件が真である間、処理を繰り返します。繰り返し回数が事前にわからない場合や、特定の条件を満たすまで処理を続けたい場合に使用します。条件式は繰り返しの最初に評価されるため、一度も実行されないこともあります。
do-while文の使い方
do-while文は処理を必ず一回は実行したい場合に使います。条件判定が最後に行われるため、while文とは動作が異なります。ユーザー入力を受け付ける処理などでよく使われます。
public class LoopStatement {
public static void main(String[] args) {
System.out.println("for文の例:");
for (int i = 1; i <= 5; i++) {
System.out.println(i + "回目の繰り返し");
}
System.out.println("\nwhile文の例:");
int count = 1;
while (count <= 3) {
System.out.println("カウント: " + count);
count++;
}
System.out.println("\ndo-while文の例:");
int num = 1;
do {
System.out.println("数値: " + num);
num++;
} while (num <= 3);
System.out.println("\n九九の表(一部):");
for (int i = 2; i <= 3; i++) {
for (int j = 1; j <= 5; j++) {
System.out.println(i + " × " + j + " = " + (i * j));
}
System.out.println();
}
}
}
実行結果は以下の通りです。
for文の例:
1回目の繰り返し
2回目の繰り返し
3回目の繰り返し
4回目の繰り返し
5回目の繰り返し
while文の例:
カウント: 1
カウント: 2
カウント: 3
do-while文の例:
数値: 1
数値: 2
数値: 3
九九の表(一部):
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
2 × 4 = 8
2 × 5 = 10
3 × 1 = 3
3 × 2 = 6
3 × 3 = 9
3 × 4 = 12
3 × 5 = 15
6. 配列の宣言と使用方法
配列は同じ型のデータを複数まとめて管理するためのデータ構造です。Javaの配列は固定長で、一度作成するとサイズを変更できません。配列を使うことで、大量のデータを効率的に扱うことができます。
配列の宣言には「データ型[] 配列名」という形式を使います。配列の要素にアクセスする際は、インデックス番号を使用します。インデックスは0から始まることに注意が必要です。配列の長さはlengthプロパティで取得できます。
配列の初期化には二つの方法があります。一つはnew演算子を使ってサイズを指定する方法、もう一つは初期値を波括弧で囲んで指定する方法です。初期値を指定した場合、配列のサイズは自動的に決まります。
多次元配列
Javaでは二次元配列や三次元配列なども作成できます。二次元配列は表やマトリックスを表現する際に便利で、行と列の概念を持ちます。多次元配列も通常の配列と同様に、インデックスを使って要素にアクセスします。
7. メソッドの定義と呼び出し
メソッドは処理をまとめたもので、プログラムを機能ごとに分割して整理するために使います。メソッドを使うことで、同じ処理を何度も書く必要がなくなり、コードの可読性と保守性が向上します。
メソッドの定義には、アクセス修飾子、戻り値の型、メソッド名、引数リストが必要です。publicやprivateなどのアクセス修飾子で、メソッドの公開範囲を制御します。戻り値がない場合はvoidを指定します。
メソッドには引数を渡すことができ、処理結果を戻り値として返すことができます。引数は複数指定することも可能で、データ型と変数名を記述します。メソッドを呼び出す際は、メソッド名の後ろに括弧をつけて、必要な引数を渡します。
メソッドのオーバーロード
同じ名前のメソッドでも、引数の型や個数が異なれば複数定義できます。これをメソッドのオーバーロードと呼びます。オーバーロードを使うことで、似た処理を行うメソッドに統一した名前をつけることができ、プログラムがわかりやすくなります。
calculateTotal、getUserNameのように、メソッドが何をするのかがわかる名前をつけましょう。
8. コメントの書き方と重要性
コメントはプログラムの説明を記述するもので、実行時には無視されます。適切なコメントを書くことで、他の人や未来の自分がコードを理解しやすくなります。Javaには三種類のコメントがあり、用途に応じて使い分けます。
単一行コメント
二つのスラッシュ(//)で始まり、その行の終わりまでがコメントになります。短い説明や、コードの横に補足を書く際に使います。デバッグ時に一時的にコードを無効化する用途でも使われます。
複数行コメント
/*で始まり*/で終わる範囲がコメントになります。複数行にわたる長い説明や、一時的に複数行のコードを無効化したい場合に便利です。ネストはできないため注意が必要です。
ドキュメントコメント
/**で始まり*/で終わるコメントで、メソッドやクラスの説明を記述します。専用のツールを使って自動的にドキュメントを生成できるため、API仕様書の作成に役立ちます。
9. 命名規則とコーディング規約
Javaには推奨される命名規則があり、これに従うことでコードの可読性が向上します。クラス名はパスカルケース(各単語の先頭を大文字)、変数名とメソッド名はキャメルケース(最初の単語は小文字、それ以降は大文字で開始)が一般的です。
クラス名の命名規則
クラス名は名詞で、各単語の先頭を大文字にします。例えば、StudentInfo、ProductManagerのように記述します。クラス名は意味のある名前をつけることで、そのクラスの役割が明確になります。
変数名とメソッド名の命名規則
変数名は名詞、メソッド名は動詞で始めるのが基本です。最初の単語は小文字で始め、続く単語の先頭を大文字にします。例えば、userName、calculateTotalのように記述します。短すぎる名前や意味不明な略語は避けましょう。
定数の命名規則
定数は全て大文字で記述し、単語の区切りにアンダースコアを使います。例えば、MAX_SIZE、DEFAULT_VALUEのように記述します。定数にはfinalキーワードをつけて、値を変更できないようにします。
インデントと空白の使い方
コードの読みやすさのために、適切なインデントと空白を使います。ブロックの中は一段階インデントを下げ、演算子の前後にはスペースを入れます。一つの行には一つの文だけを書き、長い行は適切に改行します。統一されたスタイルで書くことで、チーム開発でも混乱が生じません。
10. エラーと例外処理の基礎
プログラムの実行中にエラーが発生することがあります。Javaでは例外処理という仕組みを使って、エラーに適切に対応します。例外処理を正しく実装することで、プログラムの安定性と信頼性が向上します。
コンパイルエラーと実行時エラー
コンパイルエラーは文法の誤りなどで発生し、プログラムが実行できません。変数の型の不一致、セミコロンの付け忘れ、括弧の対応ミスなどが原因です。実行時エラーはプログラムの実行中に発生し、ゼロ除算や配列の範囲外アクセスなどが該当します。
try-catch文の使い方
tryブロックに例外が発生する可能性のあるコードを書き、catchブロックで例外を捕捉して処理します。複数のcatchブロックを記述して、異なる種類の例外に対応することもできます。finallyブロックは例外の有無に関わらず必ず実行されます。
よくある例外の種類
NullPointerExceptionはnull参照にアクセスした際に、ArrayIndexOutOfBoundsExceptionは配列の範囲外にアクセスした際に発生します。NumberFormatExceptionは文字列を数値に変換できない場合に、ArithmeticExceptionはゼロ除算などの算術エラーで発生します。
catchブロックはバグの原因になります。
Javaの基本文法を理解することは、プログラミング学習の第一歩です。文法やルールを一つずつ確実に身につけることで、より複雑なプログラムを書けるようになります。最初は難しく感じるかもしれませんが、実際にコードを書いて動かしながら学ぶことで、自然と理解が深まっていきます。焦らず着実に学習を進めていきましょう。