Object類和常用的API 學習過程中的筆記,涉及到Objetc中的equals方法和toString方法,日期類Date,日曆類Calendar,日期格式化類SimpleDateFormat以及基本數據類型和封裝類的拆箱和裝箱,還有String與基本數據類型的轉換.有錯誤還望諒解 Object類 ...
Object類和常用的API
學習過程中的筆記,涉及到Objetc中的equals方法和toString方法,日期類Date,日曆類Calendar,日期格式化類SimpleDateFormat以及基本數據類型和封裝類的拆箱和裝箱,還有String與基本數據類型的轉換.有錯誤還望諒解
Object類
概述
java.lang.Object 類是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。在對象實例化的時候,最終找的父類就是Object。如果一個類沒有特別指定父類, 那麼預設則繼承自Object類。Object類當中包含的方法有11個,常用的有兩個:
- public String toString():返回該對象的字元串表示.
- public boolean equals(Object obj):指示其他對象是否與此對象相等.
toString方法
toString方法返回該對象的字元串表示,其實該字元串內容就是對象的類型+@+記憶體地址值。
由於toString方法返回的結果是記憶體地址,而在開發中,經常需要按照對象的屬性得到相應的字元串表現形式,因此也需要重寫它。
重寫toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
我們在使用輸出語句輸出對象名的時候預設調用toString()方法.
equlas()方法
調用成員方法equals並指定參數為另一個對象,則可以判斷這兩個對象是否是相同的。這裡的“相同”有預設和自定義兩種方式。
預設地址比較
如果沒有覆蓋重寫equals方法,那麼Object類中預設進行== 運算符的對象地址比較,只要不是同一個對象,結果必然為false。
對象內容比較
如果希望進行對象的內容比較,即所有或指定的部分成員變數相同就判定兩個對象相同,則可以覆蓋重寫equals方法。
重寫equals()方法
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
這段代碼充分考慮了對象為空、類型一致等問題,但方法內容並不唯一。
Objects類
在JDK7添加了一個Objects工具類,它提供了一些方法來操作對象,它由一些靜態的實用方法組成,這些方法是null-save(空指針安全的)或null-tolerant(容忍空指針的),用於計算對象的hashcode、返回對象的字元串表示形式、比較兩個對象。在比較兩個對象的時候,Object的equals方法容易拋出空指針異常,而Objects類中的equals方法就優化了這個問題。
源碼如下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
日期時間類
Date類只需要註意三個方法:
- Date() 分配一個 Date對象,並初始化它,以便它代表它被分配的時間,測量到最近的毫秒。 new Date();來創建當前時間
- Date(long date) 分配一個 Date對象,並將其初始化為表示自稱為“時代”的標準基準時間以後的指定毫秒數,即1970年1月1日00:00:00 GMT。中國是東八區,所以時間要加八個小時
- long getTime() 返回自1970年1月1日以來,由此 Date對象表示的00:00:00 GMT的毫秒 數 。 獲取時間的毫秒數.
SimpleDormatDate類也註意三個方法:
- SimpleDateFormat(String pattern) 使用給定模式 SimpleDateFormat並使用預設的 FORMAT語言環境的預設日期格式符號。模式一般為("yyyy年MM月dd日 HH:mm:ss")
- String format(Date date) 將日期格式化成日期/時間字元串。 將日期對象轉化為構造方法中固定模式的字元串.
- Date parse(String source) 從給定字元串的開始解析文本以生成日期。 將String類型轉化為構造方法中固定模式的Date類型.
註意的是模式中的格式 : y代表年,M代表月,d代表天,H代表時,m代表分,s代表秒,S代表毫秒,嚴格區分大小寫.
Calendar類
日曆類是一個抽象類,使用如下:
// 計算某年某月有多少天,可以用來判斷瑞年,設置月份的時候註意點
// 使用方法獲取對象
Calendar calendar = Calendar.getInstance();
// 設置時間
Scanner in = new Scanner(System.in);
System.out.println("請輸入計算的時間的後一天(yyyy-MM-dd):");
String date = in.nextLine();
in.close();
String[] arr = date.split("-");
int year = Integer.valueOf(arr[0]);
int month = Integer.valueOf(arr[1]);
int day = Integer.valueOf(arr[2]);
calendar.set(year,month,day);
// 計算後一天
calendar.add(Calendar.DAY_OF_MONTH,-1);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
// 獲取
System.out.println("美國一周從周日開始,您輸入的該天為周" + calendar.get(Calendar.DAY_OF_WEEK) + "在中國也就是周" + (calendar.get(Calendar.DAY_OF_WEEK) - 1));
註意的是美國的星期從周日開始,美國的月份從0月開始.常用的方法使get和set,還有getInstance.
System類
常用的方法有兩個:
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 將指定源數組中的數組從指定位置複製到目標數組的指定位置。
src - 源數組。srcPos - 源數組中的起始位置。 dest - 目標數組。 destPos - 目的地數據中的起始位置。 length - 要複製的數組元素的數量。
static long currentTimeMillis() 返回當前時間(以毫秒為單位)。
這個方法一般用於程式的優化
// 現有一個字元數組{'i','t','c','a','s','a'},請使用System類中的arraycopy()方法在控制台輸出“itcast”。
// (提示:將[1]號數組元素複製到最後位置並覆蓋原有元素。)
// 創建字元數組
char[] charArr = {'i','t','c','a','s','a'};
// 使用arraycopy方法
System.arraycopy(charArr,1,charArr,charArr.length - 1, 1);
System.out.println(charArr);
StringBuilder類
常用的方法:
- StringBuilder() 構造一個沒有字元的字元串構建器,初始容量為16個字元。
- StringBuilder(String str) 構造一個初始化為指定字元串內容的字元串構建器。
StringBuilder append(....) 將任意數據類型到序列中。返回當前對象.
// 分析以下需求,並用代碼實現:
// 1.定義數字字元串數組{"010","3223","666","7890987","123123"};
// 2.判斷該數字字元串數組中的數字字元串是否是對稱(第一個數字和最後一個數字相等,第二個數字和倒數第二個數字是相等的,依次類推)的,並逐個輸出;
// 3.如:010 是對稱的,3223 是對稱的,123123 不是對稱的;
// 4.最終列印該數組中對稱字元串的個數。
// 定義個數
int sum = 0;
// 定義數字字元串數組
String[] strArr = {"010","3223","666","7890987","123123"};
for (int i = 0; i < strArr.length; i++) {
StringBuilder sb = new StringBuilder(strArr[i]);
// 反轉自己
sb.reverse();
System.out.println(sb + ":" +strArr[i]);
if(sb.toString().equals(strArr[i])){
sum ++;
System.out.println(strArr[i] + "是對稱的.");
}else{
System.out.println(strArr[i] + "是不對稱的.");
}
}
System.out.println("該數組中對稱字元串的個數為:" + sum);
裝箱和拆箱
基本數據類型 | 引用數據類型 | 常用的屬性 | 常用的方法 |
---|---|---|---|
byte | Byte |
static byte MAX_VALUE : Byte類型的最大值 static byte MIN_VALUE : Byte類型的最小值 |
static byte parseByte(String s) 將字元串參數解析為帶符號的十進位 byte 。 static String toString(byte b) 返回一個新的 String對象,代表指定的 byte 。 |
short | Short |
static short MAX_VALUE:short類型的最大值 static short MIN_VALUE:short類型的最小值 |
static short parseShort(String s) 將字元串參數解析為帶符號的十進位 short 。 static String toString(short s) 將字元串參數解析為帶符號的十進位 short 。 |
int | Integer |
static int MAX_VALUE:int類型的最大值 static int MIN_VALUE:int類型的最小值 |
static int parseInt(String s):將字元串參數解析為帶符號的十進位整數。 static String toString(int i):返回一個 String指定整數的 String對象。 |
long | Long |
static long MAX_VALUE:long類型的最大值 static long MIN_VALUE:long類型的最小值 |
static long parseLong(String s):將字元串參數解析為帶符號的十進位 long 。 static String toString(long i):返回 String表示指定對象 long 。 |
float | Float |
static float MAX_VALUE:long類型的最大值 static float MIN_VALUE:long類型的最小值 |
static float parseFloat(String s) 返回一個新 float初始化為指定的代表的值 String ,如通過執行 valueOf類的方法 Float 。 static String toString(float f) 返回 float參數的字元串 float形式。 |
double | Double |
static double MAX_VALUE:double類型的最大值 static double MIN_VALUE:double類型的最小值 |
static double parseDouble(String s) 返回一個新 double初始化為指定的代表的值 String ,如通過執行 valueOf類的方法 Double 。 static String toString(double d) 返回 double參數的字元串 double形式。 |
char | Charcter |
static char MIN_VALUE:該欄位的常數值是 char '\u0000' 。 static char MAX_VALUE:該欄位的常數值是 char類型的 '\uFFFF' 。 |
可以使用String類中的方法char[] toCharArray() 將此字元串轉換為新的字元數組。-> 不屬於本章內容 static String toString(char c) 返回一個 String對象,表示指定的 char 。 |
boolean | Boolean |
static Boolean FALSE : Boolean對象對應於原始值 false 。 static Boolean TRUE : Boolean對象對應於原始值 true 。 |
static boolean parseBoolean(String s) 將字元串參數解析為布爾值。如果s為true,true不區分大小寫時,返回為true,其餘全部返回false. static String toString(boolean b) 返回一個 String指定布爾值的 String對象。 |
基本數據類型和引用數據類型,基本數據類型是不能調用方法的,而引用數據類型可以創建對象調用方法.
基本數據類型和包裝類型之間存在自動裝箱和拆箱.