java.langパッケージ:Javaの超基本をおさえよう!

docs

前回はJavaの全体像や開発環境について話したけど、今回はもっとJavaの「核」に迫ってみよう! Javaを書いてると、意識してもしなくても必ずお世話になるのが「java.langパッケージ」なんだ。

「パッケージって何?」って思うかもしれないけど、簡単に言うと「関連するクラスをまとめた箱」みたいなもの。その中でもjava.langは、Javaを使う上で絶対に必要な、基本的なクラスたちが集まってる超重要なパッケージなんだよ。しかも、このパッケージのクラスは、わざわざimport文を書かなくても自動的に使えるようになる、特別な存在なんだ!

じゃあ、このjava.langパッケージの中にどんな重要なクラスがいるのか、いくつかピックアップして見ていこう!

1. Objectクラス:全てのクラスのお父さん!

まず最初に紹介するのがObjectクラス。これはね、Javaに存在する全てのクラスの親にあたる、まさに「お父さん」みたいな存在なんだ。君が自分で作ったクラスも、Javaが元々持ってるクラスも、みーんな最終的にはObjectクラスの子孫なんだよ。

「それがどうしたの?」って思うかもしれないけど、Objectクラスが持ってるメソッドは、全てのクラスで使えるってことなんだ。例えば、こんなメソッドがあるよ。

  • equals():2つのオブジェクトが等しいかどうかを比較する
  • toString():オブジェクトの文字列表現を返す
  • hashCode():オブジェクトのハッシュコードを返す

特にtoString()メソッドはよく使うよ。例えば、こんなコードを見てみて。

Java

class Dog {
    String name;
    Dog(String name) {
        this.name = name;
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog("ポチ");
        System.out.println(myDog); // これ、どうなると思う?
    }
}

このコードを実行すると、たぶんDog@1a2b3c4dみたいな、ちょっと意味不明な文字列が出てくると思うんだ。これはObjectクラスのtoString()メソッドが呼び出されて、オブジェクトのメモリ上のアドレスとかが表示されてるんだね。

vscodeで実行した結果

でも、多くの場合は「このオブジェクトってどんな情報を持ってるの?」って知りたいよね? そんな時にtoString()メソッドをオーバーライド(上書き)してあげると、もっと分かりやすい情報にできるんだ。

Java

class Dog {
    String name;
    Dog(String name) {
        this.name = name;
    }

    @Override // これがオーバーライドだよ!
    public String toString() {
        return "犬の名前:" + name;
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog("ポチ");
        System.out.println(myDog); // 今度はどうかな?
    }
}

今度は「犬の名前:ポチ」って表示されるはず! こうやって、Objectクラスのメソッドをうまく使う(あるいは上書きする)ことで、プログラムをもっと便利にできるんだ。

vscodeで実行した結果

2. Stringクラス:文字を扱うならコレ!

Javaで文字(文字列)を扱うなら、間違いなくStringクラスのお世話になるよ。これはもう、Javaプログラミングの日常に溶け込んでるレベルで使うクラスなんだ。

「え、文字ってcharじゃないの?」って思ったかな? charは1文字を表すんだけど、Stringは複数の文字、つまり「文字列」を扱うんだ。

Stringクラスには、文字列を操作するための便利なメソッドがたくさん用意されてるよ。いくつか例を見てみよう!

Java

public class StringExample {
    public static void main(String[] args) {
        String greeting = "こんにちは、Java!";
        String name = "森田";

        // 文字列の結合
        String fullMessage = greeting + "私の名前は" + name + "です。";
        System.out.println(fullMessage); // こんにちは、Java!私の名前は森田です。

        // 文字列の長さを取得
        System.out.println("メッセージの長さ:" + fullMessage.length()); // 21

        // 特定の文字が含まれているかチェック
        System.out.println("Javaが含まれているか:" + fullMessage.contains("Java")); // true

        // 文字列の置換
        String replacedMessage = fullMessage.replace("Java", "プログラミング");
        System.out.println("置換後:" + replacedMessage); // こんにちは、プログラミング!私の名前は森田です。

        // 大文字・小文字変換
        String upperCaseText = "hello".toUpperCase();
        System.out.println("大文字:" + upperCaseText); // HELLO

        // 文字列が等しいか比較(超重要!)
        String s1 = "Apple";
        String s2 = "Apple";
        String s3 = new String("Apple"); // こうすると別のオブジェクトになる!

        System.out.println("s1 == s2:" + (s1 == s2)); // true(同じリテラルなので同じオブジェクトを指すことが多い)
        System.out.println("s1 == s3:" + (s1 == s3)); // false(別のオブジェクト)
        System.out.println("s1.equals(s3):" + s1.equals(s3)); // true(内容が同じなのでtrue)

        // ⭐ポイント! 文字列の比較は「==」じゃなくて「.equals()」を使おう!
        // 「==」はオブジェクト自体が同じかどうかを比較するけど、
        // 「.equals()」は文字列の内容が同じかどうかを比較するんだ。
        // 内容が同じでも、メモリ上では別々の場所に存在することもあるからね。
    }
}

どう? Stringクラス、めちゃくちゃ便利でしょ? 文字列操作はJavaプログラミングの基本中の基本だから、いろんなメソッドを試してみてね。

vscodeで実行した結果

3. 数値のラッパークラスたち(Integer, Double, Booleanなど):基本型をオブジェクトに!

Javaには「基本型(プリミティブ型)」っていう、数値とか文字とか真偽値とか、シンプルなデータ型があるのは知ってるかな? 例えば、int(整数)、double(小数)、boolean(真偽)とかだね。

これらは便利なんだけど、実はオブジェクトじゃないんだ。だから、Objectクラスが持ってるメソッドを使ったり、コレクション(次回以降に話すかも!)に格納したりすることができないんだ。

そこで登場するのが「ラッパークラス」たち! 基本型をオブジェクトとして扱えるように「包んで(ラップして)」くれるクラスなんだ。java.langパッケージには、それぞれの基本型に対応するラッパークラスが用意されてるよ。

  • intInteger
  • doubleDouble
  • booleanBoolean
  • charCharacter
  • longLong
  • floatFloat
  • byteByte
  • shortShort

例を見てみよう!

Java

public class WrapperClassExample {
    public static void main(String[] args) {
        int primitiveInt = 100;
        // intをIntegerオブジェクトに変換(オートボクシング)
        Integer wrappedInt = primitiveInt; // あるいは Integer.valueOf(primitiveInt);

        double primitiveDouble = 3.14;
        Double wrappedDouble = primitiveDouble;

        boolean primitiveBoolean = true;
        Boolean wrappedBoolean = primitiveBoolean;

        System.out.println("Integerオブジェクト:" + wrappedInt);
        System.out.println("Doubleオブジェクト:" + wrappedDouble);
        System.out.println("Booleanオブジェクト:" + wrappedBoolean);

        // ラッパークラスから基本型に戻す(アンボクシング)
        int unboxedInt = wrappedInt; // あるいは wrappedInt.intValue();
        System.out.println("基本型に戻したint:" + unboxedInt);

        // ラッパークラスの便利なメソッド
        String numString = "123";
        int parsedInt = Integer.parseInt(numString); // 文字列からintに変換!
        System.out.println("文字列から変換したint:" + parsedInt);

        String doubleString = "45.67";
        double parsedDouble = Double.parseDouble(doubleString); // 文字列からdoubleに変換!
        System.out.println("文字列から変換したdouble:" + parsedDouble);
    }
}

Java 5以降では、「オートボクシング」と「アンボクシング」っていう機能が追加されたから、基本型とラッパークラスの変換を意識しなくても、勝手にやってくれることが多いんだ。すごく便利だよね!

特に、文字列から数値に変換するparseInt()parseDouble()メソッドは、ユーザーからの入力(ほとんどが文字列でしょ?)を数値として扱いたいときに、めちゃくちゃ役に立つから覚えておくといいよ!

vscodeで実行した結果

4. Systemクラス:標準入出力の窓口!

Systemクラスは、標準入出力(画面への表示やキーボードからの入力)やシステム関連の操作を行うためのクラスだよ。これも、普段から何気なく使ってるはず!

一番よく使うのは、これじゃないかな?

Java

System.out.println("Hello, Java!"); // 画面に文字を表示!

このSystem.outは、画面(標準出力)を表すオブジェクトなんだ。そして、println()メソッドが、そこに文字列を表示してくれるんだね。

他にも、こんな使い方もできるよ。

Java

public class SystemExample {
    public static void main(String[] args) {
        // 現在時刻をミリ秒単位で取得(パフォーマンス計測なんかに使うよ)
        long startTime = System.currentTimeMillis();
        System.out.println("処理開始時刻:" + startTime + "ミリ秒");

        // 少し処理をしてみる
        for (int i = 0; i < 100000; i++) {
            String s = "dummy" + i;
        }

        long endTime = System.currentTimeMillis();
        System.out.println("処理終了時刻:" + endTime + "ミリ秒");
        System.out.println("かかった時間:" + (endTime - startTime) + "ミリ秒");

        // プログラムを終了させる(あまり使わない方がいいけど、知っておいて損はない)
        // System.exit(0); // 0は正常終了、それ以外は異常終了を示すことが多い
    }
}

System.inを使えば、キーボードからの入力も受け取れるんだけど、それはまた別の機会に詳しく話すね。今のところは、画面表示にSystem.out.println()をめちゃくちゃ使うってことを覚えておけばOK!

vscodeで実行した結果

5. Mathクラス:数学的な計算ならおまかせ!

Mathクラスは、その名の通り、数学的な計算をするためのクラスだよ。円周率とか、平方根とか、三角関数とか、プログラムで数学的な処理をしたいときに使うんだ。

このクラスのメソッドは、ほとんどがstaticメソッドなんだ。staticって何?って思うかもしれないけど、簡単に言うと「そのクラスの名前を使って直接呼び出せるメソッド」ってこと。つまり、Mathクラスのオブジェクトを作らなくても、すぐに使えるってことだね。

例を見てみよう!

Java

public class MathExample {
    public static void main(String[] args) {
        // 円周率π
        System.out.println("円周率π:" + Math.PI);

        // 絶対値(マイナスの値をプラスにする)
        System.out.println("-10の絶対値:" + Math.abs(-10)); // 10

        // 平方根(ルート)
        System.out.println("16の平方根:" + Math.sqrt(16)); // 4.0

        // べき乗(2の3乗とか)
        System.out.println("2の3乗:" + Math.pow(2, 3)); // 8.0

        // 最大値・最小値
        System.out.println("10と20の大きい方:" + Math.max(10, 20)); // 20
        System.out.println("10と20の小さい方:" + Math.min(10, 20)); // 10

        // ランダムな数(0.0以上1.0未満のdouble値)
        System.out.println("ランダムな数:" + Math.random());
        // 1から10までのランダムな整数
        int randomNum = (int)(Math.random() * 10) + 1;
        System.out.println("1から10までのランダムな整数:" + randomNum);
    }
}

数学的な処理が必要になったら、まずはMathクラスに目を通してみるといいよ! ほとんどの基本的な計算は、ここで事足りるはずだからね。

vscodeで実行した結果

まとめ:java.langはJavaの土台!

今回はjava.langパッケージの主要なクラスについて見てきたけど、どうだったかな?

  • Object:全てのクラスの親!基本的なメソッドを提供。
  • String:文字列を扱うならコレ!文字列操作の強い味方。
  • Integerなどラッパークラス:基本型をオブジェクトとして扱う。文字列⇔数値変換に便利。
  • System:画面表示やシステム操作の窓口。
  • Math:数学的な計算はおまかせ!

これらのクラスは、Javaプログラミングをする上で、意識せずとも当たり前のように使ってるものばかりなんだ。それくらい、Javaの「土台」として重要な役割を担っているんだね。

まずはそれぞれのクラスが「何のためにあるのか」をざっくり理解して、例を動かしてみることから始めてみてね。慣れてくると、自然と使いこなせるようになるはずだよ!

これからもJavaの面白い世界を一緒に探求していこう! 次回もお楽しみに!

これまでの記事もチェックしてみてね!

ToolDocs | 様々なツールや技術情報を紹介します

コメント

タイトルとURLをコピーしました