Java超|クラスライブラリのしくみと使い方

すべての道具を自分で作らなくていい。Javaのクラスライブラリを使えば、用意された便利な部品を組み合わせて、プログラムの世界を大きく広げられます。

ここまでの学習では、自分でクラスを作る方法を学んできました。

クラスは設計図です。
その設計図からオブジェクトを作り、フィールドに情報を持たせたり、メソッドで処理を行ったりできました。

ドラゴンボールの世界観でたとえると、Saiyan クラスはサイヤ人戦士の設計図です。
そこから悟空やベジータのような戦士オブジェクトを作り、それぞれに名前、戦闘力、気の量、流派の印、流派名を持たせることができました。

ここから先は、その考え方をもう一歩広げます。

Javaでは、自分で作ったクラスだけでなく、最初から用意されている便利なクラスも使えます。

文字を扱うクラス。
入力を受け取るクラス。
数値を変換するクラス。
日付や時刻を扱うクラス。
画面に表示するためのクラス。

こうした便利なクラスの集まりを、クラスライブラリといいます。

ドラゴンボールでたとえると、クラスライブラリは未来の戦士管理本部が用意してくれている道具箱のようなものです。

スカウター。
通信端末。
戦闘力記録台帳。
修行データ管理装置。
時刻管理パネル。
任務用のホログラム画面。

このような道具が、あらかじめ整理されているイメージです。

すべての道具を毎回自分で作る必要はありません。
必要な場面で、用意された道具を選んで使えるようになることも、Javaの大切な力です。Javaでは、自作クラスだけでなく、System、String、Integer、Scanner などの標準クラスを利用して、入力、出力、文字列処理、数値変換などを行えます。

クラスライブラリとは何か

クラスライブラリとは、すでに用意されている便利なクラスの集まりです。

これまでの学習では、自分で Saiyan クラスを定義し、そこから goku や vegeta のようなオブジェクトを作って使う流れを学びました。

たとえば、Saiyan クラスを作り、戦士の名前、戦闘力、気の量、流派情報を扱うような形です。

ただ、実際の開発では、必要な機能を毎回すべて自分で作るわけではありません。

たとえば、次のような機能は、多くのプログラムで何度も使われます。

よく使う機能
文字列を扱う文字をつなぐ、長さを調べる
入力を受け取るキーボードから文字を読む
数値を変換する文字列を整数に変える
画面に表示するメッセージを出力する
日付を扱う今日の日付を取得する

こうした処理を毎回ゼロから作るのは大変です。

そこでJavaでは、よく使う機能がクラスとしてあらかじめ用意されています。
それらを必要に応じて呼び出して使うことで、効率よくプログラムを作れます。

ドラゴンボールでたとえると、任務のたびにスカウターや通信端末、修行記録台帳を自作するのではなく、戦士管理本部が用意した道具を受け取って使うようなものです。

道具がすでに整っているから、戦士は任務そのものに集中できます。

Javaでも同じです。

クラスライブラリがあるから、開発者は作りたい処理の本体に集中しやすくなります。

クラスライブラリは手抜きではなく、部品を活かす考え方

クラスライブラリを使うというと、自分で作っていないから手抜きなのでは、と感じる人もいるかもしれません。

でも、そうではありません。

クラスライブラリを使うことは、すでに整理された部品を活かして、より実用的なプログラムを組み立てることです。

すべてを自分で作る場合と、クラスライブラリを使う場合を比べると、次のような違いがあります。

観点すべて自分で作る場合クラスライブラリを使う場合
開発の手間多くなりやすい少なくしやすい
コード量増えやすい抑えやすい
品質自分の設計力に大きく依存する整理された標準機能を使いやすい
保守性自作部分が多いと修正が大変役割が分かれ、見通しがよくなりやすい
学習の広がり仕組みの理解が深まる実践的な組み立て力が身につく

ドラゴンボールでたとえると、戦士が任務のたびにスカウターを一から作る必要はありません。

カプセルコーポレーションのような技術本部が用意した装置を正しく使うことも、戦士として大切な力です。

Javaでも同じです。

自分でクラスを作れることは大切です。
同時に、Javaが用意しているクラスを正しく選んで使えることも、とても大切です。

実はこれまでにもクラスライブラリを使っていた

クラスライブラリという言葉を聞くと、新しい学習内容のように感じるかもしれません。

でも、実はこれまでのJava学習でも、すでに何度もクラスライブラリを使っています。

たとえば、画面に文字を表示するときに使ってきたものがあります。

System.out.println("こんにちは");

ここに出てくる System は、Javaが用意しているクラスです。

また、文字列を表す String もクラスです。

String message = "修行開始";

さらに、文字列を整数に変換するときに使う Integer も、Javaが用意しているクラスです。

int power = Integer.parseInt("9000");

このように、自分でクラスを定義していない場面でも、すでにたくさんの既成クラスを利用しています。

使ってきたもの役割クラスライブラリとの関係
System画面出力などに使うJavaが用意しているクラス
String文字列を扱うJavaが用意しているクラス
Integer整数関連の処理を扱うJavaが用意しているクラス

ドラゴンボールでたとえると、これまで意識せずに戦士管理本部の道具を使っていたようなものです。

最初は画面に表示するための書き方として覚えていた System.out.println も、実はクラスライブラリの力を借りた処理だったのです。

クラスを作ることと、クラスを利用することは違う

Javaの学習では、クラスを作る力と、クラスを利用する力の両方が必要です。

自分でクラスを作るときは、新しい設計図を用意します。

一方で、クラスライブラリを使うときは、すでに用意されている設計図を使います。

作業内容
クラスを作る新しい設計図を自分で用意するSaiyan クラスを作る
クラスを利用するすでにある設計図を使うString や Integer を使う
オブジェクトを作るクラスから実体を作るnew Scanner(System.in)
クラスメソッドを使うオブジェクトを作らずに機能を呼び出すInteger.parseInt("9000")

ここを分けて考えられるようになると、コードを読んだときに判断しやすくなります。

この部分は自分で設計している。
この部分は用意されたクラスを利用している。
この部分はオブジェクトを作って使っている。
この部分はクラス名から直接メソッドを呼んでいる。

このように見分けられると、Javaのコードがかなり読みやすくなります。

ドラゴンボールでたとえると、自分で新しい修行メニューや戦士管理カードを設計する場面と、本部から支給されたスカウターや通信端末を使う場面は違います。

どちらも任務には必要ですが、役割が違うということです。

図:クラスライブラリは戦士管理本部の道具箱

この図が示していること

この図では、Javaのクラスライブラリを、未来の戦士管理本部が用意している道具箱として表しています。

自分で作る Saiyan クラスは、サイヤ人戦士を表す独自の設計図です。

一方で、String、Integer、System、Scanner、LocalDate などは、Javaがあらかじめ用意している便利なクラスです。

ここから分かるのは、Javaのプログラムは自分で作るクラスだけで完成するのではなく、標準で用意されたクラスも組み合わせて作っていくということです。

クラスライブラリは整理された道具箱

クラスライブラリは、開発者のための大きな道具箱のような存在です。

ただし、単なる寄せ集めではありません。
目的ごとに整理された部品の集まりです。

分野よく使う機能代表的なクラス
文字列処理文字をつなぐ、長さを調べるString
数値変換文字列を整数に変えるInteger
画面表示メッセージを表示するSystem
日付や時刻今日の日付を扱うLocalDate
入力処理キーボード入力を受け取るScanner

ドラゴンボールでたとえると、道具箱の中が目的別に整理されている状態です。

戦士管理本部の道具箱Javaのクラスライブラリ
通信端末入力や出力の機能
任務記録帳文字列や日付の処理
戦闘力変換装置数値変換
ホログラム表示装置画面表示
スカウター情報を読み取る機能

開発者は、何を一から作るべきか、何を既存の部品として使うべきかを考えながらプログラムを組み立てます。

これができるようになると、コードの量を減らしながら、実用的なプログラムを作りやすくなります。

具体例で見るクラスライブラリの利用

キーボードから文字を入力し、その文字数を表示するプログラムを見てみましょう。

import java.util.Scanner;

class Main
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);

        System.out.println("好きな修行メニューを入力してください。");

        String menu = scanner.nextLine();

        System.out.println("入力された修行メニューは " + menu.length() + " 文字です。");
    }
}

このプログラムでは、クラスライブラリのクラスがいくつも使われています。

コード中の要素役割種類
Scannerキーボード入力を受け取るクラスライブラリのクラス
String文字列を表すクラスライブラリのクラス
System画面出力に使うクラスライブラリのクラス
scanner.nextLine()1行分の文字列を読み込むインスタンスメソッド
menu.length()文字列の長さを調べるインスタンスメソッド

ここで注目したいのは、Scanner クラスの中身を自分で定義していないことです。

String クラスのしくみも、自分で作っていません。
System クラスも、自分で作っていません。

それでも、用意された使い方に従えば、入力、文字列の保存、文字数の取得、画面表示といった処理を行えます。

ドラゴンボールでたとえると、通信端末の詳しい製造方法や、戦闘力記録台帳の紙の作り方を知らなくても、決められた使い方を知っていれば任務で活用できるようなものです。

import は使いたい道具の場所を知らせる準備

クラスライブラリを使うときには、import が出てくることがあります。

先ほどの例では、次のように書いていました。

import java.util.Scanner;

これは、java.util というまとまりの中にある Scanner クラスを使います、という準備です。

Scanner はキーボード入力を受け取るために便利なクラスです。

ただし、プログラムの中で簡単に Scanner と書けるようにするには、どこにあるクラスなのかを知らせる必要があります。

そのために import を使います。

書き方意味
import java.util.Scanner;java.util の中にある Scanner を使う準備
Scanner scanner = new Scanner(System.in);Scanner オブジェクトを作る

ドラゴンボールでたとえると、任務前に、今回は戦士管理本部の入力用通信端末を使います、と申請しておくようなものです。

どの道具箱から、どの道具を使うのかを最初に伝えておくことで、任務中にその道具を名前だけで扱いやすくなります。

インスタンスメソッドとクラスメソッドを見分ける

クラスライブラリを使うときに大切なのが、インスタンスメソッドとクラスメソッドの見分け方です。

インスタンスメソッドは、オブジェクトを作ってから使うメソッドです。

たとえば、次の2つはインスタンスメソッドです。

scanner.nextLine();
menu.length();

scanner.nextLine() は、scanner という Scanner オブジェクトに対して呼び出しています。

menu.length() は、menu という String オブジェクトに対して呼び出しています。

呼び出し対象意味
scanner.nextLine()scanner オブジェクト入力を1行読み込む
menu.length()menu オブジェクトその文字列の長さを調べる

ドラゴンボールでたとえると、特定の通信端末に命令して文字を受け取ったり、特定の任務記録に対して文字数を調べたりするようなものです。

一方で、クラスメソッドはオブジェクトを作らなくても、クラス名から直接使えるメソッドです。

代表的な例が Integer.parseInt() です。

int power = Integer.parseInt("9000");

これは Integer クラスそのものに用意された機能を呼び出しています。

種類呼び出し方
インスタンスメソッドオブジェクト名.メソッド名scanner.nextLine()、menu.length()
クラスメソッドクラス名.メソッド名Integer.parseInt("9000")

この違いを見分けられるようになると、クラスライブラリのコードが読みやすくなります。

図:入力プログラムで使うクラスライブラリ

この図が示していること

この図では、Scanner、String、System などのクラスライブラリを組み合わせて、入力処理を行う流れを表しています。

import java.util.Scanner によって、Scanner を使う準備をします。
new Scanner(System.in) で入力を受け取るためのオブジェクトを作ります。
scanner.nextLine() で入力された1行を読み取り、String 型の menu に保存します。
menu.length() で、その文字列の長さを調べます。

ここから分かるのは、クラスライブラリを使うと、入力、保存、文字列処理、表示といった処理を、用意された部品を組み合わせて作れるということです。

クラスライブラリを使うとできることが広がる

クラスライブラリを使えるようになると、作れるプログラムの幅が一気に広がります。

これまで学んできた変数、条件分岐、繰り返し、クラスの基本に、クラスライブラリの力が加わると、より実践的な処理が書けるようになります。

できること具体例
入力を受け取るユーザーが入力した名前や数値を読み込む
文字列を加工するあいさつ文を作る、文字数を数える
数値を変換する文字列として入力された数値を整数に直す
日付を扱う今日の日付を表示する
複数データを扱うリストや配列で整理する

ドラゴンボールでたとえると、基本の戦闘技だけでなく、本部から支給された地図や通信端末、記録台帳を使えるようになることで、任務の幅が広がるようなものです。

クラスライブラリは、単なる知識の追加ではありません。
できることを増やしてくれる実践的な道具です。

自分で作るクラスと標準クラスを組み合わせる

実際のプログラムでは、自分で作るクラスと、Javaが用意している標準クラスを組み合わせて使います。

たとえば、サイヤ人戦士の情報を管理する Saiyan クラスを自分で作ったとします。

その中で、戦士の名前は String で扱うかもしれません。
入力には Scanner を使うかもしれません。
文字列として入力された戦闘力を整数に変換するために Integer を使うかもしれません。

担当役割
自分で作るクラスプログラム独自の役割を担当するSaiyan
クラスライブラリのクラス基本機能や共通機能を担当するString、Scanner、Integer

ドラゴンボールでたとえると、自分で設計するのは任務専用の戦士管理カードです。

一方で、文字を書く記録装置、数を変換する戦闘力計算装置、入力用の通信端末などは、本部から支給された道具を使います。

この組み合わせによって、効率よく、読みやすく、役割分担のはっきりしたプログラムが作れます。

サンプルプログラム:入力した戦士情報を表示する

ここでは、自分で作る Saiyan クラスと、クラスライブラリの Scanner、Integer、String を組み合わせてみます。

import java.util.Scanner;

class Saiyan
{
    private String name;
    private int power;
    private String styleMark;
    private String styleName;

    public Saiyan(String n, int p, String mark, String style)
    {
        name = n;
        power = p;
        styleMark = mark;
        styleName = style;
    }

    public void show()
    {
        System.out.println("戦士の名前は" + name + "です。");
        System.out.println("戦闘力は" + power + "です。");
        System.out.println("流派の印は「" + styleMark + "」です。");
        System.out.println("流派名は" + styleName + "です。");
    }
}

class Main
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);

        System.out.println("戦士の名前を入力してください。");
        String name = scanner.nextLine();

        System.out.println("戦闘力を入力してください。");
        String powerText = scanner.nextLine();
        int power = Integer.parseInt(powerText);

        System.out.println("流派の印を入力してください。例:亀");
        String styleMark = scanner.nextLine();

        System.out.println("流派名を入力してください。例:亀仙流");
        String styleName = scanner.nextLine();

        Saiyan warrior = new Saiyan(name, power, styleMark, styleName);

        warrior.show();
    }
}

このプログラムでは、自作クラスとクラスライブラリが役割分担しています。

要素役割
Saiyan戦士情報をまとめる自作クラス
Scannerキーボード入力を受け取るクラスライブラリ
String入力された文字列を扱うクラスライブラリ
Integer.parseInt文字列を整数に変換するクラスメソッド
System.out.println画面にメッセージを表示する処理

このように、自分で作った Saiyan クラスだけでは入力処理や数値変換までは担当しません。

入力は Scanner。
文字列は String。
数値変換は Integer。
戦士情報の管理は Saiyan。

このように役割を分けると、プログラム全体が読みやすくなります。

ドラゴンボールでたとえると、戦士の情報カードは自分で設計し、入力端末や戦闘力変換装置は本部の道具を使うような形です。

初心者がクラスライブラリを学ぶときの見方

クラスライブラリはとても数が多いです。

そのため、最初から全部を覚えようとしなくて大丈夫です。

大切なのは、よく使うクラスに慣れながら、使い方を読み取る力を育てることです。

新しいクラスに出会ったときは、次の視点で見ると理解しやすくなります。

見るポイント確認したいこと
クラス名何のためのクラスか
作り方new が必要かどうか
メソッド名どんな機能を使えるか
引数何を渡せばよいか
戻り値何が返ってくるか

たとえば Scanner なら、入力を受け取るためのクラスです。

new でオブジェクトを作り、nextLine() のようなインスタンスメソッドを呼び出して使います。

Integer.parseInt() なら、Integer クラスから直接呼び出すクラスメソッドです。

文字列を渡すと、整数が返ってきます。

このように、丸暗記するのではなく、

何のためのクラスか。
どう作るのか。
どのメソッドを使うのか。
何を渡すのか。
何が返るのか。

を確認していくことが大切です。

図:クラスライブラリを読むときの5つの視点

この図が示していること

この図では、クラスライブラリを学ぶときに見るべき5つの視点を整理しています。

クラス名を見て、何のためのクラスかを確認します。
作り方を見て、new が必要なのか、クラス名から直接使うのかを判断します。
メソッド名を見て、どんな機能を使えるのかを考えます。
引数を見て、何を渡せばよいのかを確認します。
戻り値を見て、何が返ってくるのかを確認します。

ここから分かるのは、クラスライブラリは全部を暗記するものではなく、仕様を見ながら使い方を読み取っていくものだということです。

クラスライブラリを学ぶ意味

クラスライブラリを学ぶ意味は、とても大きいです。

Javaを学ぶということは、文法を覚えるだけではありません。

学ぶこと内容
文法を知る変数、条件分岐、繰り返し、メソッドなどを理解する
クラスを設計する自分で必要なクラスを作れるようになる
既存クラスを活用するJavaが用意したクラスを正しく使えるようになる

この3つが結びつくと、実際に使えるプログラムを作る力が育っていきます。

ドラゴンボールでたとえると、戦士が強くなるには、自分の技を磨くだけでは足りません。

本部から支給されるスカウター、通信端末、記録台帳、戦闘力測定装置を理解し、任務に合わせて使いこなす力も必要です。

Javaでも、自分でクラスを書く力と、用意されたクラスを使う力の両方が大切です。

これからの学習につながる視点

これから先は、クラスライブラリに含まれるさまざまなクラスを少しずつ学んでいくことになります。

最初は知らないクラス名が増えて、少し戸惑うかもしれません。

でも、大丈夫です。

大切なのは、すべてを一度に覚えることではありません。

このクラスは何のためにあるのか。
オブジェクトを作って使うのか。
クラス名から直接使うのか。
どんなメソッドがあるのか。
何を渡すと、何が返るのか。

この視点で一つずつ見ていけば、クラスライブラリは少しずつ使える道具になっていきます。

クラスの基本を学んだ今だからこそ、クラスライブラリはただの便利機能ではなく、設計された部品の集まりとして見えてきます。

ドラゴンボールでたとえると、戦士管理本部の道具箱にある支給道具を、任務に合わせて選び、正しく使えるようになる段階です。

クラスライブラリを使えるようになると、Javaのプログラムは練習問題の枠を越えて、より実践的で便利なものへと広がっていきます。