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
※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。
問題
次のプログラムを作成した。コンパイル、実行に関して以下の問いに答えなさい。なお、プログラムの実行日は2017年1月1日とします。
プログラム(Sample.java)
import java.time.*; public class Sample{ public static void main(String[] args){ LocalDate date = LocalDate.now(); date++; System.out.println(date.toString()); } }
問.Sample.javaをコンパイル、実行するとどうなるか。下記の選択肢 a ~ j から正しいものを選べ。
選択肢
a. 2017-01-01と表示される
b. 2017-01-02と表示される
c. 2017-02-01と表示される
d. 2017-02-02と表示される
e. 2018-01-01と表示される
f. 2018-01-02と表示される
g. 2018-02-01と表示される
h. 2018-02-02と表示される
i. コンパイルエラー
j. 実行時エラー
解答
i. コンパイルエラー
解説
java.timeパッケージはjava 8から追加されたパッケージで、日付や時間に関するクラスやインタフェースがまとめられている。
日付を扱うクラスとしてはjava 7でもjava.util.Calendarクラスなどある。しかし、java.util.Calendarクラスなどの、日付や時刻を扱うための既存のクラスには特有の扱いにくさがあった。そこで、新しくまとめられたのがjava.timeパッケージ内の各クラスとインタフェースである。
前回はLocalDateクラスのnow()メソッドとstatic変数についての問題だったが、今回はLocalDateクラスのオブジェクトの日付の操作が題材となっている。
LocalDateクラスのオブジェクトのplusDays()メソッドを利用すれば、引数で指定した分のだけ日付が加算された、LocalDateクラスのオブジェクトを取得できる。
この際、もとのオブジェクトが保持している日付は変更されない。イメージとしてはStringクラスのappend()メソッドに近い。
今回はLocalDateクラスのオブジェクトに対して++演算子を使用した演算を試みている。
しかし、javaではほとんどのクラスでオブジェクトに対する++演算子の演算は定義されていない。当然LocalDateクラスのオブジェクトに++演算子を使用した演算が定義されていない。
よって、コンパイルエラーとなる。
なお、Integerクラスのオブジェクトなどでは++演算子によるインクリメントなどができる。これはautoboxingが働いているためである。
各メソッドを利用したインスタンスの取得方法についてはこちらの記事を参照。
オススメ!!→ java 8 の問題はこちら