アサーションは Gold 試験のみで出題されます。移行試験では出題されません。

ドキュメント内 Make the Future Java FY13 PPT Template (Page 33-41)

– 処理中で成立するべき条件を検証し条件違反を自動で検知するしくみ

– アサーションの構文

 1;

– アサーションの有効化

3. 11 行目で AssertionError が発生する

assert exp1;

assert exp1 : exp2;

exp1 … 検証されるべき条件

exp2 … 検証エラー時のメッセージ

(AssertionError のコンストラクタ引数 )

アサーションは Gold 試験のみで出題されます。移行試験では出題されません。

$ java –ea Test

例題 3

 次のコードについて正しい説明はどれですか?

並列 Fork/Join フレームワークを使用する

1. public class MergeSortTask<T> extends RecursiveTask<List<T>> { 2. private final List<T> values;

3. protected List<T> compute() { 4. if (values.size() > 1) {

5. int mid = values.size() / 2;

6. final MergeSortTask<T> t1 = new MergeSortTask(values.subList(

7. 0, mid));

8. final MergeSortTask<T> t2 = new MergeSortTask(values.subList(

9. mid, values.size()));

10. t1.fork();

11. List<T> values1 = t1.join();

12. List<T> values2 = t2.compute();

13. return merge(values1, values2);

14. } else {

[ 選択肢 ]

1. t1 と t2 は並行実行される

2. t1 と t2 は逐次実行される

3. 実行時に例外になる

解答 3

 Fork/Join フレームワーク

– 細分化して行う処理を ForkJoinTask クラスのサブクラスとして定義

 RecursiveAction … 戻り値なし / RecursiveTask … 戻り値あり

 処理は compute() メソッドをオーバーライドして実装

– タスクの粒度を考慮しつつタスクを再帰呼び出し

 ForkJoinTask の実行

– fork() … タスクを非同期に実行 / join() … 処理完了後に結果を返す

– Fork/Join の実行

 ForkJoinPool#invoke(ForkJoinTask)

2. t1 と t2 は逐次実行される

compute()

の擬似コード

1. if (problem is small) 2. //

直接処理

3. else {

4. //

処理単位をタスクに細分化

5. //

細分化したタスク実行

6. // join

7. //

結果の計算

8. }

fork() は ForkJoinPool のスレッドから

呼び出される必要がある

例題 4

 次のコードの空欄 ( A ) に記述するコードとして正しいものはどれです か?

1. new Currency(Locale.DEFAULLT);

2. Currency.getDefaultInstance("Default" );

3. new Currency(Locale.getDefaultLocale());

Locale オブジェクト使用してロケール読み込みを設定する

1. Currency currency = ( A ) ;

2. System.out.println(" Code: " + currency.getCurrencyCode()

3. + " Display Name: " + currency.getDisplayName() + " Symbol: "

4. + currency.getSymbol());

解答 4

 ローカライゼーション

– Locale … 特定の地域をあらわす ( 言語コード、国コード、バリアント )

 Locale locale = new Locale(String language [, String country, String variant] )

 Locale.getDefault() … JVM のデフォルトロケールを取得

– Currency クラスは Factory メソッドを使用してインスタンスを取得

 static Currency getInstance(Locale locale)

 static Currency getInstance(String currencyCode) // ISO4217 の通貨コード

– デフォルト以外の通貨使用する場合は

<JAVA_HOME>/lib/currency.properties で追加定義可能

4. Currency.getInstance(Locale.getDefault());

例題 5

 次のコードについて正しい説明はどれですか?

PathMatcher クラスを使用してファイルを検索する

1. public class Finder extends SimpleFileVisitor<Path> { 2. int matches = 0;

3. public static void main(String[] args) throws IOException { 4. Finder finder = new Finder();

5. Files.walkFileTree(Paths.get("d:¥¥tmp"), finder);

6. System.out.println("match count: " + finder.matches);

7. }

8. @Override

9. public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { 10. PathMatcher matcher = FileSystems.getDefault()

11. .getPathMatcher("glob:*.{java,class}");

12. Path name = file.getFileName();

13. if (name != null && matcher.matches(name))

[ 選択肢 ]

1. 拡張子が java, class のファイル数が出力さ れる

2. ファイル名が glob: で始まるファイル数が 出力される

3. オーバーライドするべきメソッド

(visitFileFailed) が足りないのでコンパイル

解答 5

 NIO.2 におけるファイルパスの操作

– Paths … ファイル操作のためのユーティリティメソッド

 move, copy, write, createLink/createSymbolicLink, walkFileTree …

 CopyOption でコピー時 , OpenOption でオープン時のオプションを指定可能

– PathMatcher … パターンマッチングによるファイル検索

 PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);

– PathMatcher#matches(Path) メソッドでパターンマッチング

– パターン指定はグロブ構文 (glob: ) または正規表現 (regex: )

1. 拡張子が java, class のファイル数が出力される

3. 補足情報

ドキュメント内 Make the Future Java FY13 PPT Template (Page 33-41)

関連したドキュメント