Java認定。 SCJPの準備

今月、SCJP試験を受けました。 このトピックでは、準備と試験について説明します。

主に、これから服用しようとしている人、およびこれについてさらに情報が必要な人向けです。



明確化



Sunはもはや存在しないため、SCJP試験もありません。 これは次のように表示されます。

1Z0-851 Java Standard Edition 6プログラマー認定プロフェッショナル試験。





準備する



準備には2週間かかりました。 これらのソースのみを使用しました:



試してみるには、次のリソースがあります。





それだけです これは試験に合格するのに十分です(最低合格スコアではなく、非常に良いスコアで)。 確かに、これは結局、Javaでプログラミングし、基本構造で混乱しないことを条件としています。

上記の記事を読みました。 時々実際に何かをチェックしました。 エミュレーターでのテストは1回合格しました。 将来同じレーキにつまずかないように、私は間違っていたものを見ました。



試験



ピーターズバーグで引き渡されました。 試験の費用は125ドルです(試験自体の構成。肯定的な結果は保証されません:))。

試験センターで、私たちは温かく迎えられ、お茶を飲んで、クッキーをもらった。 写真撮影。 その後、テストが開始されました。 私は一人で借りました(部屋は二人の借り手のために設計されていますが、私は一人でした)。 60問で150分。 特別なことは何もありません-テストはすべてのエミュレーターのようです。

質問の61%以上を正しく答える必要があります。

何も使用できません、外出できます。 時間は止まりません。

結果はすぐに得られます。 証明書-数週間で郵送。



タスク



「Javaを知っていますか」という記事のスタイルで、試験の最も一般的なタスクではなく、興味深いタスクを紹介します。 繰り返しますが、まず第一に、試験前に練習したい人のために。 結局のところ、準備する最も確実な方法は、決定、決定、決定です。

各質問の後に回答が与えられます。



1. I / O-メソッドのシグネチャを知る


このコードを実行するとどうなりますか?

public class Main{ public static final void main(String[] args) { String path = "somepath"; //         String name = "somename"; File file = new File(path, name); file.mkdir(); try { file.createNewFile(); } catch (Exception e) { } } }
      
      





1.ディレクトリとファイルの両方が作成されます。

2.カタログのみ

3.未コンパイル

4. java.io.IOExceptionをスローする



答えは:

2.ディレクトリ(somenameという名前)のみ。 他に何も起こりません。



2.シリアル化とコンストラクター


このコードの実行の結果として何が出力されますか?

 import java.io.*; import java.util.*; public class Main { public static final void main(String[] args) throws Exception { ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("abra-cadabra")); out.writeObject(new C(123)); ObjectInputStream in = new ObjectInputStream( new FileInputStream("abra-cadabra")); System.out.print(in.readObject()); } } class A { public A() { System.out.print("A "); } public A(int number) { System.out.print("1 "); } } class B extends A { public B() { System.out.println("B "); } public B(int number) { super(number); System.out.print("2 "); } } class C extends B implements Serializable { public C() { System.out.print("C "); } public A a = null; public C(int number) { super(number); System.out.print("3 "); } }
      
      





1.未コンパイル

2. java.io.NotSerializableExceptionをスローします

3.1 2 3

4. 1 2 3 AB



答えは:

4. 1 2 3 AB

クラスCに変数A a = nullが存在しても、 a = nullであるため、NotSerializableExceptionは発生しません。 パブリックAの代わりにa = null; write public A a = new A(); -NotSerializableExceptionをスローします。

この場合、すべてがシリアル化されます。 デシリアライズするとき、デシリアライズ可能なクラスのコンストラクターは呼び出されませんが、その親がSerializableインターフェイスを実装しない場合、デフォルトのコンストラクターを呼び出します。

この例で、AがCではなく直列化可能に実装されている場合、出力は1 2 3になります。

この例で3つのクラスすべてでパラメーターなしのコンストラクターを削除すると、 java.io.InvalidClassException: Javaは親でパラメーターなしでコンストラクターを呼び出そうとするため、デシリアライズ中に有効なコンストラクターはスローされません



3.不実表示


このコードの実行の結果として何が出力されますか?

 import java.util.*; public class Main { public static List getSorted() { List<Integer> sorted = new LinkedList<Integer>(); sorted.add(3); sorted.add(1); sorted.add(2); return sorted; } public static final void main(String[] args) throws Exception { System.out.println(getSorted()); } }
      
      





1. 1 2 3

2. 3 2 1

3. 3 1 2

4.未コンパイル

5.ランタイムエラー



答えは:

3. 3 1 2。

メソッドとメソッド内のシートがgetSorted()と呼ばれ、並べ替えられているからといって、LinkedListも並べ替えられているわけではありません。



4. instanceof


このコードの実行の結果として何が出力されますか?

 class A { } class B extends A { } class C extends B { } class D { } public class Main { public static final void main(String[] args) { B b = new C(); A a = new C(); D d = new D(); System.out.println(b instanceof A); System.out.println(a instanceof B); System.out.println(d instanceof C); } }
      
      





1. true true false

2. true false false

3.コンパイルエラー



答えは:

3.コンパイルエラー。 これは、DとCが階層の異なるブランチ上にあり、互いに縮小できないために発生します。



5.そして、パラメーターは何ですか?


 public static void print(List<? extends String> list) { //   ... }
      
      





1. list.add( "Hello、Habrahabr!");

2. list.add(新しいオブジェクト());

3. list = new ArrayList();

4. list = new ArrayList <?>();

5. list = new ArrayList <Objet>();



答えは:

3. list = new ArrayList();

すべてが論理的です:突然List <T>が届きますが、Tは実際にStringから継承されますか?..次に、list.add( "Hello、Habrahabr!")を呼び出すと、 javaは型変換を行えません。 これを理解すると、コンパイラは文字列「1」でコードをコンパイルしません。 2、4、5では、すべてが明確です。 list = new ArrayList(); -正しいコード。



6.例外とメソッドのオーバーライド


このコードの実行の結果として何が出力されますか?

 class A { public void print() throws Exception { throw new Exception(); } } class B extends A { public void print() { System.out.println("B"); } } public class Main { public static final void main(String[] args) { B b = new B(); b.print(); } }
      
      





1. B

2.なし

3.コンパイルエラー

4.例外



答えは:

オーバーライドするメソッドは、新しいクラスまたはより広いクラスの例外をスローしないでください。 彼はまったく彼を離れることはできません。 そのため、コードはBをコンパイルして出力します。



7.例外とメソッドのオーバーライド-2


このコードの実行の結果として何が出力されますか?

 class A { public void print() throws Exception { throw new Exception(); } } class B extends A { public void print() { System.out.println("B"); } } public class Main { public static final void main(String[] args) { A a = new B(); a.print(); } }
      
      





1. B

2.なし

3.コンパイルエラー

4.例外



答えは:

3.コンパイルエラー。

クラスAで例外をスローしているため、メイン(...)では処理しません。 戻り値の型(共変の戻り値があるため、スーパークラスとは異なる場合があります)およびスローされた例外は、リンクの型についてコンパイラーによってチェックされます。



8.整数++?


クライアントクラスに影響を与えないようにクラスAを変更するにはどうすればよいですか?

 class A { private int i = 0; public void add(int i) { update(++i); } private void update(int i) { this.i = i; } } public class Main { public static final void main(String[] args) { new A().add(5); } }
      
      





1. ++ iをi ++に置き換えます

2. public void add(int i)をprivate void add(int i)に置き換えます

3. public void add(int i)をpublic void add(整数i)に置き換えます

4.上記のどれでもない



答えは:

3. public void add(int i)をpublic void add(整数i)に置き換えます

++-がIntegerで機能することを知る必要があります。 そしてダブル。 そしてフロート付き。 そして、すべての数値ラッパー。



記事を読んで、練習してください。 そして、すべてがうまくいきます。 これには複雑なことは何もありません。

試験について質問がある場合は、コメントで回答します。



All Articles