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 = LocalDate.of(2017, 1, 1); LocalTime time = LocalTime.of(24, 30, 0); LocalDateTime dateTime = LocalDateTime.of(date, time); System.out.println(dateTime.toString()); } }
問.Sample.javaをコンパイル、実行するとどうなるか。下記の選択肢 a ~ f から正しいものを選べ。
選択肢
a. 2017-01-01T24:30と表示される
b. 2017-01-01 24:30と表示される
c. 2017/01/01T24:30と表示される
d. 2017/01/01 24:30と表示される
e. コンパイルエラー
f. 実行時エラー
解答
f. 実行時エラー
解説
java.timeパッケージはjava 8から追加されたパッケージで、日付や時間に関するクラスやインタフェースがまとめられている。
日付を扱うクラスとしてはjava 7でもjava.util.Calendarクラスなどある。しかし、java.util.Calendarクラスなどの、日付や時刻を扱うための既存のクラスには特有の扱いにくさがあった。そこで、新しくまとめられたのがjava.timeパッケージ内の各クラスとインタフェースである。
前回はLocalDate、LocalTime、LocalDateTimeクラスのparseメソッドを扱ったが、今回はLocalDate、LocalTime、LocalDateTimeクラスのofメソッドを使っている。
LocalDateクラスのofメソッドは引数に3つの引数を取り、引数をもとにした日付を保持するLocalDateクラスのオブジェクトを返す。第1引数にint型で年を、第2引数にint型もしくはMonth型で月を、第3引数にint型で日を指定する。
LocalTimeクラスのofメソッドは引数に2つから4つの引数を取り、引数をもとにした日付を保持するLocalTimeクラスのオブジェクトを返す。第1引数にint型で時を、第2引数にint型で分を指定する。第3引数を渡す場合にはint型で秒を、さらに第4引数を渡す場合にはint型でナノ秒も指定可能になっている。
LocalDateTimeクラスのofメソッドは引数に3つのint型の数値を取り、引数をもとにした日付を保持するLocalDateTimeクラスのオブジェクトを返す。引数の組み合わせは多岐にわたるため、こちらの記事を参照。
問題では5,6,7行目で、3つのクラスそれぞれのof()メソッドを利用し、LocalDateクラス、LocalTimeクラス、LocalDateTimeクラスのオブジェクトを取得しようとしている。
先に紹介した3つのクラスのof()メソッドでは引数にint型を取れるものが多いが、該当の項目の範囲外の数値を引数に渡してof()メソッドを呼び出すと実行時エラーを引き起こす。
例えば、LocalDate.of(2017, 1, 32)とすると、1月に32日が存在しないため実行時エラーとなる。
問題を見ると、6行目のLocalTimeクラスのof()メソッドはLocalTime.of(24, 30, 0)としている。一見すると問題ないように思えるが、時間の範囲は0時~23時までである。
そのため、時間に24以上の数値を指定すると実行時エラーになる。
詳しくはこちらの記事に書いてあるので、そちらも参照すること。
オススメ!!→ java 8 の問題はこちら