主に、これから服用しようとしている人、およびこれについてさらに情報が必要な人向けです。
明確化
Sunはもはや存在しないため、SCJP試験もありません。 これは次のように表示されます。
1Z0-851 Java Standard Edition 6プログラマー認定プロフェッショナル試験。
準備する
準備には2週間かかりました。 これらのソースのみを使用しました:
- JAVA、%username%を知っていますか?
JAVA、%username%を知っていますか? パート2
これらの2つの記事の著者に感謝します。 - ハブのコメントで、この記事への別のリンクを見つけました: http : //rsdn.ru/article/java/scjp_article.xml
それを理解し、そこに書かれているすべてのことを知っていれば、試験はほぼ合格したとみなすことができます。 - ハブにはまだJava認定の記事があります-SCJPとSCBCDを渡します。
試してみるには、次のリソースがあります。
- nikojava.wordpress.com
これらのブログエントリは、回答付きの試験問題の集まりです(誤った回答もありましたが、注意してください!疑わしい場合は、コンパイラに確認してください)。 - http://www.certpal.com/
これは試験エミュレータです。 これが試験の外観です。
それだけです これは試験に合格するのに十分です(最低合格スコアではなく、非常に良いスコアで)。 確かに、これは結局、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で機能することを知る必要があります。 そしてダブル。 そしてフロート付き。 そして、すべての数値ラッパー。
記事を読んで、練習してください。 そして、すべてがうまくいきます。 これには複雑なことは何もありません。
試験について質問がある場合は、コメントで回答します。