java練習問題
java練習問題
動作環境と問題内容について
javaの練習問題です。 出題範囲はjava 8 で追加された範囲を中心とします。難易度は Java SE 8 Programmer I の試験と同程度※を想定しています。
※ただし、場合によっては同試験には出題されない内容や形式が含まれることもあります。あくまでも難易度の目安として解答してください。
実行環境は以下の通りです。
PC:MacBook Pro 2011early 15inch
OS:Windows 8.1(デュアルブート) 64bit版
メモリ:16GB(8GB x 2)
CPU:Core i7-2635QM 2.00GHz
javaのバージョン:java 8 Update102
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
問題
次のプログラムを作成した。コンパイル、実行に関して以下の問いに答えなさい。
プログラム(Sample.java)
public class Sample{ public static void main(String[] args){ MyInterface obj = /*[A]*/ } } interface MyInterface{ boolean myMethod(Object val); }
問./*[A]*/の部分に入れてコンパイルしてもコンパイルエラーにならないものを以下の選択肢からすべて選びなさい。
選択肢
/* a */ (String val) -> { return true; }; /* b */ (Object val) -> { return true; }; /* c */ (Object val) -> return true; /* d */ (Object val) -> { true; }; /* e */ (Object val) -> true; /* f */ String val -> { return true; }; /* g */ Object val -> { return true; }; /* h */ (val) -> { return true; }; /* i */ val -> { return true; }; /* j */ () -> { return true; }; /* k */ val -> true;
解答
b,e,h,i,k
解説
今回の選択肢は関数型インタフェース「MyInterface」を定義している。メソッド「myMethod」は、引数がObject型、戻り値がboolean型となっている。
interface MyInterface{ boolean myMethod(Object val); }
これをもとに、それぞれの選択肢を見ていく。
※解答解説の後に省略の可否の一覧でまとめてあるので、ラムダ式の省略について良く分からない場合はそちらを先にご覧ください。
選択肢 | 解答・解説 |
---|---|
/* a */ (String val) -> { return true; }; |
・引数のデータ型をObject型からString型に変更
× コンパイルエラー myMethodメソッドの引数がもとと異なっており、ラムダ式の型推論と矛盾する。 |
/* b */ (Object val) -> { return true; }; |
・ 省略なし
○ コンパイル可能 ラムダ式を省略せずに実装した場合。特にエラーになる原因はない。 |
/* c */ (Object val) -> return true; ※スペースの都合で改行 |
・ { } のみ省略
× コンパイルエラー { }を省略する場合は必ずreturn キーワードも省略しなければならない。 |
/* d */ (Object val) -> { true; }; |
・return キーワードのみ省略
× コンパイルエラー return キーワードを省略する場合は必ず{ }も省略する。 |
/* e */ (Object val) -> true; ※スペースの都合で改行 |
・ return と { }を同時に省略
○ コンパイル可能 処理がreturn文しかない場合は、returnのキーワードと{ }を同時に省略することができる。 ※1 { } が省略できるのは処理が1行のみの場合だけなので要注意。 |
/* f */ String val -> { return true; }; |
・引数のデータ型をObject型からString型に変更し、( )を省略
× コンパイルエラー aと同じく、引数のデータ型をString型に変更すると型推論と矛盾が生じる。 |
/* g */ Object val -> { return true; }; |
・( ) を省略
× コンパイルエラー ( )が省略できるのは引数が1つで、その引数のデータ型も同時に省略されている場合のみである。 |
/* h */ (val) -> { return true; }; |
・引数のデータ型を省略
○ コンパイル可能 引数のデータ型は省略が可能である。 |
/* i */ val -> { return true; }; |
・引数のデータ型と( )を同時に省略
○ コンパイル可能 引数が1つで、引数のデータ型が省略されている場合に限り( )を省略することができる。 |
/* j */ () -> { return true; }; |
・引数を省略
× コンパイルエラー 引数を省略することはできない。 |
/* k */ val -> true; |
・引数のデータ型と、( )を同時に省略 ※1
・return キーワードと( )を同時に省略 ※2 ○ コンパイル可能 今回可能な省略をすべて使用した形。 引数が無かったり、引数が2つ以上ある場合は※1の省略ができない。 |
以上をまとめると次のようになる。
ラムダ式の省略可否一覧
省略個所 | 省略の可否 | 注意点 |
---|---|---|
引数のデータ型 | ○ 省略可能 | ・データ型が省略されている引数とされていない引数が混ざっている場合は省略できない。
※省略する場合は必ずすべての引数のデータ型を省略すること。 |
引数の( ) | △ 省略可能 ※ 条件付き |
・引数なしの場合は省略できない。
・引数が2つ以上の場合は省略できない。 ・ 引数のデータ型が書いてあると( )は省略できない。
※引数が1つで、データ型が省略されている時のみ省略可能。 |
処理の{ } | △ 省略可能 ※ 条件付き |
・処理が2行以上にわたる場合は省略できない。
・処理が ; しかない場合は省略できない。(プログラムの構造がおかしくなるため) ・戻り値がある場合、return キーワードが書いてあると省略できない。
※処理が1行しかない場合は省略可能。戻り値がある場合は下記参照。 |
(戻り値がある場合) return キーワード |
△ 省略可能 ※ 条件付き |
・return 文以外の処理もある場合は省略できない。
・{ } が書いてあると省略できない。
※ 処理内容がreturn 文のみで、{ }も省略する場合のみ省略可能。その場合、処理内容には戻り値のみが書かれる。 ※ 戻り値そのものがなくなるわけではないので注意。 |
引数名 | × 省略できない | ・引数名は省略できない。
※ただし、引数名はもとのインタフェースと異なっていても良い。ローカル変数のスコープに注意して変数名を定義すること。 |
オススメ!!→ java 8 の問題はこちら