ヤマムギ

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変数がカプセル化を破壊しているといえる
@yamamanx

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

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

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

 - Java, study , ,

ad

ad

  関連記事

JAWS-UG Osaka 第15回勉強会 AWS Summit Tokyo 2016 アップデート追っかけ会

「JAWS-UG Osaka 第15回勉強会 AWS Summit Tokyo …

実録 JAWS DAYS 2017 ~RoadTrip,スタッフ,ハンズオンメンターで参加しまして~

今年もJAWS DAYSにいってまいりました。 RoadTripの話 去年に引き …

LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン (1)LambdaからSlackへ通知する1

作る部分 SlackのWebURLを確認する Slackでチームを作成してbot …

「第14回RxTStudy(Redmine勉強会)」に行ってきました

土曜日の真っ昼間に半分以上が初参加者さんで80席が満席。 それだけRedmine …

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

練習問題2日目。 同じ問題にひっかかる。つまづく。 集中力が足りない。 途中から …

JAWS DAYS 2018の1日前に名古屋にいました「JAWS-UG名古屋 AWS勉強会 JAWS DAYS 2018前夜祭」

仕事の都合でJAWS DAYS 2018の前日は名古屋にいました。 宿泊地はお店 …

「IoT縛りの勉強会/SIer主催版 SIerIoTLT vol4」に行ってきました

「IoT縛りの勉強会/SIer主催版 SIerIoTLT vol4」に行ってきま …

Developers Summit 2018 「Spinnakerで実現するデプロイの自動化」を聞きました

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

Alexa Day 2018で「Alexa はどこにでも。AVSが開くAlexa Enabled なライフスタイル」を聞きました

photo by 金春さん スピーカーはオランダから一時帰国中の伊東のともさん …

Developers Summit 2018 「将棋プログラムPonanzaにおける強化学習、ディープラーニングとその先」を聞きました

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