– 処理中で成立するべき条件を検証し条件違反を自動で検知するしくみ
– アサーションの構文
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
(ページ 33-41)