ヤマムギ

growing hard days.

*

Java SE 7 Silver 試験対策セミナーで模擬問題の解説をマークダウンでメモってみた

      2015/03/29


Java SE 7 Silver 試験対策セミナーに行って、模擬問題にチャレンジしてきました。
問題の解説をAtomを使ってマークダウンでメモしてたので、JetPack Markdownを使ってそのまま記事にしてみました。
※あくまでもメモなので、なんとなくで読んでもらえば幸いです。

スコープ

  • nameはkenパッケージ内のすべてのクラスが直接アクセスして編集可能
アクセス修飾子 クラス コンストラクタ メンバ変数 メソッド 説明
public o o o o どのクラスからでも
protected x o o o このクラスを継承したサブクラス、もしくは同一パッケージ内のクラスから
デフォルト(指定なし) o o o o 同一パッケージ内のクラスからのみ
private x o o o 同一クラス内からのみ

※リフレクションを使用した場合を除く

  • BitUtilsクラスのprocessメソッドはアクセス修飾子がpraivateなのでSomeAppクラスからは使用できない

継承と修飾子

  • サブクラスExtendedAで明示的にスーパークラスClassAの引数1つのコンストラクタを呼び出しているのでエラーにはならない。
  • コンストラクタにはpublic,protected,privateなどすべてのアクセス修飾子を指定可能
  • private ExtendedAコンストラクタは自クラス内からしか参照できない。ExtendedA extは自クラス内なのでOK
  • protected ClassAコンストラクタは同じパッケージかこのクラスを継承したクラスからしか参照できない。super(numberOfInstances)はサブクラスなのでOK。

}

class C4 extends B4{
public AImpl doit(){

}
[/crayon]

  • class C4のpublic Object execute()でコンパイルエラーとなる
  • クラスBのexecute()メソッドをオーバーライドしようとしているが戻り値がStringではなくObjectになっている
  • メッソドのオーバーライドを行う際、戻り値はスーパークラスの同名メソッドと同じかサブクラスでないとならない

  • インターフェースは多重継承ができるのでOK(クラスはNG)
  • interface C のmethod1()は同じpublic(公開範囲は狭くなっていない)なので問題ない
  • interface C のmethod1(int x)は新たに抽象メソッドを定義しているだけ
  • String s=”yo”はインターフェース内の変数宣言なのでコンパイル時に暗黙的に定数扱い(public static final)となる

  • Employee.getSalesAmount()メソッドのアクセス修飾子はprotected
  • protectedよりも狭くない公開範囲のprotected,publicであればOK
  • private,修飾子なしはNG

  • extends(クラスの継承)とimplements(インターフェース)ではextends(クラスの継承)を先に記載する
  • 抽象クラス.メソッド,インターフェース.メソッドといった書き方はない

コンストラクタ

  • Hello();でコンパイルエラーとなる
  • 引数ありのコンストラクタから自クラスのコンストラクタを通常のメソッドのように呼び出す事はできない
  • 上記の中で呼び出す場合はthis();をpublic Hello(int value){のすぐ後で呼び出す必要がある

  • Treeクラスにはコンストラクタがないのでコンパイル時に引数のないコンストラクタが生成される
  • TreeクラスはPranetクラスのサブクラスなので最初にsuper(引数)がない場合、自動的にスーパークラスのデフォルトコンストラクタが実行される
  • Planetクラスには引数ありのコンストラクタがあるので、引数なしのデフォルトコンストラクタが生成されないのでコンパイルエラーとなる
  • なので、PlanetクラスにPublic Planet(){this(“fern”)}などを追加すればコンパイルできる

  • Employeeクラスのコンストラクタ内でコンパイルエラーとなる
  • EmployeeクラスはPersonクラスのサブクラス
  • Employeeクラスでは明示的なスーパークラスのコンストラクタ呼び出しがないのでPersonクラスのデフォルトコンストラクタPerson()が呼び出される
  • Personクラスには引数ありのコンストラクタを書いてしまっているのでデフォルトコンストラクタPerson()が生成されない
  • Employeeクラスのコンストラクタの最初でsuper(id);のように呼びだせばOK

  • SalesPersonクラスのコンストラクタ内でコンパイルエラーとなる
  • SalesPersonクラスはEmployeeクラスのサブクラス
  • SalesPersonクラスでは明示的なスーパークラスのコンストラクタ呼び出しがないのでEmployeeクラスのデフォルトコンストラクタEmployee()が呼び出される
  • Employeeクラスには引数ありのコンストラクタが定義されてしまっているのでデフォルトコンストラクタが生成されない
  • SalesPersonクラスのコンストラクタの最初でsuper(name,baseSalary);のように呼び出せばOK

例外

[/crayon]

  • NullPointerExceptionは非チェック例外なのでメソッドにthrowsの指定がなくても必ず呼び出し元に送出される。
  • なので、an error occurredが表示される

  • throws句があるのに例外処理がないからコンパイルエラーとなる
  • throws句はサブクラスで指定しなくてもオーバーライドされる

}

class Tester3{
public void method(){
A3 a = new A3();
a.method1();
}
}

public class TestException extends Exception{

}
[/crayon]

  • 非チェック例外はコンパイル時にチェックされない
  • チェック例外はコンパイルエラーになる
  • method1()はRuntimeExceptionをthrowしている
  • RintimeExceptionは非チェック例外、なので呼び出し元で例外処理がなくてもいい
  • TestExceptionはExceptionのサブクラスとして作ったものなので例外処理が必要

キャスト

  • ((Base1)s).FOOはクラス変数sをキャストしてBASE1型にしているので、BASE1クラスのFOO変数の”foo”が表示される。

  • Exception in thread “main” java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Stringが発生する
  • Arrays.sortでArraysにキャストしようとしてExceptionが発生
  • Arraysは基本データ型(Integer,BooleanはOK)しか扱えない
  • Stringは参照型

  • ストリング変数strに数字42を+=演算子で加えた結果strは42042となる

ループとラベル

}
}
[/crayon]

  • 出力は24
  • continueは処理を1週とばす
  • break zはzラベルのついたfor文を終了する

カプセル化

  • 属性と操作を一体化させて表現することをカプセル化と呼ぶ
  • 実データであるインスタンス変数が他クラスからむやみに変更される事を防ぐために一般的にインスタンス変数はprivate指定が推奨
  • メソッドはpublic指定が推奨
  • public指定されているownerName変数がカプセル化を破壊しているといえる

最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

@yamamanx

開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー2年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。

このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。

また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。

 - Java, study , ,

ad

ad

  関連記事

「JAWS-UG名古屋 re:Inventに行ったつもりのLT大会&忘年会」でLTしてきました

大阪から東京へ自転車で向かう初日に名古屋でJAWS-UGでLT大会に参加しようと …

Developers Summit 2018 「Kubernetesを用いた最強のマイクロサービス環境をGKEで実現しよう」を聞きました

以下は、思ったことや気になったことをメモしていますので、必ずしも登壇者の発表内容 …

kintone Café 大阪 vol.11で登壇しました

kintone Café 大阪 vol.11「kintoneと色々つないでみる …

LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン (5) LINEからの投稿へ返信と登録処理

目次 作る部分LINEのトークンの確認docomo雑談APIキーの確認StepF …

Java SE 7 Silver受験直前 練習問題総確認 2015/2/14

カーリング中継見ながら、iTunesシャッフルでかけながら、練習問題。 集中って …

「JP_Stripes (Stripe ユーザーグループ) Tokyo Vol. 6 — Stripeの使いドコロを知る」に行ってきました

「JP_Stripes (Stripe ユーザーグループ) Tokyo Vol. …

Java SE 7 Silver対策勉強をしながらメモ 2015/1/31

本日は演算子。 休日出勤が土日と続きますがこういう時ほど続ける! いつものごとく …

DevLove関西 「プロジェクトマネジメントの勘所」に行ってきました

DevLove関西 「プロジェクトマネジメントの勘所」に行ってきました。 サイボ …

「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Microservices × Serverless On AWS」で運営と懇親会LTをしてきました

「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Micr …

「kintone Café 大阪 Vol.15 〜kintone Night Café 2017 〜」でLTしてきました

「kintone Café 大阪 Vol.15 〜kintone Night C …