JavaのScannerクラスとcloseメソッドを完全解説!初心者でもわかる標準入力の使い方
生徒
「Javaでキーボードから文字を入力したいときは、どうすればいいんですか?」
先生
「JavaではScannerクラスを使うと、キーボードから文字や数字を入力することができます。」
生徒
「なるほど。入力できるのはわかりました。でも、入力が終わったあとって何かやる必要があるんですか?」
先生
「良いところに気づきました。入力が終わったら、使い終わったScannerオブジェクトはcloseメソッドで閉じるのが基本です。では詳しく説明していきましょう。」
1. Scannerクラスとは何か?
JavaのScannerクラスは、ユーザーがキーボードから入力した文字列や数字などを読み取るための便利なクラスです。java.utilパッケージに含まれており、標準入力(キーボード)から値を取得するためによく使われます。
初心者向けのJavaプログラムでは、名前を入力して表示したり、年齢を入力して処理をしたりする場面でよく使われます。
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で使える主な入力メソッド
Scannerクラスには、さまざまな種類のデータを入力できるメソッドが用意されています。たとえば、以下のようなメソッドがあります。
nextLine():文字列の1行全体を読み取るnextInt():整数を読み取るnextDouble():小数を読み取る
それぞれの入力形式に応じてメソッドを使い分けることが大切です。
4. closeメソッドの役割とは?
closeメソッドは、Scannerなどのリソースを使い終わったときに、後片付けとして呼び出すメソッドです。
Scannerクラスは内部で標準入力(System.in)を使用していますが、プログラムが終了していなくても、必要がなくなったときに明示的にcloseメソッドを呼ぶことで、リソースを開放することができます。
特にファイルやネットワークなど、外部リソースを使う場合には、closeメソッドの呼び出しは重要です。
5. Scannerのcloseは毎回必要なのか?
コンソール入力に使ったScannerオブジェクトに対してcloseを必ず呼ぶべきかどうかは、実は意見が分かれるところです。というのも、System.inはプログラム全体で共有される入力ストリームなので、closeすると他の場所でSystem.inが使えなくなることがあります。
そのため、小さなプログラムではcloseを省略しても大きな問題は起きません。ただし、Javaの基本ルールとしてcloseを呼ぶ習慣を身につけておくと良いでしょう。
6. closeしないとどうなる?
Scannerをcloseしないまま放置すると、リソースが解放されないままになり、メモリの無駄遣いやエラーの原因になることがあります。
たとえば、ファイルやネットワーク接続を扱うときには、closeを忘れるとファイルがロックされたままになったり、接続が切れないまま残ったりすることがあります。
したがって、使い終わったリソースはしっかりcloseするようにしましょう。
7. Scannerとcloseメソッドを使った実践例
では、Scannerとcloseメソッドを組み合わせて、複数のデータを入力するプログラムを見てみましょう。
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.まとめ
ここまで、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するようにします!」
先生
「素晴らしい心がけです。次は他の入力方法や例外処理についても学んでいきましょう。」