カテゴリ: Java 更新日: 2025/06/16

JavaのScannerクラスとcloseメソッドを完全解説!初心者でもわかる標準入力の使い方

Scannerのcloseメソッド
Scannerのcloseメソッド

先生と生徒の会話形式で理解しよう

生徒

「Javaでキーボードから文字を入力したいときは、どうすればいいんですか?」

先生

「JavaではScannerクラスを使うと、キーボードから文字や数字を入力することができます。」

生徒

「なるほど。入力できるのはわかりました。でも、入力が終わったあとって何かやる必要があるんですか?」

先生

「良いところに気づきました。入力が終わったら、使い終わったScannerオブジェクトはcloseメソッドで閉じるのが基本です。では詳しく説明していきましょう。」

1. Scannerクラスとは何か?

1. Scannerクラスとは何か?
1. Scannerクラスとは何か?

JavaのScannerクラスは、ユーザーがキーボードから入力した文字列や数字などを読み取るための便利なクラスです。java.utilパッケージに含まれており、標準入力(キーボード)から値を取得するためによく使われます。

初心者向けのJavaプログラムでは、名前を入力して表示したり、年齢を入力して処理をしたりする場面でよく使われます。

2. Scannerクラスの基本的な使い方

2. Scannerクラスの基本的な使い方
2. Scannerクラスの基本的な使い方

Scannerクラスを使うには、最初にimport java.util.Scanner;と記述する必要があります。そして、newキーワードを使ってScannerオブジェクトを作成します。

その後、nextLine()nextInt()などのメソッドを使って、文字列や数値を読み取ります。


import java.util.Scanner;

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

        System.out.println("あなたの名前を入力してください:");
        String name = scanner.nextLine();

        System.out.println("こんにちは、" + name + "さん!");
        scanner.close();
    }
}

3. Scannerで使える主な入力メソッド

3. Scannerで使える主な入力メソッド
3. Scannerで使える主な入力メソッド

Scannerクラスには、さまざまな種類のデータを入力できるメソッドが用意されています。たとえば、以下のようなメソッドがあります。

  • nextLine():文字列の1行全体を読み取る
  • nextInt():整数を読み取る
  • nextDouble():小数を読み取る

それぞれの入力形式に応じてメソッドを使い分けることが大切です。

4. closeメソッドの役割とは?

4. closeメソッドの役割とは?
4. closeメソッドの役割とは?

closeメソッドは、Scannerなどのリソースを使い終わったときに、後片付けとして呼び出すメソッドです。

Scannerクラスは内部で標準入力(System.in)を使用していますが、プログラムが終了していなくても、必要がなくなったときに明示的にcloseメソッドを呼ぶことで、リソースを開放することができます。

特にファイルやネットワークなど、外部リソースを使う場合には、closeメソッドの呼び出しは重要です。

5. Scannerのcloseは毎回必要なのか?

5. Scannerのcloseは毎回必要なのか?
5. Scannerのcloseは毎回必要なのか?

コンソール入力に使ったScannerオブジェクトに対してcloseを必ず呼ぶべきかどうかは、実は意見が分かれるところです。というのも、System.inはプログラム全体で共有される入力ストリームなので、closeすると他の場所でSystem.inが使えなくなることがあります。

そのため、小さなプログラムではcloseを省略しても大きな問題は起きません。ただし、Javaの基本ルールとしてcloseを呼ぶ習慣を身につけておくと良いでしょう。

6. closeしないとどうなる?

6. closeしないとどうなる?
6. closeしないとどうなる?

Scannercloseしないまま放置すると、リソースが解放されないままになり、メモリの無駄遣いやエラーの原因になることがあります。

たとえば、ファイルやネットワーク接続を扱うときには、closeを忘れるとファイルがロックされたままになったり、接続が切れないまま残ったりすることがあります。

したがって、使い終わったリソースはしっかりcloseするようにしましょう。

7. Scannerとcloseメソッドを使った実践例

7. Scannerとcloseメソッドを使った実践例
7. Scannerとcloseメソッドを使った実践例

では、Scannercloseメソッドを組み合わせて、複数のデータを入力するプログラムを見てみましょう。


import java.util.Scanner;

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

        System.out.print("名前を入力してください:");
        String name = scanner.nextLine();

        System.out.print("年齢を入力してください:");
        int age = scanner.nextInt();

        System.out.println("ようこそ、" + name + "さん。あなたは" + age + "歳ですね。");

        scanner.close();
    }
}

このようにScannerを使えば、ユーザーから簡単に名前や年齢などの情報を取得することができます。そして最後にscanner.close()でリソースを開放しています。

8.まとめ

8.まとめ
8.まとめ

ここまで、JavaのScannerクラスとcloseメソッドの基本的な使い方について学習してきました。初心者の方がJavaでキーボード入力を扱うときには、まずこのScannerクラスを正しく理解することが重要です。Scannerを使えば、文字列や数値の入力を簡単に取得できるので、入門者にとっては非常に便利なクラスです。

また、入力処理が終わったあとはcloseメソッドを使ってリソースをしっかりと解放することが推奨されます。これは、Javaにおけるプログラミングのマナーともいえる習慣であり、リソースリークを防ぐために大切なことです。特に複雑なアプリケーションや長時間動作するプログラムでは、closeを正しく使うことで安定した動作につながります。

Javaでは、Scannerを使ってユーザーの名前や年齢、住所などを入力し、それを画面に表示するようなインタラクティブな処理がよく行われます。実際のアプリケーション開発でも、ログイン画面や検索フォームなど、ユーザー入力は欠かせない要素です。そうしたときに、Scannerの使い方をしっかり理解しておくことは、非常に大切な基礎知識になります。

ここでは、nextLine()を使って文字列を取得する方法や、nextInt()で数値を取得する方法、そしてそれらの入力が終わったあとでscanner.close()を呼び出す方法など、基本的な構文やポイントを具体的に紹介しました。特にJava初心者にとっては、コードを読むだけでなく、実際に手を動かして動作を確認することが上達の鍵になります。

Javaの標準入力を使う方法としては他にもBufferedReaderなどがありますが、Scannerは簡単に扱える上に、複数の型に対応しているという利点があります。今後Javaの学習を進めていく中で、入力処理を正確に行う力は必ず役に立つでしょう。

最後にもう一度、Scannerクラスの基本的な使い方とcloseメソッドを使ったプログラムを紹介します。


import java.util.Scanner;

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

        System.out.print("好きな食べ物を入力してください:");
        String food = scanner.nextLine();

        System.out.print("その食べ物を食べる頻度(回数)を入力してください:");
        int times = scanner.nextInt();

        System.out.println("あなたは" + food + "を週に" + times + "回食べるんですね!");

        scanner.close();
    }
}
先生と生徒の振り返り会話

生徒

「今回のScannerクラスって、文字や数字を入力できるから、すごく便利だと思いました!」

先生

「そうですね。Javaでユーザーから情報を受け取るときには欠かせない存在です。」

生徒

「あと、closeメソッドでしっかり終わりにするのも大事なんですね。今までは特に気にしてなかったかも…」

先生

「はい。小さなプログラムでもcloseを意識する癖をつけておくと、将来的に大きなシステムを作るときに役立ちますよ。」

生徒

「なるほど。これからは入力のあとにcloseするようにします!」

先生

「素晴らしい心がけです。次は他の入力方法や例外処理についても学んでいきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

JavaでScannerクラスを使うには何をimportすればいいですか?

JavaでScannerクラスを使用するには、java.utilパッケージに含まれているため、import java.util.Scanner; と記述する必要があります。このimport文を記載しないとコンパイルエラーになります。

Javaでキーボードから数値を入力したいときはどうすればいいですか?

Javaでキーボードから整数を入力する場合はScannerクラスのnextInt()メソッドを使います。ユーザーが入力した数値を取得して、int型の変数に代入することができます。

Scannerクラスで文字列を入力するときはどのメソッドを使えばいいですか?

JavaのScannerクラスで文字列の1行を入力したい場合は、nextLine()メソッドを使います。これはEnterキーが押されるまでの文字列を1行まるごと取得できます。

JavaのScannerクラスのcloseメソッドは必ず使うべきですか?

JavaではScannerクラスで使用した入力リソース(System.in)を解放するために、プログラムの最後でcloseメソッドを呼ぶのが推奨されます。ただし、System.inを共有する他の処理がある場合は注意が必要です。

Scannerクラスのcloseメソッドを忘れるとどんな問題がありますか?

Scannerクラスのcloseメソッドを呼ばずに放置すると、リソースが解放されずにメモリリークやリソースのロックが発生する可能性があります。特に長時間動作するJavaアプリケーションでは深刻な問題になることもあります。

Javaで複数の入力を順番に受け取るにはどうすればいいですか?

JavaのScannerクラスでは、nextLine()やnextInt()を順番に呼び出すことで、文字列や数値を順番に取得することができます。たとえば名前を取得したあとに年齢を取得するというような使い方ができます。

Java初心者にとってScannerクラスはなぜ便利なのですか?

Scannerクラスは使い方がシンプルで、文字列や数値の入力を簡単に処理できるため、Javaの初心者でもすぐにキーボード入力を使ったプログラムを作ることができるからです。標準入力の基本を学ぶのに最適です。

JavaのScannerクラスで小数を入力するには何を使いますか?

Javaで小数を入力したい場合は、ScannerクラスのnextDouble()メソッドを使用します。このメソッドはユーザーが入力した小数点を含む数値を読み取ることができます。

JavaでScannerクラスを使ったあとに他の入力処理を続けたい場合、closeしない方がいいのですか?

Javaでは一度System.inをcloseすると再度開くことができません。そのため、他の入力処理を続ける必要がある場合はScannerをcloseせずに使い続ける、もしくは適切なタイミングでcloseするように設計する必要があります。

Javaでユーザーから名前や年齢などを聞いて表示するサンプルプログラムは初心者に向いていますか?

はい、とても向いています。JavaでScannerクラスを使って名前や年齢を入力し、それを出力するプログラムは、標準入力の基礎と文字列処理、数値処理を一度に学べるため、初心者にとって最適な練習題材です。

ScannerクラスとBufferedReaderの違いは何ですか?

Scannerクラスは文字列・数値・小数など複数の型に対応しており、初心者にも使いやすいのが特徴です。BufferedReaderはより高速ですが、基本的には文字列としてしか受け取れないため、入力されたデータを数値に変換するには別途処理が必要です。
カテゴリの一覧へ
新着記事
Springのクロスフィールド検証とは?複数項目の整合性チェックをやさしく解説
JavaのBufferedWriterクラスを完全解説!初心者でもわかるファイル書き込み
Spring Frameworkでセッション管理をする!@SessionScopeの使い方を覚えよう!
JavaのArrayIndexOutOfBoundsExceptionを完全解説!初心者でも理解できる配列エラー処理
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.3
Java&Spring記事人気No3
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.4
Java&Spring記事人気No4
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.5
Java&Spring記事人気No5
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.6
Java&Spring記事人気No6
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.7
Java&Spring記事人気No7
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定
No.8
Java&Spring記事人気No8
JSPでCSSやJSを読み込む基本!外部ファイルのパス指定に注意しよう