勉強メモ@プロJava/その7
再帰とスタック & 第12章 入出力と例外
再帰 練習問題p.228
次のforループでの処理を再帰に書き換えてみましょう。
「プロになるJava」より
gihyo.jp
for(inti=3;i>0;i){ System.out.println(i); }
public class RecursionExercise { static void loop(int i){ if (i == 0){ return; } System.out.println(i); i--; loop(i); }
▼コンソール
うむ!ここからは先は【第12章 入出力と例外】に突入や!
疑問メモ
少し調べてわからなければ後で調べることにして先に進む、1周目だから^^;
1.ポート番号は65535までの数字が使えるとのことだが、この数字なに?(p.243)
⇨16bit、つまり2バイトまで使えるということ。1023まで用途決まっているということだがこれは10bitまでは定員が埋まっているということ。
しかし1023も何に使われているのか?
⇨いくつか関連サイトを閲覧したが、こちらを読む読む
⇨どうして「未割り当て」とか「非公式」とかあるんや?てかなんで10bit分を「予約枠」にした?キリよく1バイトにすれば良かったんじゃ?
これどういう順番で割り当ててる??
⇨学習優先度としてはまずこの「プロJava」を進めたい。沼にはまりそうなので、もう今は気にせず進める…
try-with-resources メモ
IntelliJ IDEA上で、例外が途中で発生しようが必ずcloseする必要があるものを作り出している箇所にカーソルを当てて「option + return」すると、
「try-with-resourcesで囲む」という選択肢が出てくる!
囲んでくれた!↓
try (Socket soc = server.accept()) { System.out.println("connect from " + soc.getInetAddress()); InputStream input = soc.getInputStream(); System.out.println(input.read()); input.close(); soc.close(); }
「必ず閉じなければいけない」のは入力ストリームも同じなので、追加。
try (Socket soc = server.accept(); InputStream input = soc.getInputStream()) { System.out.println("connect from " + soc.getInetAddress()); System.out.println(input.read()); input.close(); soc.close(); }
うむ!
練習問題p.248
SimpleServerを起動せずにSimpleClientを実行すると例外java.net.ConnectExceptionが発生します。例外処理をして「サーバーが起動していません」とメッセージを出すようにしてみましょう。
▼SimpleServer.java
package projava; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class SimpleServer { public static void main(String[] args) throws IOException { var server = new ServerSocket(1600); System.out.println("Waiting..."); try (Socket soc = server.accept(); InputStream input = soc.getInputStream()) { System.out.println("connect from " + soc.getInetAddress()); System.out.println(input.read()); } } }
▼SimpleClient.java(書き換え前)
package projava; import java.io.IOException; import java.io.OutputStream; import java.net.ConnectException; import java.net.Socket; public class SimpleClient { public static void main(String[] args) throws IOException { try (var soc = new Socket("localhost", 1600); OutputStream output = soc.getOutputStream()) { output.write(234); } } }
▼コンソール
▼SimpleClient.java(書き換え後)
package projava; import java.io.IOException; import java.io.OutputStream; import java.net.ConnectException; import java.net.Socket; public class SimpleClient { public static void main(String[] args) throws IOException { try (var soc = new Socket("localhost", 1600); OutputStream output = soc.getOutputStream()) { output.write(234); } catch (ConnectException e){ e.printStackTrace(); System.out.println("サーバーが起動していません"); } } }
▼コンソール
うむ!!
ちなみに、macOSで「option + command + /」で、複数行まとめてコメントアウト&解除できるとな✨
ちょっとずつでも、これからも進めてこ〜
これから数日間は大自然と交流タームなので笑、またその後に更新する_φ( ̄ー ̄ )