Java入門
Java言語2 | Java言語4

3. Java入門3

入出力
  •  Java言語もC言語同様、キーボードから文字を入力することが可能です。
    ですが、C言語のscanf()関数のようなメソッドは存在しません。
    Javaの入出力は非常に汎用的で(それが、逆に欠点にもなりえますが・・・)
    キーボードからの入力といっても、様々なアプローチが考えられます。
    (この点はC言語とは大きく違うJavaの特徴の一つだと思います。)

    まずは、標準入力としてSystemクラスのSystem.inを使用します。
  
例題
  • コンソール画面で入力した文字をそのまま出力するプログラムを作成して下さい。
  
解答と解説
  • import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class InputTest1 {
    public static void main(String[] args){
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);

    System.out.println("何か文字を入力して下さい。");
    try {
    String inputStr = br.readLine();
    System.out.print("入力された文字は「");
    System.out.print(inputStr);
    System.out.println("」です。");
    } catch (IOException e) {
    e.printStackTrace();
    } finally{
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    try {
    isr.close();
    } catch (IOException e) {
    e.printStackTrace();

    }
    }
    }
    }

    System.inが入力ストリームとなるため、System.inを使用したBufferedReaderを
    作成しています。BufferedReaderを使用する利点として、1行単位の読み込みに
    対応しています。BufferedReader#readLine()にて1行単位に読み込み、print()にて
    出力しています。
    try-catch-finally節に関しては後述の「例外と例外処理」で説明しています。

    どのクラスのなんのメソッドを使用するか様々な選択がありますので、
    色々のクラスを使用し実行結果を見比べて下さい。

    上記をふまえて、以下の問題を行ってください。
  
演習問題
  • 10. BufferedReaderを使用せず例題の条件でプログラムを作成して下さい。
    追加条件:改行コードが入力されたら入力終了と判断すること。
    ヒント:InputStreamReader#read()を使用する。


    11. 国の名前を入力すると首都名を表示するプログラムを作成してください。
    首都
    アメリカ合衆国ワシントンD.C.
    フランスパリ
    中国北京
    韓国ソウル
    フィリッピンマニラ
    日本東京

    ただし、上記のデータを配列に入れて、その配列をループで検索する
    ようにしてください。
  
例外と例外処理
  •  例外(Exception)とは、プログラムを実行した際に発生するエラーのことを言います。 簡単な例をあげると、数値を0で割ったり、配列の範囲外を参照しようとすると例外になります。
    このような例外に対応することを例外処理といいます。例外処理に対応していないと異常終了となります。

    例外処理の方法としては2種類の方法があります。

    1. try-catch-finally節
    2. throws節

    1. try-catch-finally節とは
     例外が発生しそうな処理をtry{...}に記述し、例外発生時に処理することを
    catch{...}に記述し、正常時例外時ともに処理することをfinally{...}に記述します。
    前述の「標準入力」の例題にてtry-catch-finally節を使用していますので、
    説明します。
     try{...}内のreadLine()メソッドが例外を発生させる可能性がある処理となります。
    catch{...}ではIOExceptionを例外オブジェクトとして受け取ります。
    例題では受け取った例外オブジェクトのエラー内容を出力しています。
    finally{...}では入力ストリームのクローズ処理を行っています。
    クローズ処理は正常時、例外時とも行わないといけない処理であるため、
    finally{...}に記述しています。
    2. throws節とは
     Javaでは例外が発生したメソッド内でtry-catch節を発見できない場合、
    try-catch節を求めてメソッド呼び出し元を逆に捜しに行きます。
    このとき各メソッドでは、発生した例外のtry-catch節をメソッド呼び出し元へ
    捜しに行くことを明示的に示す必要があります。
    その時にthrowsを使用します。

    void methodA(){
    try {
    methodB();
    } catch(FileNotFoundException e) {
    System.err.println(e.getMessage());
    } finally {
    System.out.println("MethodA was finished");
    }
    }

    void methodB() throws FileNotFoundException {
    FileReader exFile = new FileReader("exFile.txt");
    }


    methodA()より、methodB()を呼び出しています。methodB()では、
    FileNotFoundException例外が発生する可能性のある処理を行っていますが、
    try-catch節を書いていません。代わりにメソッド名の横に、

    throws FileNotFountException

    という記述があります。この記述が上記に書いてある、「発生した例外の
    try-catch節をメソッド呼び出し元へ探しに行くことを明示的に示す」という
    部分になります。

    methodA()では、try-catch節にて、FileNotFoundExceptionをcatchし、発生した
    エラーメッセージを出力しています。

    FileNotFoundException : 指定されたファイルが存在しない場合に発生します。



    <次回は「Java入門4」です。>
  
  
Java言語2 | Java言語4