day04面向對象(Object類和常用API)
一.Object類
1.Object類的介紹
它是所有類的超類,所有對象(包括數組)都擁有Object類中方法
2.toString方法
原型:public String toString():返回該對象的字符串表示。
默認表示格式: 包名.類名@地址值
在實際開發中,我們通常會重寫toString方法
public class Dog {
private int age;
private String name;
//重寫toString
//返回對象的內容纔有意義
//快速生成toString
@Override
public String toString() {
return "Dog{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
注意:實際上toString方法我們並不需要自己主動調用
使用輸出語句直接打印對象名時,編譯器會自動先調用toString,然 後打印toString的返回值!!!
即以下兩種寫法是等價的:
System.out.println(對象名);
System.out.println(對象名.toString());
3.equals方法
原型:public boolean equals(Object obj);
判斷某個其他對象是否與此對象“相等”。
equals方法默認比較的是兩個對象的地址值
在實際開發中,我們通常會重寫equals方法,比較兩個對象的內容 (屬性值)而不是地址值
public class Dog {
private int age;
private String name;
//重寫equals
//比較兩個對象的內容(屬性值)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Dog dog = (Dog) o;
//只有age相同 && name相同才返回true,否則返回false
return age == dog.age &&
Objects.equals(name, dog.name);
}
}
4.補充
== 與 equals的區別
對於基本類型來說:
== 比較是數值
基本類型沒有equals方法!!!!
對於引用類型來說:
==比較的是地址值
equals默認比較也是地址值,如果重寫了比較的是對象屬性 值
二.時間日期類
1.Date類
Date表示特點的時間點
構造方法:
public Date():創建代表當前系統的時間Date
public Date(long time):創建一個代表距離標準時間time毫秒後的 時間
標準時間(英國):1970-01-01 00:00:00
標準時間(中國):1970-01-01 08:00:00
public class TestDateDemo {
public static void main(String[] args) {
//1.創建Date對象,無參構造
Date dd = new Date();
System.out.println(dd);
//2.創建Date對象,有參數構造
Date dd2 = new Date(1000L);
System.out.println(dd2);
}
}
成員方法:
public long getTime():獲取Date對象距離標準時間的毫秒值
public void setTime(long time):修改Date對象距離標準時間的毫 秒值
public String toString():重寫Object的toString方法,返回時間 字符串
public class TestDateDemo {
public static void main(String[] args) {
//1.創建Date對象,無參構造
Date dd = new Date();
System.out.println(dd);
//2.創建Date對象,有參數構造
Date dd2 = new Date(0L);
System.out.println(dd2);
//3.獲取毫秒值
long time = dd.getTime();
System.out.println(time);
//4.修改毫秒值
dd2.setTime(1565682794591L);
System.out.println(dd2);
}
}
2.DateFormat類型
DateFormat時間/日期格式化類,將Date對象時間串改成我們喜歡的 那種格式
查閱API發現DateFormat是一個抽象類!!!我們使用的是JDK提供的 子類:SimpleDateFormat類
構造方法:
public SimpleDateFormat(String pattern):以指定的模板創建日期
格式化對象
y - 年
M - 月
d - 日
H - 時
m - 分
s - 秒
成員方法:
public String format(Date date):將Date對象格式化爲一個時間串
public Date parse(String time):將時間串解析爲一個Date對象
public class TestDateFormatDemo {
public static void main(String[] args) {
//1.創建一個日期格式化對象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH點mm分ss秒");
//2.調用格式化方法
Date now = new Date();
String s = sdf.format(now);
//假設: 2019年05月06日 20點18分25秒
System.out.println(s);
//3.調用解析方法
Date date = sdf.parse("3000年10月23日 10點11分12秒");
System.out.println(date);
}
}
3.Calendar類(抽象類)
a.獲取方法**********
public static Calendar getInstance():靜態方法,獲取當 前系統時間的日 歷對象
b.常用方法
public int get(int field):根據字段的編號,獲取該字段 的值
public void set(int field, int value):根據字段的編 號,修改字段的值
public void add(int field, int value):根據字段的編 號,增加該字段的值
public Date getTime():把Calendar對象轉換爲Date對象
public class TestCalendarDemo {
public static void main(String[] args) {
//1.獲取Calendar對象
Calendar c = Calendar.getInstance();
System.out.println(c);
//2.獲取字段的值
printCalendar(c);
//3.修改字段的值
c.set(Calendar.YEAR,3000);
c.set(Calendar.MONDAY,10);
c.set(Calendar.DAY_OF_MONTH, -5);
printCalendar(c);
//4.增加字段的值
c.add(Calendar.MONTH,1);
c.add(Calendar.DAY_OF_MONTH,2);
printCalendar(c);
//5.轉成Date對象
Date time = c.getTime();
System.out.println(time);
}
public static void printCalendar(Calendar c) {
int year = c.get(Calendar.YEAR);
System.out.println(year);
int month = c.get(Calendar.MONDAY);
System.out.println(month);
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
}
}
c.練習
需求:獲取任意一年的二月份有多少天
使用Calendar對象設置爲該年三月份的第一天,再將日期減1 即可
public class TestDemo {
public static void main(String[] args) {
//練習:獲取某一年的二月份有多少天
//1.輸入年齡
System.out.println("請輸入一個年:");
int year = new Scanner(System.in).nextInt();
//2.創建一個Calendar對象,設置成該年的三月份的第一天
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,year);
c.set(Calendar.MONTH,2);
c.set(Calendar.DAY_OF_MONTH,1);
//c.set(year,2,1);
//3.然後減去一天
c.add(Calendar.DAY_OF_MONTH, -1);
//4.獲取天數
int day = c.get(Calendar.DAY_OF_MONTH);
//打印
System.out.println(year + "年的二月份有" + day + "天");
}
}
三.Math類(private 不可實例化)
Math類中包含了很多數學運算相關的方法,而且這麼方法都是靜態的,類名直 接調用即可
1.8個方法
public static double abs(double d):求絕對值
public static double max(double d1, double d2):求最大值
public static double min(double d1, double d2):求最小值
public static double ceil(double d):向上取整
public static double floor(double d):向下取整
public static long round(double d):四捨五入
public static double random():產生一個[0,1)的隨機小數
public static double pow(double d1, double d2):求指數
public class MathDemo {
public static void main(String[] args) {
//1.絕對值
double abs = Math.abs(-3.5);
System.out.println(abs);
//2.求最值
double max = Math.max(3.4, 4.5);
System.out.println(max);
double min = Math.min(3.4, 4.5);
System.out.println(min);
//3.向上向下取整
double ceil = Math.ceil(3.1);
double floor = Math.floor(3.9);
System.out.println(ceil); //4
System.out.println(floor); // 3
//4.四捨五入
long round = Math.round(3.499);
System.out.println(round);
//5.產生一個[0,1)的隨機小數
double random = Math.random();
System.out.println(random);
//6.求次方
double pow = Math.pow(10, 3);//10的3次方 10*10*10
System.out.println(pow);
}
}
四.System類(private 不可實例化)
1.兩個常用的靜態方法
public static void exit(int status):退出JVM虛擬機
public static long currentTimeMillis():獲取當前系統時間距離 標準時間的毫秒值
public class SystemDemo {
public static void main(String[] args) {
//1.退出JVM
for (int i = 0; i < 10; i++) {
System.out.println(i);
System.exit(0);
}
//2.獲取毫秒值
long time = System.currentTimeMillis();
System.out.println(time);
}
}
2.currentTimeMillis方法在開發中的作用
用於計算某個代碼塊的運行時間
public class SystemDemo02 {
public static void main(String[] args) {
//字符串拼接時,建議使用StringBuilder
//1.使用String進行拼接 耗時:29650毫秒
long start = System.currentTimeMillis();
String s = "";
for (int i = 0; i < 100000; i++) {
s += i;
}
long end = System.currentTimeMillis();
System.out.println("耗時:" + (end - start) + "毫秒");
//2.使用StringBuilder進行拼接 耗時:23毫秒
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
sb.append(i);
}
long end = System.currentTimeMillis();
System.out.println("耗時:" + (end - start) + "毫秒");
}
}
五.包裝類
1.包裝類的介紹
包裝類:基本數據類型 對應的引用類型
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
2.Integer的構造方法和靜態方法
構造方法
Integer i = new Integer(int value);
Integer i = new Integer(String value);
靜態方法
Integer i = Integer.valueOf(int value);
Integer i = Integer.valueOf(String value);
3.自動拆箱和自動裝箱的介紹**************
自動拆箱:把包裝類轉成對應的基本類型
在JDK1.7以前,只有手動拆箱
Integer i = new Integer(10);
int j = i.intValue();
在JDK1.7,引入自動拆箱
Integer i = new Integer(10);
int j = i; // 自動拆箱
自動裝箱:把基本類型轉成對應的包裝類
在JDK1.7以前,只有手動裝箱
Integer i = new Integer(10);
或 Integer i = Integer.valueOf(10);
在JDK1.7,引入自動裝箱
Integer i = 10; // 底層 是通過靜態方法執行
總結:JDK1.7以後,基本類型和包裝類類型我們可以當作基 本處理了(直接當作基本數據類型運算)
4.基本類型和字符串類型之間的轉換***********
基本類型 ——> 字符串
int i = 10;
a. i + ""
b. 使用StringBuilder
StringBuilder sb = new StringBuilder();
sb.append(i);
String s = sb.toString();
c. 使用String
String s = String.valueOf(i);
字符串 ——> 基本類型
String s = "1234";
a.使用包裝類
Integer i = new Integer(s);
int j = i; // i.intValue();
b.使用包裝類***********
int value = Integer.parseInt(s);
總結:
-[] 能夠說出Object類的特點
所有類的父類,所有對象包括數組,都有Object類中的方法
-[] 能夠重寫Object類中的toString方法
a.toString默認返回的字符串的:包名.類名@地址值
b.toString在開發我們通常重寫:返回對象的屬性值
c.toString方法不需要手動調用,只需要直接使用對象名即可
-[] 能夠重寫Object類的equals方法
a.equals方法默認比較:兩個對象的地址值
b.equals在開發中我們也會通常重寫:比較兩個對象的屬性值
-[] 能夠使用日期類輸出當前日期
Date now = new Date(); //當前日期對象
-[] 能夠使用將日期格式化爲字符串的方法
-[] 能夠使用將字符串轉換爲日期的方法
SimpleDateFormat sdf = new SimpleDateFormat("模板");
String s = sdf.format(Date d);
Date d = sdf.parse(String s);
-[] 能夠創建日曆對象
Calendar c = Calendar.getInstance();
-[] 能夠使用日曆對象的方法
c.set(int field, int value);
c.get(int field);
c.add(int field, int value);
c.getTime(); 轉換成Date對象
-[] 能夠使用Math類的方法
abs max min ceil floor round random pow
-[] 能夠使用System類獲取當前系統毫秒值
long time = System.currentTimeMillis();
-[] 能夠說出自動裝箱、自動拆箱的概念
自動裝箱: Integer i = 10;
Double d = 3.1;
自動拆箱: int j = i;
double dd = d;
-[] 能夠將基本類型轉換爲對應的字符串
a.直接+""
b.使用StringBuilder
c.使用String
-[] 能夠將字符串轉換爲對應的基本類型
a.使用包裝類的靜態方法
Integer i = new Integer("10");
int j = i; // i.intValue();
b.使用包裝類的parseInt方法
int i = Integer.parseInt("10");