Javaの基本構文とデータ型

2025-08-01

はじめに

Javaは世界中で広く使用されているプログラミング言語で、その安定性と汎用性から企業システムやAndroidアプリ開発など様々な場面で活用されています。この記事では、Javaプログラミングを始めるにあたって必須となる「基本構文」と「データ型」について、詳細に解説します。

Javaを学ぶメリット:

  • オブジェクト指向プログラミングの基礎を学べる
  • プラットフォームに依存しない(Write Once, Run Anywhere)
  • 大規模なコミュニティと豊富な学習リソース
  • 求人数が多く、キャリアに有利

Java開発環境の準備

Javaの学習を始める前に、開発環境を整えましょう。

JDKのインストール

Java開発にはJDK(Java Development Kit)が必要です。最新版はOracle公式サイトからダウンロードできます。

統合開発環境(IDE)

初心者におすすめのIDE:

  1. Eclipse – 無料で利用可能な人気IDE
  2. IntelliJ IDEA Community Edition – 使いやすく強力な機能を備えた無料版
  3. NetBeans – 初心者向けのシンプルなインターフェース

Javaの基本構文

Hello Worldプログラム

Javaの基本構文を理解するために、伝統的な「Hello World」プログラムから始めましょう。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

このプログラムを分解して解説します:

  1. public class HelloWorld – クラス宣言。Javaではすべてのコードがクラス内に記述されます。
  2. public static void main(String[] args) – プログラムのエントリーポイント。実行時に最初に呼び出されるメソッドです。
  3. 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種類のコメントがあります:

  1. 単一行コメント: // コメント内容
  2. 複数行コメント:
   /* コメント内容
      複数行にわたる場合 */
  1. ドキュメンテーションコメント:
   /**
    * ドキュメンテーションコメント
    * クラスやメソッドの説明に使用
    */

Javaのデータ型

Javaのデータ型は「プリミティブ型」と「参照型」の2つに大別されます。

プリミティブ型(基本データ型)

Javaには8つのプリミティブ型があります:

データ型サイズ説明範囲
byte8ビット整数-128 ~ 127byte b = 100;
short16ビット整数-32,768 ~ 32,767short s = 10000;
int32ビット整数-2^31 ~ 2^31-1int i = 100000;
long64ビット整数-2^63 ~ 2^63-1long l = 100000L;
float32ビット単精度浮動小数点数約±3.4e+38Ffloat f = 3.14f;
double64ビット倍精度浮動小数点数約±1.8e+308double d = 3.141592;
char16ビットUnicode文字‘\u0000’ ~ ‘\uffff’char c = 'A';
boolean1ビット真偽値true/falseboolean flag = true;

参照型

プリミティブ型以外はすべて参照型です。主な参照型には以下があります。

  1. String – 文字列を扱うクラス
   String name = "Javaプログラマー";
  1. 配列 – 同じ型の複数の値を格納
   int[] numbers = {1, 2, 3, 4, 5};
  1. クラス – ユーザー定義型
// ユーザー定義型「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 + " 歳です。");
    }
}
  1. インターフェース – 抽象的な振る舞いを定義
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変数は再代入不可
特徴JavaJavaScriptPython
型の指定必須(静的型付け)不要(動的型付け)不要(動的型付け)
初期化なし使用ローカルでは不可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, StringPythonや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 = ba = b
+=a += ba = a + b
-=a -= ba = a - b
*=a *= ba = a * b
/=a /= ba = a / b
%=a %= ba = 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

論理エラー

プログラムが意図した通りに動作しないが、エラーは発生しない。

デバッグの基本

  1. エラーメッセージをよく読む
  2. スタックトレースを確認する
  3. デバッガを使用する(IDEのデバッグ機能)
  4. プリントデバッグ(System.out.printlnで変数の値を確認)

練習問題

理解を深めるための練習問題をいくつか紹介します。

問題1: 基本的な計算

2つの数値を受け取り、その和、差、積、商を計算して表示するプログラムを作成してください。

問題2: 偶数奇数判定

ユーザーから整数を入力してもらい、その数が偶数か奇数かを判定するプログラムを作成してください。

問題3: FizzBuzz

1から100までの数字を表示するプログラムを作成してください。ただし、3の倍数の場合は「Fizz」、5の倍数の場合は「Buzz」、3と5の倍数の場合は「FizzBuzz」と表示してください。

問題4: 配列操作

10個の整数を格納できる配列を作成し、1から10までの数字を代入してください。その後、配列の内容を逆順にして表示してください。

次のステップ

Javaの基本構文とデータ型を理解したら、次のトピックに進みましょう:

  1. オブジェクト指向プログラミング - クラスとオブジェクト、継承、ポリモーフィズムなど
  2. 例外処理 - try-catchブロック、例外の種類と処理方法
  3. コレクションフレームワーク - List, Set, Mapなどのデータ構造
  4. ファイル入出力 - ファイルの読み書き方法
  5. マルチスレッドプログラミング - 並行処理の基本

さらに学ぶためのリソース:

まとめ

この記事では、Javaプログラミングの基礎となる構文とデータ型について詳しく解説しました。ポイントをまとめます:

  1. Javaプログラムはクラスとメソッドで構成される
  2. Javaには8つのプリミティブ型と参照型がある
  3. 変数は使用前に宣言し、必要に応じて初期化する
  4. 演算子を使用して様々な計算や操作ができる
  5. 制御構造でプログラムの流れをコントロールする
  6. 配列や文字列を効果的に操作する方法を理解する
  7. 型変換は自動的または明示的に行う

Javaは強力な言語であり、これらの基本をしっかり理解することで、より複雑なプログラムを作成するための土台が築けます。練習問題に取り組み、実際にコードを書いてみることが上達への近道です。Happy coding!