
Javaの基本構文とデータ型
2025-08-01はじめに
Javaは世界中で広く使用されているプログラミング言語で、その安定性と汎用性から企業システムやAndroidアプリ開発など様々な場面で活用されています。この記事では、Javaプログラミングを始めるにあたって必須となる「基本構文」と「データ型」について、詳細に解説します。
Javaを学ぶメリット:
- オブジェクト指向プログラミングの基礎を学べる
- プラットフォームに依存しない(Write Once, Run Anywhere)
- 大規模なコミュニティと豊富な学習リソース
- 求人数が多く、キャリアに有利
Java開発環境の準備
Javaの学習を始める前に、開発環境を整えましょう。
JDKのインストール
Java開発にはJDK(Java Development Kit)が必要です。最新版はOracle公式サイトからダウンロードできます。
統合開発環境(IDE)
初心者におすすめのIDE:
- Eclipse – 無料で利用可能な人気IDE
- IntelliJ IDEA Community Edition – 使いやすく強力な機能を備えた無料版
- NetBeans – 初心者向けのシンプルなインターフェース
Javaの基本構文
Hello Worldプログラム
Javaの基本構文を理解するために、伝統的な「Hello World」プログラムから始めましょう。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
このプログラムを分解して解説します:
public class HelloWorld
– クラス宣言。Javaではすべてのコードがクラス内に記述されます。public static void main(String[] args)
– プログラムのエントリーポイント。実行時に最初に呼び出されるメソッドです。System.out.println()
– コンソールに文字列を出力するメソッド。
Javaプログラムの構造
典型的なJavaプログラムの構造:
// パッケージ宣言(オプション)
package com.example.myapp;
// インポート文(必要なライブラリをインポート)
import java.util.Scanner;
// クラス定義
public class MyClass {
// メインメソッド
public static void main(String[] args) {
// プログラムの処理をここに記述
}
// 他のメソッド
public void myMethod() {
// メソッドの処理
}
}
コメントの書き方
Javaには3種類のコメントがあります:
- 単一行コメント:
// コメント内容
- 複数行コメント:
/* コメント内容
複数行にわたる場合 */
- ドキュメンテーションコメント:
/**
* ドキュメンテーションコメント
* クラスやメソッドの説明に使用
*/
Javaのデータ型
Javaのデータ型は「プリミティブ型」と「参照型」の2つに大別されます。
プリミティブ型(基本データ型)
Javaには8つのプリミティブ型があります:
データ型 | サイズ | 説明 | 範囲 | 例 |
---|---|---|---|---|
byte | 8ビット | 整数 | -128 ~ 127 | byte b = 100; |
short | 16ビット | 整数 | -32,768 ~ 32,767 | short s = 10000; |
int | 32ビット | 整数 | -2^31 ~ 2^31-1 | int i = 100000; |
long | 64ビット | 整数 | -2^63 ~ 2^63-1 | long l = 100000L; |
float | 32ビット | 単精度浮動小数点数 | 約±3.4e+38F | float f = 3.14f; |
double | 64ビット | 倍精度浮動小数点数 | 約±1.8e+308 | double d = 3.141592; |
char | 16ビット | Unicode文字 | ‘\u0000’ ~ ‘\uffff’ | char c = 'A'; |
boolean | 1ビット | 真偽値 | true/false | boolean flag = true; |
参照型
プリミティブ型以外はすべて参照型です。主な参照型には以下があります。
- String – 文字列を扱うクラス
String name = "Javaプログラマー";
- 配列 – 同じ型の複数の値を格納
int[] numbers = {1, 2, 3, 4, 5};
- クラス – ユーザー定義型
// ユーザー定義型「Person」
public class Person {
// フィールド(データメンバ)
private String name;
private int age;
// コンストラクタ(初期化)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// メソッド(機能)
public void greet() {
System.out.println("こんにちは、私は " + name + " です。年齢は " + age + " 歳です。");
}
}
- インターフェース – 抽象的な振る舞いを定義
public interface Animal {
void speak(); // メソッドの定義(実装なし)
}
リテラル
リテラルとは、ソースコードに直接記述される値のことです。
- 整数リテラル:
42
,0x2A
(16進数),052
(8進数),0b101010
(2進数) - 浮動小数点数リテラル:
3.14
,6.02e23
- 文字リテラル:
'A'
,'\n'
(改行),'\u0041'
(Unicode) - 文字列リテラル:
"Hello"
- 論理リテラル:
true
,false
- nullリテラル:
null
変数と定数
変数の宣言と初期化
Javaの変数の宣言と初期化は、他の言語(たとえば JavaScript や Python)と比較して、厳格な型指定と文法ルールがあるのが大きな特徴です。以下に注意点と他言語との違いをわかりやすく説明します。
int number = 10; // 整数型
String name = "Tom"; // 文字列型(クラス)
boolean isActive = true; // 真偽値型
注意点①:型の指定が必須(静的型付け)
Javaでは、変数を宣言する際にデータ型を明示する必要があります。型が違えば代入できません。
int age = "20"; // エラー!文字列をint型に代入できない
注意点②:宣言だけでは使えない(初期化が必要)
int score;
// System.out.println(score); // コンパイルエラー:初期化されていない変数
Javaではローカル変数(メソッド内など)を初期化せずに使うとコンパイルエラーになります。
ただし、**フィールド変数(クラスの中で宣言された変数)**にはデフォルト値(0, null など)が自動で入ります。
注意点③:定数はfinal
で宣言
final double PI = 3.14159;
// PI = 3.0; // エラー:final変数は再代入不可
特徴 | Java | JavaScript | Python |
---|---|---|---|
型の指定 | 必須(静的型付け) | 不要(動的型付け) | 不要(動的型付け) |
初期化なし使用 | ローカルでは不可 | OK(undefined) | OK(NameErrorだが実行時) |
定数 | final で宣言 | const またはObject.freeze | 命名規則(全大文字など) |
変数の再宣言 | 同じスコープ内では不可 | var では可、let は不可 | 同名で再代入は可 |
JavaScript の場合(柔軟)
let a = 10;
a = "hello"; // OK(動的に型が変わる)
Python の場合(柔軟)
x = 5
x = "world" # OK(型の再代入可能)
Java の場合(厳格)
int a = 10;
a = "hello"; // エラー!型が違う
Javaの注意点 | 他言語との差 |
---|---|
変数には必ず型が必要(例: int , String ) | PythonやJSでは不要 |
初期化されていない変数は使えない | JSはundefined, Pythonは実行時エラー |
定数を使うときはfinal を使う必要 | Pythonには構文レベルの定数なし |
同じ名前の変数は同一スコープで再宣言不可 | JSのvar などでは再宣言できてしまう |
データ型 変数名 [= 初期値];
例:
int age; // 宣言のみ
age = 25; // 後で初期化
double price = 9.99; // 宣言と初期化を同時に
定数の宣言
変更できない値を定義するにはfinal
キーワードを使用します:
final double PI = 3.14159;
final int MAX_USERS = 100;
慣例として、定数名はすべて大文字でアンダースコアで単語を区切ります。
変数のスコープ
変数の有効範囲(スコープ)は、その変数が宣言されたブロック内に限定されます。
public class ScopeExample {
int instanceVar = 10; // インスタンス変数(クラス全体で有効)
public void myMethod() {
int localVar = 20; // ローカル変数(メソッド内でのみ有効)
if (true) {
int blockVar = 30; // ブロック変数(if文内でのみ有効)
System.out.println(blockVar);
}
// System.out.println(blockVar); // エラー: blockVarは見えない
}
}
演算子
Javaには様々な演算子があります。
算術演算子
演算子 | 説明 | 例 |
---|---|---|
+ | 加算 | a + b |
– | 減算 | a - b |
* | 乗算 | a * b |
/ | 除算 | a / b |
% | 剰余 | a % b |
代入演算子
演算子 | 例 | 同等の式 |
---|---|---|
= | a = b | a = b |
+= | a += b | a = a + b |
-= | a -= b | a = a - b |
*= | a *= b | a = a * b |
/= | a /= b | a = a / b |
%= | a %= b | a = a % b |
比較演算子
演算子 | 説明 | 例 |
---|---|---|
== | 等しい | a == b |
!= | 等しくない | a != b |
> | より大きい | a > b |
< | より小さい | a < b |
>= | 以上 | a >= b |
<= | 以下 | a <= b |
論理演算子
演算子 | 説明 | 例 |
---|---|---|
&& | 論理積(AND) | a && b |
|| | 論理和(OR) | a || b |
! | 否定(NOT) | !a |
インクリメント/デクリメント演算子
演算子 | 説明 | 例 |
---|---|---|
++ | インクリメント | a++ または ++a |
— | デクリメント | a-- または --a |
配列
配列の宣言と初期化
// 宣言方法1
データ型[] 配列名 = new データ型[要素数];
// 宣言方法2
データ型[] 配列名 = {値1, 値2, 値3, ...};
例:
int[] numbers = new int[5]; // 5要素のint配列
numbers[0] = 10;
numbers[1] = 20;
// ...
String[] names = {"Alice", "Bob", "Charlie"}; // 初期化と同時に代入
配列の操作
int[] nums = {10, 20, 30, 40, 50};
// 要素へのアクセス
int first = nums[0]; // 10
nums[1] = 25; // 20を25に変更
// 配列の長さ
int length = nums.length; // 5
// 配列のループ処理
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
// 拡張for文(for-each)
for (int num : nums) {
System.out.println(num);
}
文字列(String)操作
JavaのStringクラスは文字列を操作するための豊富なメソッドを提供しています。
基本的な文字列操作
String str1 = "Hello";
String str2 = "World";
// 文字列の結合
String combined = str1 + " " + str2; // "Hello World"
// 文字列の長さ
int length = combined.length(); // 11
// 部分文字列の取得
String sub = combined.substring(6); // "World"
String sub2 = combined.substring(0, 5); // "Hello"
// 文字列の比較
boolean isEqual = str1.equals("Hello"); // true
boolean isEqualIgnoreCase = str1.equalsIgnoreCase("hello"); // true
int compareResult = str1.compareTo("Hello"); // 0 (等しい場合)
// 文字列の検索
int index = combined.indexOf("World"); // 6
boolean contains = combined.contains("lo W"); // true
// 文字列の分割
String[] parts = combined.split(" ");
// parts[0] = "Hello", parts[1] = "World"
// 文字列の置換
String replaced = combined.replace("World", "Java"); // "Hello Java"
StringBuilderクラス
大量の文字列操作が必要な場合、StringBuilderを使用すると効率的です。
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
String result = sb.toString(); // "Hello World"
型変換
自動型変換(拡大変換)
小さい型から大きい型への変換は自動的に行われます。
int i = 100;
long l = i; // intからlongへ自動変換
double d = l; // longからdoubleへ自動変換
明示的型変換(縮小変換)
大きい型から小さい型への変換にはキャストが必要です。
double d = 100.04;
long l = (long)d; // 100に切り捨て
int i = (int)l; // 100
文字列と数値の変換
// 文字列から数値へ
String numStr = "123";
int num = Integer.parseInt(numStr);
double d = Double.parseDouble("3.14");
// 数値から文字列へ
String s1 = Integer.toString(123);
String s2 = Double.toString(3.14);
String s3 = "" + 456; // 簡易的な方法
よくあるエラーとデバッグ
コンパイルエラー
文法違反など、コンパイル時に検出されるエラー。
例:
int x = 10
// セミコロンがないためエラー
ランタイムエラー
プログラム実行中に発生するエラー。
例:
int[] arr = new int[5];
System.out.println(arr[10]); // ArrayIndexOutOfBoundsException
論理エラー
プログラムが意図した通りに動作しないが、エラーは発生しない。
デバッグの基本
- エラーメッセージをよく読む
- スタックトレースを確認する
- デバッガを使用する(IDEのデバッグ機能)
- プリントデバッグ(System.out.printlnで変数の値を確認)
練習問題
理解を深めるための練習問題をいくつか紹介します。
問題1: 基本的な計算
2つの数値を受け取り、その和、差、積、商を計算して表示するプログラムを作成してください。
問題2: 偶数奇数判定
ユーザーから整数を入力してもらい、その数が偶数か奇数かを判定するプログラムを作成してください。
問題3: FizzBuzz
1から100までの数字を表示するプログラムを作成してください。ただし、3の倍数の場合は「Fizz」、5の倍数の場合は「Buzz」、3と5の倍数の場合は「FizzBuzz」と表示してください。
問題4: 配列操作
10個の整数を格納できる配列を作成し、1から10までの数字を代入してください。その後、配列の内容を逆順にして表示してください。
次のステップ
Javaの基本構文とデータ型を理解したら、次のトピックに進みましょう:
- オブジェクト指向プログラミング - クラスとオブジェクト、継承、ポリモーフィズムなど
- 例外処理 - try-catchブロック、例外の種類と処理方法
- コレクションフレームワーク - List, Set, Mapなどのデータ構造
- ファイル入出力 - ファイルの読み書き方法
- マルチスレッドプログラミング - 並行処理の基本
さらに学ぶためのリソース:
まとめ
この記事では、Javaプログラミングの基礎となる構文とデータ型について詳しく解説しました。ポイントをまとめます:
- Javaプログラムはクラスとメソッドで構成される
- Javaには8つのプリミティブ型と参照型がある
- 変数は使用前に宣言し、必要に応じて初期化する
- 演算子を使用して様々な計算や操作ができる
- 制御構造でプログラムの流れをコントロールする
- 配列や文字列を効果的に操作する方法を理解する
- 型変換は自動的または明示的に行う
Javaは強力な言語であり、これらの基本をしっかり理解することで、より複雑なプログラムを作成するための土台が築けます。練習問題に取り組み、実際にコードを書いてみることが上達への近道です。Happy coding!