Java 8 練習問題 上級編 その2
Java 8 練習問題 上級編
Java 8 練習問題 上級編
動作環境と問題内容について
javaの練習問題です。 出題範囲はjava 8 で追加された範囲を中心とします。難易度は Java SE 8 Programmer II の試験と同程度※を想定しています。
※ただし、場合によっては同試験には出題されない内容や形式が含まれることもあります。あくまでも難易度の目安として解答してください。
実行環境は以下の通りです。
JDKのバージョン:java 8 Update181
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
問題
次のプログラムを作成した。コンパイル、実行に関して以下の問いに答えなさい。
プログラム(Sample.java)
import java.util.stream.Stream; import java.util.ArrayList; public class Sample{ public static void main(String[] args){ ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.stream() .forEach(System.out..print); } }
問.Sample.javaをコンパイル、実行するとどうなるか。下記の選択肢 a ~ g から正しいものを選べ。
選択肢
a. 12と表示される
b. [1, 2]と表示される
c. クラス名@hashcode が表示される
d. コンパイルエラー
e. 実行時エラー
f. コンパイル・実行ともにできるが何も表示されない
g. コンパイル・実行ともにできるが実行結果は不定である
解答
d. コンパイルエラー
解説
今回も Stream API を利用した問題となっている。
Stream の終端操作で forEach() メソッドを利用している。前回と異なり処理内容はメソッド参照を利用した表示となっている。
しかし、System.out..print という書き方はメソッド参照としては正しくない。メソッド参照を利用する場合、メソッド名の直前は「..(ドット2個)」ではなく「::(コロン2個)」である。
今回の場合、メソッド参照の正しい形は「System.out::print」となる。
以上より、コンパイルエラーとなる。
Stream API の利用時にはラムダ式やメソッド参照も多用されるため、それらに十分に慣れておく必要がある。
また、Java 7 以前の環境にはなかった書き方なので、Java 7 以前から Java を扱っている場合でも、設計や実装時には十分に注意する必要がある。
<<前回の問題はこちら 次の問題はこちら>>>
オススメ!!→ java 8 の上級問題はこちら オススメ!!→ java 8 の問題はこちら オススメ!!→ javaのプログラム作成形式の練習問題はこちら オススメ!!→ Macで日本語化済のEclipseを導入する方法その1 その2 オススメ!!→ java関連の記事はこちら