久々に更新する&試験対策で気になったところとか

すっごい今更だけど、転職に伴って東京のどっかに引っ越しました。
生活は職場・筋トレ・勉強の三本柱でたまに楽器の練習するぐらいで、引っ越す前とそんな変わらない。

で、転職が決まってから2ヶ月間はニートを満喫してたので一日8時間とか勉強できてたけど、今はそんなに時間取れなくて未だにJava Silverも受験できずにいる。一応模試で及第点は超えたので覚悟を決めるだけっぽい。

試験対策を進めてて、今まで雰囲気で使ってたメソッドとか紛らわしい文法をつらつらまとめていく。

1.配列の要素に対して何も設定しないとnullで初期化される

NullPointerExceptionが送出されるのはnull値に対してメソッドを呼び出したり等、何らかのアクセスを試みたときなので、下記コードは実行時エラーとはならない。

public class Main {
	public static void main(String[] args) {
		String[] array = {"abcde", "fgh", "ijk"};
		String[] array2 = new String[3];
		int i = 0;
		try {
			for (String s : array) {
				array2[i] = s.substring(1, 4);
				i++;
			}
		} catch (Exception e) {
			System.out.println("Error");
		}
		//null値が格納されている配列に対して
		// for文を回しても例外は送出されず、nullが出力される
		for (String s : array2) {
			System.out.println(s);        
			// 出力結果
                        // Error bcd null null
		}
	}
}

2.mainメソッドがオーバーライドされていてもコンパイルエラーも例外も出ない

エントリーポイントは定義が決まっており、String型配列の引数のものが呼ばれる。

public class Main {
	public static void main(String[] args) {
		System.out.println("A");
		// 出力結果:A
	}
	public static void main(int[] args) {
		System.out.println("B");
	}
	public static void main(Object[] args) {
		System.out.println("C");
	}
}

3.親クラスに引数ありコンストラクタを定義した場合、デフォルトコンストラクタは実装されないため、子クラスで暗黙的にsuper()が実行されてしまったときコンパイルエラーとなる。

public class Sample {
	String name;
	int num;
	// 明示的にコンストラクタを記述してあるため、デフォルトコンストラクタが定義されない。
	public Sample(String name, int num) {
		this.name = name;
		this.num = num;
	}
}

class SubSample extends Sample {
	int price;
//	public SubSample (int price) {
//		this.price = price; 親クラスに引数なしコンストラクタが定義されてない場合、
//		暗黙的にsuper()が呼び出されたときにコンパイルエラーとなる。
//	}
	public SubSample (String name, int num, int price) {
		super(name, num);
//		this(price); super()とthis()はコンストラクタの一行目
	}
}

4.parsexxx()とvalueOf()の違い

parsexxx()は文字列を基本データ型に変換する。
valueOf()は文字列からラッパークラスのインスタンスを生成する。

public class Main {
	public static void main(String[] args) {
		String str = "10";
		String str2 = "TRUE";
		// parsexxx()...文字列を基本データ型に変換する
		// 下記では変換した後、ラッパークラスにautoboxingしている
		Integer a = Integer.parseInt(str);
		Boolean b = Boolean.parseBoolean(str2);
		// valueOf()...文字列からラッパークラスのインスタンスを生成する
		Integer c = Integer.valueOf(str);
		Boolean d = Boolean.valueOf(str2);
		// parsexxx()とvalueOf()は大文字・小文字の区別をしない
		System.out.println(a + ":" + b); // 10:true
		System.out.println(c + ":" + d); // 10:true
	}
}

最近は試験対策以外だと、基本情報をいい加減な気持ちで受けたら午後で玉砕したり、ラムダ式で適当な関数を作って遊んでたりしてた。あとそろそろ自宅PCにUbuntuとか入れたい。

全然時間取れなくてSQLとかシェルコマンドとか全くさわれてない。正直転職前の一日あたりの成長率が1だとしたら、今は一日0.02ぐらいしか新しい知見とか得られてない感覚がある。

退去エントリ

約4年半住んでたアパートから転職に伴って退去することになった。
大学入学時から実に8年以上一人暮らしを継続しているのだが、期間の割に生活の雑さは変わっていないので、いろいろまとめていきたい。

①掃除
とにかくズボラなので、掃除機が届かない・普段触らないところを徹底的に無視して生活した結果、引越し時の掃除で泣きを見ることになるのでしっかりやること。特に棚の上のホコリとかは掃除機でなくてもハタキで撫でるだけで全然違うので週一ぐらいでやりましょう。

②家具
そもそも家具を部屋に置きたくない。掃除しにくいのも引っ越しが辛いのも、全て家具のせいだと信仰してるので、不便さを感じるギリギリのラインまでものを減らしていきたい。どうしても常備しておかなきゃならないものは押入れに。毎日使うもの以外は全て視界に入らないようにしよう。
一時ミニマリズムが話題になったけど、あれは几帳面な人間のためのスタイルじゃない。モノを管理するのがだるいから全部捨てているだけだ。

③食事
サプリメント万歳。1日動けるだけのカロリーとブドウ糖が摂取できればなんでもいい。むしろ自分に必要な栄養だけ把握しておけば自然と食費が抑えられる。ドーパミンの分泌を食事に依存してしまうと肥満まっしぐらなので、他の要素で代替えするのがいいと思う。

④酒
宅飲みにはいい酒よりもいいグラスが必須。1本600円のテーブルワインでも、脚付きのグラスに注ぐだけで全然キレが違う。ましてや4000円以上のスコッチを紙コップで飲むなど、酒に対する冒涜と心得よ。あとは気分転換用にお気に入りのお店を4,5件作っておくと、家と会社以外にも拠点ができた感じで精神衛生上好ましい。

⑤音楽
近くにスタジオがあればいいというわけではない。退去前に住んでたところは近場にスタジオが3件もあり、3件とも最悪のドラムセットしか置いてなかったので、それだけで練習意欲が低下した。ちなみに転居先には2駅ほどで良さげなのがあるっぽいので期待したい。

書くのだるくなってきた
お疲れ様でした

f:id:mrbob403:20180829132139j:plain

このブログ、忘れかけてたけど雑記なので勉強以外のことも書こうと思う。

この二ヶ月、趣味の音楽についてはあんまり追求できてなくて、ずっといいなと思ったアルバムを繰り返し垂れ流すだけの日々だった。

七月の中旬にphaさんのこのツイートが目に止まり、アートワークスがドンピシャで速攻でApple Musicで落として聴き始めて依頼、すっかりアルバムの世界観にハマってしまった。


Sunny Day Service - I’m a boy【Official Video】

このころは四年ぶりに帰省して、やることもないので勉強に飽きたらぶらぶら地元のかつて歩いた道とかを散歩してばかりいた。
散歩と言っても、気温は30度を超えていて殆ど苦行のように日陰もない田舎道を彷徨っているばかりの目的もなにもないまさに徘徊であったのだけど。

征く当てのない放浪には聴いたことのない音楽がよく似合うと個人的に思っている。
好きな音楽というものは今の自分の生活とどこか繋がっていて、新しいバンドとかを聴き始めるのは全く新しい試みを始めるようで何だか気合が要るから疲れるのだ。

地元の生活圏内でなかったエリアとか、引っ越して間もない地域を徘徊するときは自分のバックグラウンドが一切通用しない、完全に自分対世界の感覚に陥る。
そういった瞬間だからこそ、こだわりとかしがらみを取り除いて、知らない音楽に挑める心構えができると思ってる。何よりそんな気分で聴いた音楽は自分の記憶に強く体験として結び付けられるのだ。

実際、サニーデイ・サービスの『Dance With You』を聴いたときは凄かった。気温30度の田舎道を散歩しているときに、熱射病に罹ったかのような判然としない脳裏に想像以上に刻まれてしまった。一曲目の「I'm a boy」の印象は、何だか爽やかなポップスだなぁと思った。

「いいアルバムだよね」「ですよね」みたいな感じで消費されてしかるべきだと思う。そんな風に聴かれても何もおかしくない。

自分がこのアルバムを知る切っ掛けになった記事
shiba710.hateblo.jp
にあるように、気を抜くとそのまま聴き流してしまいそうな空気感をもった印象を受けた。

でもそのときの自分の意識は熱中症寸前で、茹で上がった脳みそは次々繰り出される夢遊病のような歌詞と完全にリンクしてしまっていたのだ。


Sunny Day Service - セツナ【Official Video】

特にアルバム後半のこの曲が特に響いた。歌詞は情景描写だけで何一つ具体性を持たないし、リフは強烈だし、とにかく、きく。

そんな感じで、帰省からもどっていつもの生活を過ごすなかでも、あの強烈な体験を忘れられず、未だに同じアルバムを聴き続けている。
他のアルバムは聴いたのかと言われれば実はそんなでもないし、もっと言うなら同じアルバムの中でも曲名と内容が一致するかどうかも怪しい。ひどいありさまだ。

今でもアルバムを通して聴けば、ノスタルジーとも少し違う、夏草の匂いとか日光を照り返すアスファルトの感覚を完璧に思い出せる。その分、今住んでいるところとかこれから先の人生でも、どうも再現できそうにない体験と一緒に、この作品は結び付けられてしまったという感覚に陥ってしまった。

そういう自分自身の極めて個人的な体験とセットになった曲たちが今でも心の中でくすぶっている。いつか供養できる日が来るのだろうか。

Android Studioで遊んでいる

PCを新調したのでAVD(Android Virtual Device)がまともに動作するようになり、以降Android Studioで遊んでばかりいる(2日目)。

このAVDというもの、エミュレーターだけあって結構なメモリを食うので、適当な端末だとまともに扱えないし、一緒にChromeとか開いてるともう開発どころではなくなるわけです。

一時HTMLとかCSSを齧ってたおかげでレイアウト系の知識は割とするする吸収できてると思う。
ただ買った参考書が少し古かったみたいで(2015年初版)、Google I/O 2016で登場したConstraintLayoutの解説が一切載っていないためここは適宜保管していきたい。
ちなみにConstraintLayoutとはGUI部品をドラッグ・&・ドロップで追加した際に、画面の構成や他のGUI部品との位置関係を勝手に調節してくれる機能のことみたいです。
触った感じだとJava Swingのビジュアルエディタに近い。

いま適当に作ってるのはこんなの。
f:id:mrbob403:20180820192630j:plain

ボタンを押すとなんか起こる的なのを機能を確認しながら雑に追加していってる感じです。
この画像だと、BUTTON1を押したときに画面上部のテキストが"Hello Android!"なら"Hello User!"に書き換えて、逆も同様に動作するとかそんなんです。
解説してもしょうがないので特にまとめません。基本情報技術者試験はどっかいった

正規表現練習のためのクラスを作った

ここ数日ずっとJava Silverの対策というか、反復練習ばかりで何かを体系的にまとめることをしていなかった。

取り敢えず試験範囲の正規表現が今後とも使っていきそうなスキルの一つであると思ったので、手っ取り早く動作を確認できるようなクラスを作った。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
	public static void example1(String str, String reg) {
		String regex = reg;
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(str);
		System.out.print("指定した文字列は:");
		if (m.find()) {
			System.out.println("指定した正規表現とマッチします");
		} else {
			System.out.println("指定した正規表現とマッチしません");
		}
	}
}

このTestクラスのexample1メソッドの機能は、第一引数に渡した文字列が第二引数の正規表現パターンをクリアするかどうかを調べるものです。
多分調べればもっとなんか優秀な機能が見つかると思うんだけど、アウトプット大事ということで自作しました。

特に1,2行目のインポート文と6~8行目のMatcherクラスのインスタンス生成、及びそのインスタンスに対して10行目でfind()で検索をかけるあたりは殆ど定型文みたいなものだと解釈してるので、困ったらこの記事のことを思い出そうと思う。

あと今更ですがブログのコードに行番号を追加しました。

ダウンキャストについてのメモ

ずーっと保留にしてたダウンキャストへの理解が多少深まったのでメモ。

ダウンキャストした際、例外が出るパターンとそうでないパターンの判別がいまいちつかなかったので拙い解釈だが書く。

①例外出力あり

// ダウンキャスト(例外出力あり)
SuperClass sp = new SuperClass();
SubClass sb = (SubClass)sp;

SuperClassクラスのインスタンスをSubClass型にキャストすると、SuperClassクラスはSubClassクラスの差分を持たないため例外が送出される。

②例外出力なし

// ダウンキャスト(例外出力なし)
SuperClass sp = new SubClass();
SubClass sb = (SubClass)sp;

SubClassクラスのインスタンスをSubClass型にキャスト。変数spが指しているのはSubClassクラスのインスタンス(の参照値)なので、それをSubClass型として扱っても何の問題もないよねという話。

Qiitaとかteratailとかの説明を読んでも以前はさっぱりだったが、今自分でまとめても同じような説明になってしまった。
そういうことにしておきましょう。

Java Silver模擬試験チャレンジ一回目

結論から言うと玉砕しました。

48/77 ≒ 62/100 (合格ラインが65%)
試験時間150minに対し15min余らせて回答終了。

初学者にとって、紫本を一周しただけで及第点取れるほどぬるい難易度ではないことを実感。
あと問題一つ一つの密度というか割かれる労力が大きいので、後半に行くに連れて徐々に脳死状態に。
試験時間150minとか余裕でしょと思ってた自分が愚かでした。知識不足で分からない問題は何分あろうが解けません。

誤答した問題を見てみると、大体テキスト序盤の範囲ほど間違ってるっぽいので、単純に痴呆で落としてる点数もかなりあるはず。
実は黒本も既に入手しているので、このまま数をこなして知識の穴を埋めていきたいところ。

今回の点数はともかく、紫本を1週間で読破するぞ!という目標は達成したので、その分問題数をこなせる時間が確保できたのだと思いたい。

やっていきましょう。

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

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

オラクル認定資格教科書 Javaプログラマ Silver SE 8

オラクル認定資格教科書 Javaプログラマ Silver SE 8