memo

プログラミング備忘録

【Java】Java SE 11 Silver勉強中...

Java SE 11 Silverを勉強します。
実際受けるのはいつになることやら、早めに受けたいです。
最近某肺炎が流行っていてTOEICが中止になりそうなのですが、2020年2月中旬時点で中国本土はテストセンター停止のようでしたが、日本ではそのようなアナウンスはなかったです。
落ちた場合、再試出来るキャンペーン(第一回目の試験を2020年5月31日まで受ける必要がある)
https://www.pearsonvue.co.jp/Clients/Oracle/Special-Offers/Retake2020.aspx
があるので、3月末か4月末を目安に1回受験したいと思っています。(そう考えるとあまり時間ない)

今回もこちらのシリーズの本を使って勉強しています。

徹底攻略Java SE 11 Silver問題集[1Z0-815]対応

徹底攻略Java SE 11 Silver問題集[1Z0-815]対応

  • 作者:志賀 澄人
  • 出版社/メーカー: インプレス
  • 発売日: 2019/10/18
  • メディア: 単行本(ソフトカバー)


本題、Java 11は仕事では一切使っていないので(というかここ2年くらいはJavaしてない)初歩的なところから勉強する必要があるなと思っています。
今使用している黒本↑で4章まで終えたので、備忘録。

1章

  • エントリーポイント=処理を始めるメソッド

main()のこと

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	}

・public
・static
・void
・メソッド名 main
・引数 String型配列、もしくは可変長引数String型(下記でもOK)

	public static void main(String... args) {
		// TODO Auto-generated method stub
	}


2章

  • 「bool」はJavaにない。booleanはあるので同じように使う。
		boolean ss = true;
		System.out.print(ss);

trueと表示される。C++とかだったら、trueは1と表示されたような気もする。

  • 数値リテラルを見やすくする表記
		int a = 12_34;		// OK
		//int b = _12_34;	// コンパイルエラー
		//int c = 12_34_;	// コンパイルエラー

		long l = 99_99_99L;	// OK
		long m = 99_99_99_L;// コンパイルエラー

		int i = 0x52;		// OK
		int i2 = 0x_52;		// コンパイルエラー

		float f = 0.333F;	// OK
		//float f2 = 0_.333F;	// コンパイルエラー
		//float f3 = 0._333F;	// コンパイルエラー
		//float f4 = 0.333_F;	// コンパイルエラー

Java7から導入したらしいけど、私の部署では誰も使ってなかったから知らなかった。
・アンダーバーを最初と最後につけるとコンパイルエラーになる。
・記号のすぐ前、後もダメ

  • var

Java SE 8 Bronzeでは出題されなかったような気がします。
型推論を行うときに使用。Java SE 10から入ったらしい。

		// 下記は全部コンパイルエラー。
		var a;
		var b = null;
		var c = {1,2,3};

以下もコンパイルエラー。
・初期化を行うと型推論出来ない
・引数に使えない
・フィールド宣言に使えない(ローカル変数の宣言OK)

varによる型推論はコンパイル時に行われる。

  • 型変換 String

int等数値をString変換

		// String.valueOf
		int num = 123;
		String t = String.valueOf(num);
		String test = String.valueOf("Sa");// 意味があるのかわからないけどエラーにならない Saが入る

置換する

		// replaceAll
		String msg = "aaa bbb";
		System.out.println(msg.replaceAll("aaa", "ccc"));
		System.out.println(msg);

出力結果↓
ccc bbb
aaa bbb

該当文字の順番を返す、該当しなければ-1

		String msg = "aaa bbb";	
		System.out.println(msg.indexOf("bbbb"));
		System.out.println(msg.indexOf("bbb"));

出力結果↓

  • 1

4

文字を抜き出す

		String msg = "aaa bbb";
		System.out.println(msg.substring(1, 5));
		//System.out.println(msg.substring(10, 12)); // 10文字目ないので実行エラー

出力結果↓
aa b

先頭文字が一致するか

		String msg = "aaa bbb";
		System.out.println(msg.startsWith("aaa"));

出力結果↓
true

文字列連結

		String msg = null;
		String msg2 = "";
		msg += "null";
		msg2 += "null";
		System.out.println(msg);
		System.out.println(msg2);

出力結果↓
nullnull
null

  1. =するとき、文字列が連結する。参照持たないnullが+=するときに文字列に扱われる。

何も入れないで保持したいときは、とりあえず2行目みたいに宣言すればいいのかなあと思う。(実際どうしてるのかは知らない)

  • StringBuilder

こちらもJava SE 8 Bronzeでは出題されなかったような気がします。

public StringBuilder()
文字を持たず、初期容量が16文字である文字列ビルダーを構築します。

こちらどうやって使うねんという感じなくらいわからない。
後で調べる。


3章

  • {}がないif
		if(num==100)
			System.out.println("A");
		else if(10<num)
			System.out.println("B");
		else
		if(num==10)
			System.out.println("C");
		else
		if(num==10)
			System.out.println("D");

「徹底攻略Java SE 11 Silver問題集[1Z0-815]対応」p.78 部分抜粋

はい、私はこの書き方が本当に嫌いです。"C"が表示されます。
eclipseを開いて書いてみると、下記のように段落下げしてくれます。

		int num = 10;
		if(num==100)
			System.out.println("A");
		else if(10<num)
			System.out.println("B");
		else
			if(num==10)
				System.out.println("C");
			else
				if(num==10)
					System.out.println("D");

これならまあわかりやすいけど、やっぱり括弧があった方が私は好きなんですよね。
作ったものを他人が修正したり、引き継ぐことがありますし。

  • switch文

使える:
・int型以下の整数方、ラッパークラス
・文字、文字列
・列挙型 Enum

boolean、long、double、float使えない

  • 定数

final使う
const使えない


4章

  • do while()

if文と違って{}ないとコンパイルエラー。

  • ラベル

break、continueのとき制御を移す箇所を指定出来る。


勉強するよりまとめる方が面倒だった……( ^ω^)



参考:
StringBuilder (Java SE 11 & JDK 11 )