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)
import java.time.*; public class Sample{ public static void main(String[] args){ LocalDate date = /* [A] */ System.out.println(date.toString()); } }
問.Sample.javaをコンパイルして画面に以下のように表示したい。
2017-01-01T10:20:30.000
/[A]/の部分に入れる選択肢として適切なものを以下のaからeの選択肢からすべて選びなさい。aからeに適切なものが無い場合はf,g,hから適切なものをすべて選びなさい。
なお、プログラムの実行時刻は2017年01月01日のAM10:20:30.000ちょうどであった。
選択肢
/* a */ new LocalDate(2017, 1, 1, 10, 20, 30); /* b */ new LocalDate("2017-01-01T10:20:30"); /* c */ LocalDate.now(); /* d */ LocalDate.of(2017, 1, 1, 10, 20, 30); /* e */ LocalDate.parse("2017-01-01T10:20:30"); /* f */ //aからeに適切な選択肢はなく、すべてコンパイルエラーとなる。実行時エラーになるものはない。 /* g */ //aからeに適切な選択肢はなく、すべて実行時エラーとなる。コンパイルエラーになるものはない。 /* h */ //aからgの中に適切な選択肢はない。
解答
h.
aからgの中に適切な選択肢はない。
解説
java.timeパッケージはjava 8から追加されたパッケージで、日付や時間に関するクラスやインタフェースがまとめられている。
日付を扱うクラスとしてはjava 7でもjava.util.Calendarクラスなどある。しかし、java.util.Calendarクラスなどの、日付や時刻を扱うための既存のクラスには特有の扱いにくさがあった。そこで、新しくまとめられたのがjava.timeパッケージ内の各クラスとインタフェースである。
今回はその中でLocalDateクラスを利用している。このクラスはjava 8から新しく追加されたクラスで、「日付」を扱うクラスである。
今回は実行すると「日付」と「時刻」の両方を表示するような選択肢を選ばなければいけない。しかし、そもそもLocalDateクラスでは「時刻」については扱えない。
そのため選択肢c以外(a,b,d,e)はすべてコンパイルエラーとなる。
また、c のLocalDate.now()メソッドはstaticメソッドで、現在の日付を保持したLocalDateクラスのインスタンスを獲得できるため、コンパイルエラーにはならない。
しかし、そもそもLocalDateクラスでは「時刻」の情報は扱えない。
そのため、今回の選択肢の中では「h.aからgの中に適切な選択肢はない。」が正解となる。
それぞれの選択肢をまとめた一覧は以下の通り。
※解答解説の後にLocalDate、LocalTime、LocalDateTimeのそれぞれのクラスについて簡単にまとめたので、そちらもご覧ください。
選択肢 | 解答・解説 |
---|---|
/* a */ new LocalDate(2017, 1, 1, 10, 20, 30); |
× コンパイルエラー
LocalDateクラスはそもそもnewを用いたインスタンス化はできず、コンパイルエラーとなる。 また、LocalDateクラスでは時刻情報を扱えない。 |
/* b */ new LocalDate("2017-01-01T10:20:30"); |
× コンパイルエラー
LocalDateクラスはそもそもnewを用いたインスタンス化はできず、コンパイルエラーとなる。 また、LocalDateクラスでは時刻情報を扱えない。 |
/* c */ LocalDate.now(); |
× 実行時の結果が合わない
now()メソッドが実行されると、実行時の「日付」を保持したLocalDateクラスのインスタンスを返してくる。 コンパイルエラーや実行時エラーにはならないが、LocalDateクラスは「日付」情報しか保持していない。 今回は「時刻」の情報も表示したいので不適。 |
/* d */ LocalDate.of(2017, 1, 1, 10, 20, 30); |
× コンパイルエラー
LocalDate.of()メソッドは引数で指定した数値をもとにしたLocalDateクラスのインスタンスを返してくる。 ただし、そもそもLocalDateクラスのof()メソッドでは時刻情報を扱えない。 引数の数が合わないためコンパイルエラー。 |
/* e */ LocalDate.parse("2017-01-01T10:20:30"); |
× コンパイルエラー
LocalDateクラスでは時刻情報を扱えない。 LocalDate.parse()メソッドは引数でで指定した文字列をもとにしたLocalDateクラスのインスタンスを返してくる。 ただし、そもそもLocalDateクラスのparse()メソッドでは時刻情報を扱えない。 引数のフォーマットが合わないためコンパイルエラー。 |
/* f */ 適切な選択肢はなく、すべてコンパイルエラーとなる。 実行時エラーになるものはない。 |
×
一見正しく見えるが、選択肢cはコンパイル可能なので不適。ひっかけ。 |
/* g */ 適切な選択肢はなく、すべて実行時エラーとなる。 コンパイルエラーになるものはない。 |
×
今回は実行時エラーになる選択肢はaからeの中にはない。よって不適。 |
/* h */ aからgの中に適切な選択肢はない。 |
○ 正解
a,b,d,e → コンパイルエラー c → コンパイルと実行ができるが期待していた結果にはならない aからgの中に適切な選択肢はないため正解。 |
LocalDateクラス、LocalTimeクラス、LocalDateTimeクラスについてまとめると以下の通り。
LocalDate、LocalTime、LocalDateTimeの概要
クラス名 | 日付 | 時刻 | 説明 |
---|---|---|---|
LocalDateクラス | ○ | × | ・日付を保持するクラス
・時刻は保持できない |
LocalTimeクラス | × | ○ | ・時刻を保持するクラス
・日付は保持できない |
LocalDateTimeクラス | ○ | ○ | ・日付と時刻を保持するクラス |
共通事項
※各メソッドの詳細は次回以降を参照 |
- | - | ・newによるインスタンス化はできない
・of()メソッドで数値をもとにしたインスタンスを獲得可能 ・parse()メソッドで文字列をもとにしたインスタンスを獲得可能 ・一度生成したインスタンスが保持する日付や時刻の情報は不変 |
オススメ!!→ java 8 の問題はこちら