忍者ブログ

からすまる日誌 java

実践2(6) LocalDateTimeとObject

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

実践2(6) LocalDateTimeとObject

*なおこの日は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を入力
PR

コメント

ブログ内検索

P R