見出し画像

Java基本(標準API)

前回に続き、Javaの基本について、今度は標準APIについて学んだことを記事にしておきます。ひとまず日付時刻のライブラリを例として記載。


日付時刻

APIとライブラリ

 API(Application Programming Interfaceの略)という言葉はIT関連の仕事している人なら聞いたことあると思いますが、ここでおさらい。
APIは機能をまとめて、他のプログラムから呼び出せるようにした部品になります。
 APIって何?と改めて聞かれると説明に困る人がいるみたいですが、自分は「みんながよく使う機能をあらかじめ作成して纏めておいたプログラム全集」だとイメージしています。
 JavaのAPIは主にクラスという単位で作成されており、そのことからJavaの標準ライブラリはクラスライブラリと言われています。ちなみにStringもクラスライブラリの1つで、標準APIには4500以上のクラスがあるらしいですが、全部使ったことがる人はおそらくいないのでは?

現在時刻を取得する

試しにJshellで現在時刻を取得してみます。
(時刻は記事を書いている日時。)

jshell> java.time.LocalDate.now()
$1 ==> 2024-01-13

今日の日付が表示されました。
次に現在時刻を表示してみたいと思います。

jshell> java.time.LocalTime.now()
$2 ==> 10:53:27.590644100

記事を書いている時点での時刻が表示されました。
ちなみに日時を同時に表示するには以下のライブラリを使用します。

jshell> java.time.LocalDateTime.now()
$3 ==> 2024-01-13T10:55:04.519951500

パッケージとimport

 ちなみに上記のコード実行で補完機能を使いましたが長い入力は面倒なのでクラス名は極力省略したいのは怠惰な人間の性であり、これらを省略できる機能があります。
 「java.time.LocalDate」を例として説明すると、まず、クラス名と言われる部分ははLocalDateのみになります。そして、「java.time」の箇所はパッケージと言われるクラスを分類する仕組みになります。クラスの数は膨大なので一つ一つ探そうとすると時間がかかりますので、ある程度同じクラスで分類するようになっており、その目安となるのがパッケージ名になります。
 尚、パッケージをインポートするやり方は以下になります。

jshell> import java.time.*

ここで「*」は「すべての要素」を意味しています。つまり、java.timeパッケージに分類されるライブラリをすべて呼び込んでいる意味になります。この記述をプログラムすることで「java.time」都度記載しなくてもよくなります。

jshell> LocalDateTime.now()
$5 ==> 2024-01-13T11:33:55.619633600

そして、java.timeパッケージに属するほかのクラスについても同様にパッケージ名を省略できます。「java.time.LocalDate」のようにパッケージ名まで省略せずに含めたフルネームのことをFQN(Fully Qualified Name)完全修飾名と言います。

ちなみに、文字列を表すStringクラスはjava.langパッケージに含まれるので完全修飾名は「java.lang.String」になります。変数宣言ではパッケージ名を省略していましたが、java.langパッケージはimportしなくても使えます。よく使うパッケージについて纏めておきます。

$$
\begin{array}{l:r:r}
パッケージ名&目的&Javaプログラムでの省略\\ \hline
java.lang&Java言語に密接なクラス&〇 \\
java.util&プログラミングの助けになるプログラム&要import \\
java.math&BigDecimal/BigInteger&要import \\
java.time&日付時刻&要import \\
java.io&入出力&要import \\
java.net&ネットワーク&要import \\
java.nio.file&ファイル操作&要import \\
java.swing&GUIコンポーネントswing&要import \\
java.awt&グラフィック操作&要import
\end{array}
$$

日付時刻の操作

日付時刻を取得に続き、日時の計算についても説明しておきます。
例としてplusDaysメソッドを使うと数日後を取得できます。

jshell> LocalDateTime.now()
$6 ==> 2024-01-13T17:29:37.145691400

jshell> LocalDateTime.now().plusDays(3)
$7 ==> 2024-01-16T17:30:01.386896500

ここでは引数に3を渡して、3日後の日時が表示されます。
このように、各クラスには扱っている要素に応じて以下の表に挙げているメソッドが使えます。

$$
\begin{array}{l:r:r}
メソッド名&説明\\ \hline
plusMonths&月を足す \\
plusDays&日を足す \\
plusWeeks&週を足す \\
plusHours&時間を足す \\
plusMinutues&分を足す \\
getMonth&月を得る(Septemberなど) \\
getMonthValue&月を数値で得る \\
getDayOfMonth&日を得る \\
getDayOfWeek&曜日を得る(Fridayなど ) \\
getHour&時間を得る\\
getMinute&分を得る
\end{array}
$$

ちなみに、毎回nowメソッドを使うと日付時刻がちょっとずつ進んでしまうので、基本的には変数を使って日付時刻を代入してしまえば、同じ日付時刻を扱うことができます。

jshell> var today = LocalDateTime.now()
today ==> 2024-01-13T17:47:44.447591100

指定した日付時刻を扱う

ここまでは現在時刻を使ってきましたが、ここでは指定した日時を処理する方法を記載しておきます。日付を指定してLocalDateの値を得るにはLocalDate.ofというメソッドを使用し、引数には年、月、日の3つを渡します。

jshell> var today = LocalDate.of(2024, 1, 13)
today ==> 2024-01-13

jshell> var nowtime = LocalTime.of(17, 51)
nowtime ==> 17:51

ちなみに日付と時刻を組み合わせることも可能。

jshell> var todaytime = LocalDateTime.of(today, nowtime)
todaytime ==> 2024-01-13T17:51

年、月、日、時、分の5つの引数を渡してLocalDateTimeの値を得ることもできます。

staticメソッドとインスタンスメソッド

日時を扱うのにLocalDate.now()などを使いましたが、これらのメソッドは次のような構文になっています。

# 構文
クラス名.メソッド名(引数)

上記のようにクラス名を指定して呼び出すメソッドをstaticメソッド、一方で文字列の小文字を大文字に変換するtoUpperCaseメソッドのようなメソッドは以下のようになっています。

# 構文
値.メソッド名(引数)

上記のように値に対して呼び出すメソッドをインスタンスメソッドといいます。


この記事が気に入ったらサポートをしてみませんか?