たなかのJava日記

どんなことをやったか(学んだか)、どこで詰まったか(わからなかったか)、どこで工夫したかの記録です。

Day3,formatメソッドとformattedメソッド

■時間

約2時間

 

■行ったこと

1,書籍「プロになるJava」p80~93

・標準API(日付時刻関連)

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

・formatメソッド、formattedメソッド

BigDecimalクラス

 

■コメント

特になし

 

■課題
前日と変わらず
・前値インクリメントと後置インクリメントの説明
・参照型について

 

■その他

アルゴリズムを、はじめよう」という本が到着しました。

 

---------------------------------

以下はメモです

 

【staticメソッド】
■クラス名.メソッド名(引数)
・クラス名を指定して呼び出すメソッドのこと
・例、var day =LocalDate.of(2020,2,28)

インスタンスメソッド】
■値.メソッド名
・値に対して呼び出すメソッド
・例、var name = "tanaka"
name.toUpperCase()

【文字列整形メソッド】
Java 14までは「String.format」メソッドを使っていましたが、
Java 15から正式採用された「formatted」メソッドが使用可能になりました。

・String.format(書式,埋め込む値...)
String name = String.format("%sと%s","tanaka","nakata");
System.out.println(name);

・書式.formatted(埋め込む値...)
var name ="%sと%s".formatted("tanaka","nakata");
System.out.println(name);

動作は全く同じだが、呼び出し方が違うだけです。
ちなみに、formatメソッドはstaticメソッドになっていますが、
formattedメソッドはインスタンスメソッドになっています。

プログラムを書く時には複数の方法で記載することができることがわかりました。
この時、注意することは、何をしたいがわかる書き方をすることが大切だそうです。
例えば、どのような書式の文字列が出力されるのかを一番知りたいときは、
書式が先に来るformatedメソッドを使用するなどです。

■formatメソッド使用の注意点
staticメソッド(クラス名を指定して呼び出すメソッド)は、「値.メソッド」でも呼び出せてしまいます。

ですので、staticメソッドである、formatメソッドは以下でも使用できます。
var words = "%sがすごい".format("クセ");
System.out.println(words);

しかし、期待していた結果である「クセがすごい」になりません。
これは、String.format("クセ")という呼び出しと同じことになり、
書式「がすごい」に対して埋め込む値を指定しなかったことになっています。

実際はformattedメソッドの動きを予想していたと思います。
var words = "%sがすごい".formatted("クセ");
System.out.println(words);

理由としては、staticメソッドには、インスタンスを生成しなくても呼び出せるという特徴があるためです。
(通常、メソッドを呼び出すときは「new」を使ってインスタンスを生成した後に呼び出さないといけない)
細かい説明はできないので以下を参照してください。
・static変数とstaticメソッドについて
https://qiita.com/Nekonecode/items/19f3a261a8391853ddec

IDEでは「値.」のでの補完でstaticメソッドが表示されないことになっているようです。
この機能を使用し、間違いを減らすのが一番有効な手段だと学びました。