*なおこの日は1045に登校したのでそれ以前のノートはありません。
日付まわり。
Main537と539のちがうクラスを使ったやり方が共有に。
先生のドライブからDL→
CalendarのかわりにLocalDateTimeというのをつかうやりかた。
こっちは「月の0はじまり」をやめている
--->Main537_2.java
import java.time.LocalDateTime;
public class Main537_2 {
public static void main(String[] args) {
// 現在の年を表示する
LocalDateTime now = LocalDateTime.now();
int y = now.getYear();
System.out.println("今年は" + y + "年です");
System.out.println(now);
System.out.println(now.getMonth());
System.out.println(now.getMonthValue());
System.out.println(now.getDayOfMonth());
System.out.println(now.getHour());
System.out.println(now.getMinute());
System.out.println(now.getSecond());
//年月日時分秒を指定
LocalDateTime d1 = LocalDateTime.of(2010, 8, 22, 1, 23, 45);
System.out.println(d1);
System.out.println(d1.plusYears(1));
}
}
--->Main539_2.java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main539_2 {
public static void main(String[] args) throws Exception {
// 本日の日時を表示する
LocalDateTime now = LocalDateTime.now();
// SimpleDateFormat f = new SimpleDateFormat("yyyy/MM/dd h:mm:ss");
// DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd a h:mm:ss");
String s = f.format(now);
System.out.println(s);
System.out.println(now.format(f));
System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")));
// System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss")));
// System.out.println(now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd h:mm:ss")));
// 2017/06/16 14:51:35
// 2017/06/16 02:51:35
// 2017/06/16 2:51:35
// 指定日時の文字列を解析しLocalDateTime型として得る
// LocalDateTime d = LocalDateTime.parse("2011/09/22 01:23:45", f);
LocalDateTime d = LocalDateTime.parse("2017/06/16 午後 2:58:33", f);
System.out.println(d);
}
}
あたらしいクラスでは月は1はじまりで、古いクラスでは0はじまりという混在が起こっているらしい。
教科書541
toStringはほとんどすべてのクラスが持っているらしい
たとえそれが自分で作ったHeroやMatangoでも
ちなみにtoString();
>Javaでは、すべてのクラスに、toString()メソッドが用意されています。
toStringメソッドは、数値型などを文字列に変換するときなどに使用します。それ以外にも、オブジェクトの中身を文字列表現として取得でき、デバッグで確認するときなども活用します。
public class Empty {
}
public class Main541 {
public static void main(String[] args) {
Empty e = new Empty();
String s = e.toString();
System.out.println(s);
}
}
javaのすべてのクラスはトップがObject。最終祖先が全部Object。
ここを読むと「ほぼすべてのクラスはこれをもっている」というのが分かる
あらゆるクラスはざっくりみると全部objectらしい。
どこでもいいからpringlnのうえでF3をおしてみよう
→中身がでてくる
→ String s = String.valueOf(x);というのがでてきた
valueOfの中身をみてみましょう
最高祖先のObjectがもっているtoStringを「再定義」することで、チューズデーとかを表示できるらしい
P545をうちこみましょう
こんなふうに出力されてしまった
↓
じゃあこのtoString()を自分で再定義しちゃいましょう(オーバーライド)
Heroクラスにこれを追加
public String toString() {//自分でオーバーライド
return "名前:"+this.name+" HP:"+this.hp;
}
じぶんのすきなふうにhのなかみが出力できるようになった
Main548.java
public class Main548 {
public static void main(String[] args) {
Hero h1 = new Hero();
h1.name="みなと";
h1.hp=100;
//2にんめのHEro
Hero h2 = new Hero();
h2.name="みなと";
h2.hp=100;
if (h1.equals(h2)==true) {
System.out.println("同じ内容ですよ");
}else {
System.out.println("ちがう内容ですよ");
}
}
}
実行結果
ちがう内容ですよ
これなんで違う内容と言われるか:
なにをくらべているか:
→つまり番地を比較している。h1とh2が「おなじメモリ番地」をさしていたら「同じ内容ですよ」と返していた。
h1とh2は違う番地にいたので「ちがうよ」と判定した
T岸さんいわく、インスタンス変数を比較しているらしい、インスタンスではなく。
文字列の比較は==ではなく、すべてのオブジェクトがもっているequals(いこーるす)を使う。
値がいっしょ(等値)なのか、指している内容2つがおんなじなのか(等価)、という。
後者は「このゲームのルールではこれとこれは意味的に一緒としましょうや」という感じで自分たちで決めていく。
p551を入力