Java SE 7 Silver 試験対策セミナーで模擬問題の解説をマークダウンでメモってみた
2015/03/29
Java SE 7 Silver 試験対策セミナーに行って、模擬問題にチャレンジしてきました。
問題の解説をAtomを使ってマークダウンでメモしてたので、JetPack Markdownを使ってそのまま記事にしてみました。
※あくまでもメモなので、なんとなくで読んでもらえば幸いです。
スコープ
1 2 3 4 5 |
package ken; class Target{ public String name = "hello"; } |
- nameはkenパッケージ内のすべてのクラスが直接アクセスして編集可能
アクセス修飾子 | クラス | コンストラクタ | メンバ変数 | メソッド | 説明 |
---|---|---|---|---|---|
public | o | o | o | o | どのクラスからでも |
protected | x | o | o | o | このクラスを継承したサブクラス、もしくは同一パッケージ内のクラスから |
デフォルト(指定なし) | o | o | o | o | 同一パッケージ内のクラスからのみ |
private | x | o | o | o | 同一クラス内からのみ |
※リフレクションを使用した場合を除く
1 2 3 4 5 |
package util; public class BuiltUtils{ private static void process(byte[] b){ } } |
1 2 3 4 5 6 |
package app; public class someApp{ public static void main(String[] args){ byte[] bytes = new byte[256]; } } |
- BitUtilsクラスのprocessメソッドはアクセス修飾子がpraivateなのでSomeAppクラスからは使用できない
継承と修飾子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class ClassA{ public int numberOfInstances; protected ClassA(int numberOfInstances){ this.numberOfInstances = numberOfInstances; } } public class ExtendedA extends ClassA { private ExtendedA(int numberOfInstances){ super(numberOfInstances); } public static void main(String[] args){ ExtendedA ext = new ExtendedA(420); System.out.println(ext.numberOfInstances); } } |
- サブクラスExtendedAで明示的にスーパークラスClassAの引数1つのコンストラクタを呼び出しているのでエラーにはならない。
- コンストラクタにはpublic,protected,privateなどすべてのアクセス修飾子を指定可能
- private ExtendedAコンストラクタは自クラス内からしか参照できない。ExtendedA extは自クラス内なのでOK
- protected ClassAコンストラクタは同じパッケージかこのクラスを継承したクラスからしか参照できない。super(numberOfInstances)はサブクラスなのでOK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public interface A4 { public void doSomething(String thing); } class AImpl implements A4{ public void doSomething(String thing){} } class B4{ public A4 doit(){ [crayon-63e1033fd8f5e115363961 ]<code>} public String execute(){ } |
}
class C4 extends B4{
public AImpl doit(){
1 2 3 4 5 |
} public Object execute(){ } |
}
[/crayon]
- class C4のpublic Object execute()でコンパイルエラーとなる
- クラスBのexecute()メソッドをオーバーライドしようとしているが戻り値がStringではなくObjectになっている
- メッソドのオーバーライドを行う際、戻り値はスーパークラスの同名メソッドと同じかサブクラスでないとならない
1 2 3 4 5 6 7 8 9 10 11 |
public interface A111{ String s = "yo"; public void mehod1(); } interface B{} interface C extends A111,B{ public void method1(); public void method1(int x); } |
- インターフェースは多重継承ができるのでOK(クラスはNG)
- interface C のmethod1()は同じpublic(公開範囲は狭くなっていない)なので問題ない
- interface C のmethod1(int x)は新たに抽象メソッドを定義しているだけ
- String s=”yo”はインターフェース内の変数宣言なのでコンパイル時に暗黙的に定数扱い(public static final)となる
1 2 3 4 5 6 7 8 9 10 |
abstract public class Employee{ protected abstract double getSalesAmount(); public double getCommission(){ return getSalesAmount() * 0.15; } } class Sales extends Employee{ public double getSalesAmount(){return 123.45;} } |
- Employee.getSalesAmount()メソッドのアクセス修飾子はprotected
- protectedよりも狭くない公開範囲のprotected,publicであればOK
- private,修飾子なしはNG
1 2 |
interface Data{public void load();} abstract class Info{public abstract void load();} |
1 2 3 |
public class Employee extends Info implements Data{ public void load(){/* do something */} } |
- extends(クラスの継承)とimplements(インターフェース)ではextends(クラスの継承)を先に記載する
- 抽象クラス.メソッド,インターフェース.メソッドといった書き方はない
コンストラクタ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class Hello { String title; int value; public Hello(){ title += " World"; } public Hello(int value){ this.value=value; title="Hello"; Hello(); } } class TesterHello{ public static void main(String[] args){ Hello c=new Hello(5); System.out.println(c.title); } } |
- Hello();でコンパイルエラーとなる
- 引数ありのコンストラクタから自クラスのコンストラクタを通常のメソッドのように呼び出す事はできない
- 上記の中で呼び出す場合はthis();をpublic Hello(int value){のすぐ後で呼び出す必要がある
1 2 3 4 5 6 7 8 9 |
public class Planet{ private String name; public Planet(String name){ this.name = name; } public String getName(){ return name; } } |
1 2 3 4 |
public class Tree extends Planet{ public void growFruit(){} public void drawLeaves(){} } |
- Treeクラスにはコンストラクタがないのでコンパイル時に引数のないコンストラクタが生成される
- TreeクラスはPranetクラスのサブクラスなので最初にsuper(引数)がない場合、自動的にスーパークラスのデフォルトコンストラクタが実行される
- Planetクラスには引数ありのコンストラクタがあるので、引数なしのデフォルトコンストラクタが生成されないのでコンパイルエラーとなる
- なので、PlanetクラスにPublic Planet(){this(“fern”)}などを追加すればコンパイルできる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Person{ String name = "No name"; public Person(String nm){ name = nm; } } class Employee extends Person{ String empID = "0000"; public Employee(String id){ empID = id; } } public class EmployeeTest{ public static void main(String[] args){ Employee e = new Employee("4321"); System.out.println(e.empID); } } |
- Employeeクラスのコンストラクタ内でコンパイルエラーとなる
- EmployeeクラスはPersonクラスのサブクラス
- Employeeクラスでは明示的なスーパークラスのコンストラクタ呼び出しがないのでPersonクラスのデフォルトコンストラクタPerson()が呼び出される
- Personクラスには引数ありのコンストラクタを書いてしまっているのでデフォルトコンストラクタPerson()が生成されない
- Employeeクラスのコンストラクタの最初でsuper(id);のように呼びだせばOK
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Employee{ String name; double baseSalary; Employee(String name,double baseSalary){ this.name = name; this.baseSalary = baseSalary; } } public class SalesPerson extends Employee{ double commission; public SalesPerson(String name,double baseSalary,double commission){ //insert code } } |
- SalesPersonクラスのコンストラクタ内でコンパイルエラーとなる
- SalesPersonクラスはEmployeeクラスのサブクラス
- SalesPersonクラスでは明示的なスーパークラスのコンストラクタ呼び出しがないのでEmployeeクラスのデフォルトコンストラクタEmployee()が呼び出される
- Employeeクラスには引数ありのコンストラクタが定義されてしまっているのでデフォルトコンストラクタが生成されない
- SalesPersonクラスのコンストラクタの最初でsuper(name,baseSalary);のように呼び出せばOK
例外
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
class A{ public void method1(){ B b = new B(); b.method2(); System.out.println("class A"); } } class B{ public void method2(){ C c = new C(); c.method3(); System.out.println("class B"); } } class C{ public void method3(){ String nullStr=null; System.out.println(nullStr.length()); } } public class tryTest { public static void main(String[] args){ [crayon-63e1033fd8f9b250876827 ]<code> try{ A a = new A(); a.method1(); }catch(Exception e){ System.out.println("an error occured"); } } } |
[/crayon]
- NullPointerExceptionは非チェック例外なのでメソッドにthrowsの指定がなくても必ず呼び出し元に送出される。
- なので、an error occurredが表示される
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class A2 { void foo() throws Exception{ throw new Exception(); } } class SubB2 extends A2{ void foo(){ System.out.println("B "); } } class Tester{ public static void main(String[] args){ A2 a = new SubB2(); a.foo(); } |
- throws句があるのに例外処理がないからコンパイルエラーとなる
- throws句はサブクラスで指定しなくてもオーバーライドされる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class A3 { public void method1(){ try{ B3 b=new B3(); b.method2(); }catch(TestException te){ throw new RuntimeException(te); } } } class B3{ public void method2() throws TestException{ [crayon-63e1033fd8f9e702451092 ]<code>} |
}
class Tester3{
public void method(){
A3 a = new A3();
a.method1();
}
}
public class TestException extends Exception{
}
[/crayon]
- 非チェック例外はコンパイル時にチェックされない
- チェック例外はコンパイルエラーになる
- method1()はRuntimeExceptionをthrowしている
- RintimeExceptionは非チェック例外、なので呼び出し元で例外処理がなくてもいい
- TestExceptionはExceptionのサブクラスとして作ったものなので例外処理が必要
キャスト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Base1 { public static final String FOO = "foo"; public static void main(String[] args){ Base1 b = new Base1(); Sub1 s = new Sub1(); System.out.print(Base1.FOO); System.out.print(Sub1.FOO); System.out.print(b.FOO); System.out.print(s.FOO); System.out.print(((Base1)s).FOO); } } class Sub1 extends Base1{ public static final String FOO = "bar"; } |
- ((Base1)s).FOOはクラス変数sをキャストしてBASE1型にしているので、BASE1クラスのFOO変数の”foo”が表示される。
1 2 3 4 5 6 |
Object[] myObject = {new Integer(12), new String("foo"), new Integer(2), new Boolean(true)}; Arrays.sort(myObject); |
- 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は参照型
1 2 3 4 5 6 7 |
public class TestString1{ public static void main(String[] args){ String str = "420"; str += 42; System.out.println(str); } } |
- ストリング変数strに数字42を+=演算子で加えた結果strは42042となる
ループとラベル
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Breaker2 { static String o= ""; public static void main(String[] args){ [crayon-63e1033fd8fa4571567155 ]<code>z: for(int x=2;x<7;x++){ if(x==3) continue; if(x==5) break z; o=o+x; } System.out.println(o); |
}
}
[/crayon]
- 出力は24
- continueは処理を1週とばす
- break zはzラベルのついたfor文を終了する
カプセル化
1 2 3 4 5 6 7 8 9 10 11 |
public class FoobarCard{ private String CardID; private Integer limit; public String ownerName; public void setCardInformation(String cardID,String ownerName,Integer limit){ this.cardID = cardID; this.limit = limit; this.ownerName = ownerName; } } |
- 属性と操作を一体化させて表現することをカプセル化と呼ぶ
- 実データであるインスタンス変数が他クラスからむやみに変更される事を防ぐために一般的にインスタンス変数はprivate指定が推奨
- メソッドはpublic指定が推奨
- public指定されているownerName変数がカプセル化を破壊しているといえる
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。
【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。
【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
MySQL勉強会 in 大阪(第10回)に行ってきました
MySQL勉強会 in 大阪(第10回)に行ってきました。 オプティマイザー、G …
-
-
「JP_Stripes Tokyo Vol.7 Stripe at Doorkeeper and MakeLeaps」で受付をしました
全編英語でJP_Stripes(Stripeの勉強会)の開催がありまして、受付を …
-
-
Salesforce WorldTour Tokyo 2018で、つながる世界の熱気を感じた
去年はたしか芝公園の方だったかと思いますが、今年はビッグサイトです。 数千人レベ …
-
-
「【大阪リージョンオープン記念】AWS Expert Online for JAWS-UG #14」に参加しました
AWS Expert Online for JAWS-UG #14に参加しました …
-
-
「RPA勉強&LT会!RPALT vol1@Innovation Space DEJIMA」でLTしました
「RPA勉強&LT会!RPALT vol1@Innovation Space D …
-
-
「IBM Cloud Community Summit 2018 フルマネージドデータベースというのは使えるのか?IBM Cloudでのデータ活用事例いろいろ」でIBm Cloudのデータベースサービスを聞かせていただいた
IBM Cloud Community Summit 2018におじゃましました …
-
-
家族目線(HVC-C2W)SDKサンプルコードを実行してみました(iOS編)
オムロンさんの家族目線(HVC-C2W)SDKサンプルコードを実行してみました。 …
-
-
Java SE 7 Silver対策勉強をしながらメモ 2015/2/4
本日は継承をどっぷりと。 一気に詰め込んで正解だったかも。 いつものごとくマーク …
-
-
AWS Expert Online at JAWS-UG首都圏エリアに参加して「Amazon EC2 スポットインスタンス再入門」を聞いてきた
AWS Expert Onlineという勉強会がありまして、AWS ソリューショ …
-
-
Java SE 7 Silver受験直前 練習問題総確認 2015/2/14
カーリング中継見ながら、iTunesシャッフルでかけながら、練習問題。 集中って …