ヤマムギ

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 クラウドプラクティショナー」という本を書きました。

【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。

【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル」という本を書きました。

 - Java, study , ,

ad

ad

  関連記事

ヤマムギvol.5 「BI ファーストステップ ~re:dash , PowerBI , Google Data Studio , Wave~」を開催しました

僭越ながら主催運営していますヤマムギの第5回目勉強会「BI ファーストステップ …

IoTセミナー in おおさか「IoTで変わる!企業と働き方」に行ってきました

これからの企業と働き方 ~IoT・AIが創造する未来~ さくらインターネット株式 …

JINS MEME DEVELOPER HANDS-ON #5に行ってきました

世界初、自分を見るアイウェアの「JINS MEME」のSDK勉強会に行ってきまし …

「kintone Café 大阪 Vol.8 〜夏の事例祭り!〜」に行ってきました

「kintone Café 大阪 Vol.8 〜夏の事例祭り!〜」に行ってきまし …

家族目線(HVC-C2W)SDKサンプルコードを実行してみました(iOS編)

オムロンさんの家族目線(HVC-C2W)SDKサンプルコードを実行してみました。 …

GW勉強会を開催しました ~「AWSではじめるLinux入門ガイド」出版記念~

2020年ゴールデンウィークの5/2~5/6の午前に連続勉強会を開催しました。 …

「kintone Café 大阪 Vol.17 〜 kintoneと連携するスマホアプリを作ってみよう! 〜」会場スポンサー初体験!

kintone Café 大阪で弊社の会場を使ってもらいました。 この会社に来て …

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

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

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

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

Developers Summit 2018 「「技術内閣制度」2年間やってきて得られた事とこれから ~開発チーム横断での技術課題解決、技術力強化、エンジニア文化醸成」を聞きました

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