Java Basic try catch文 〜Step1_3_3〜

try catch文

入出力や様々なところでエラーハンドルを
行うために使用します。

実際には、どんな例外も受け取るExceptionクラスを使用しても良いのですが、個別に例外をキャッチするとエラーハンドルがやりやすいと思います。

try{処理}catch(例外の種類){エラー処理}のようにcatchの部分にキャッツする例外を記述します。

見やすくするとこんな感じ

スクリーンショット 2018-10-21 18.44.41.png

サンプルコードはこちら

例1: 標準入力を受け取るのに例外が投げられる可能性がある時

// try部分に例が発生するメソッド処理を記載するtry {

   System.in.read(b);

} catch(IOException e) {

   // 例外が起きた時にはキャッチ文ところで処理

   e.printStackTrace();

}

キャッチする例外を分けたい場合は
対応する例外クラスがJavaAPIにあるのでそれをキャッチするように
します。
例2: 例外を別々に受け取る

// 5バイト(5文字)分
byte[] b = new byte[5];

try {

   // 入出力の例外を投げる

   System.in.read(b);

  // 文字列を受け取る

  String result = new String(b);

  // 文字列に'a'が見つからない場合

 if (result.indexOf("a") == -1) {

     // 例外を投げる

    throw new Exception("入力違反です");
  }

} catch(IOException ie) {

   // 初めに標準入力の例外を受け取る様にする

   ie.printStackTrace();

} catch(Exception e) {

   // 自分で投げる例外をキャッチ
 
   e.printStackTrace();

}

ちなみに例外を扱う方法は他にもあって
メソッドで「例外をなげますよ」と指定する方法があります。

// Exceptionを投げる可能性があるメソッドを示す

public void testException() throws Exception {

  // 何かの処理

}

この時にはtry catch文は記載する必要がありませんが
このメソッドを呼び出す側がtry catchする必要があります。

そして、以下の様な場合はmainメソッドで例外を検知できません。

public static void main(String[] args) {

   testPrint();

}


/**

 * メインメソッドから直接(クラスをnew しないで)呼び出す時

 * はメソッドの修飾子に「static」をつける

 */

public static void testPrint() {

   try {

      throw new Exception("必ず例外を投げます");

   } catch(Exception e) {

     e.printStackTrace();

   }

}

呼び出し元に例外を検知させたくない場合に
上記の様な書き方を行います。

関連ページ

  1. 標準入力(コンソールからの入力)<System.inクラスについて>
  2. サンプル実装〜コンソールゲーム〜
  3. Java Basic インターフェース・抽象クラスの作り方
  4. Java Basic クラスとは〜Step2_1〜

 


Java Basic While文 〜 Step1_3_2〜

while文の書き方

1: while文の書き方

while(ループする条件) {
// 処理
}

2: 「ループする条件」について

例1

int i = 0;
while( i < 3) {
// 処理
}
上記の「i < 3」の部分が条件になり、日本語に訳すと
「iが3より小さい間」という意味になり
「while(i < 3)」は「iが3より小さい間ループする」
という意味になる。

「条件」部分(i < 3)に関して、真偽値(True, Flase)のページで解説しています。

例2

int i=0;
while(true) {
// 処理
}
例2の場合は条件の部分が「true」になっています。
条件の部分はtrueの間ループするので
→「i < 3」=> trueの場合が例1

例2の場合はずっとtrueなので「無限ループ」になります。
無限ループの場合、「break」文がないとPCが固まって
しまうので注意が必要です。

例3 do while文

int i = 0;
do {
// 処理
} while(i < 4);

条件が下の部分に来ています。

サンプルコードはこちら

 






Java Basic for文 〜Step1_3_1〜

イントロダクション

ひと通り、変数の扱いなど理解したら今度は、ループや条件分岐などを理解します。

ここら辺の文法を理解したらロジックを組むのが楽しくなると思います。

for文

いきなりですが、for文についてやります。※バグが入っております。それはどこでしょうか?

public static void main(String[] args) {
   // String型の配列を初期化
   String[] moji = {"abc", "def", "ghi"};
   // コンソール出力する変数
   String result = "";
   /* 【書き方】
    * for( 初期値; ループ条件; ループするときの処理) {
    *     // 何かの処理
        * }
    */
   for( int i = 0; i < 4; i++) {
      result += moji[i];
   }
   System.out.println("配列を繋げると: " + result);
}

初めにString型の配列を初期化しています。
ループして表示するために変数を用意しました。
そして、コンソール出力用の変数「result」
for文を開始いたします。

for文の文法

上記のソース部分にも記載しましたが、一応
1行大枠のみを記載すると以下のようになります。
for( .... ) { /* 処理 */}

「for(」に続き
「int i = 0」の部分では使用する変数を初期化しています。
「i < 4」はループ条件、「i」が4より小さいときループします。
「i++」はfor文の中上の「/* 処理 */」の部分を一周したら行う処理です。

一部分だけだとわかりづらいのでまとめます。
下のような処理があったとして。。。

サンプルコードと内訳

for( int i = 0; i < 4; i++) {
    System.out.println("Hello World=" + i);
}

int 型の変数「i」を0で初期化して「i」が4より小さい間
「Hello World」に「i」の値を付け足した文字を
コンソールに出力します。
1回目のループは、「i」が1なので「Hello World1」が表示され
2回目のループは、「i」が1なので「Hello World2」が表示される



となります。
そして、コンソール出力をした後に「i++」の処理が走ります。
「i++」→「i」をインクリメントする=「i」に1を追加する
→ i = i + 1;
それから、次のループ処理を行う。。。

ざっと、コードを書いてみました。こんな流れになります。
サンプルコードはここからダウンロードしてください。