1.Object類詳解
java.lang.Object
1.1 equals方法
equals是Object類中的方法(如下)苗踪,只能判斷引用類型战惊。
public boolean equals(object obj){
return(this==obj);
}
其中==是一個(gè)比較運(yùn)算符
==和equals的對比
- ==:既可以判斷基本類型,又可以判斷引用類型
- ==:如果判斷基本類型喂走,判斷的是值是否相等。
- ==:如果判斷引用類型,判斷的是地址是否相等俩莽,即判定是不是同一個(gè)對象
- equals只能判斷引用類型
1.2 equals方法的重寫
equals默認(rèn)判斷的是地址是否相等,子類中往往重寫該方法乔遮,用于判斷內(nèi)容是否相等扮超。
字符串的比較使用equals
1.3 hashcode方法
返回該對象的哈希碼值
兩個(gè)引用,如果指向的是同一個(gè)對象蹋肮,則哈希值肯定是一樣的
兩個(gè)引用出刷,如果指向的是不同對象,則哈希值是不一樣的
1.4 toString 方法
-
基本介紹
默認(rèn)返回:全類名+@+哈希值的16進(jìn)制
-
重寫toString 方法坯辩,打印對象或拼接對象時(shí)馁龟,都會自動(dòng)調(diào)用該對象的toString 形式
子類往往重寫toString 方法,用于返回對象的屬性信息
2.包裝類
為什么要使用包裝類漆魔?
在程序中某些位置坷檩,例如(集合,泛型)等不能使用基本數(shù)據(jù)類型有送,因此需要把基本數(shù)據(jù)類型轉(zhuǎn)換成對象類型淌喻。
2.1 包裝類的分類
2.2 自動(dòng)裝箱和拆箱
int num=200;
//自動(dòng)裝箱 int->Integer
Integer integer=num;//底層使用的是Integer.valueOf(num)
//自動(dòng)拆箱 Integer->int
int num2=integer; //底層仍然使用的是 intValue()方法
2.3 包裝類型和String類型的相互轉(zhuǎn)換
前提:Integer i = 100;//自動(dòng)裝箱
基本數(shù)據(jù)類型->String :
- String str1 = i + "";
- String str2 = i.toString();
- String str3 = String.valueOf(i);
String->基本數(shù)據(jù)類型:
- String str4 = "12345";
- Integer i2 = Integer.parseInt(str4);//使用到自動(dòng)裝箱
- Integer i3 = new Integer(str4);//構(gòu)造器
- Integer i4 = Integer.valueOf("23");
3. Math類
Math類包含用于執(zhí)行基本數(shù)學(xué)運(yùn)算的方法,如初等指數(shù)雀摘、對數(shù)裸删、平方根和三角函數(shù)
//看看 Math 常用的方法(靜態(tài)方法)
//1.abs 絕對值
int abs = Math.abs(-9);
System.out.println(abs);//9
//2.pow 求冪
double pow = Math.pow(2, 4);//2 的 4 次方
System.out.println(pow);//16
//3.ceil 向上取整,返回>=該參數(shù)的最小整數(shù)(轉(zhuǎn)成 double);
double ceil = Math.ceil(3.9);
System.out.println(ceil);//4.0
//4.floor 向下取整,返回<=該參數(shù)的最大整數(shù)(轉(zhuǎn)成 double)
double floor = Math.floor(4.001);
System.out.println(floor);//4.0
//5.round 四舍五入 Math.floor(該參數(shù)+0.5)
long round = Math.round(5.51);
System.out.println(round);//6
//6.sqrt 求開方
double sqrt = Math.sqrt(9.0);
System.out.println(sqrt);//3.0
//7.random 求隨機(jī)數(shù) 前閉后開
// random 返回的是 0 <= x < 1 之間的一個(gè)隨機(jī)小數(shù)
// Math.random() * (b-a) 返回的就是 0 <= 數(shù) <= b-a
// Math.random()*6 返回的是 0 <= x < 6 小數(shù)
// 2 + Math.random()*6 返回的就是 2<= x < 8 小數(shù)
// (int)(2 + Math.random()*6) 返回的就是 2 <= x <= 7//取整
// 公式就是 (int)(a + Math.random() * (b-a +1) )
//8.max , min 返回最大值和最小值
int min = Math.min(1, 9);
int max = Math.max(45, 90);
System.out.println("min=" + min);
System.out.println("max=" + max);
4. Arrays類
Arrays里面包含了一系列靜態(tài)方法阵赠,用于管理或操作數(shù)組(比如排序和搜索)
-
toString 返回?cái)?shù)組的字符串形式
Arrays.toString(arr)
sort排序
-
binarySearch通過二分搜索法進(jìn)行查找涯塔,要求必須排好序
int index=Arrays.binarySearch(arr,3);
-
copyOf 數(shù)組元素的復(fù)制
Integer[] newArr = Arrays.copyOf(arr, arr.length);
-
equals 比較兩個(gè)數(shù)組元素內(nèi)容是否完全一致
boolean equals = Arrays.equals(arr, arr2);
5. Date類
時(shí)間戳:(Timestamp):1970年1月1日8時(shí)到現(xiàn)在的總秒數(shù)
Date date=new Data();
long time=data.getTime();
System.out.println(time);//將得到一個(gè)到現(xiàn)在的總秒數(shù)
如何轉(zhuǎn)換將時(shí)間戳格式化成年月日 時(shí)分秒
//通過format格式化一個(gè)時(shí)間戳
SimpleDateFormat sf=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
String format=sf.format(date);
System.out.println(format);
如何通過一個(gè)時(shí)間戳獲得一個(gè)時(shí)間
Long time=System.currentTimeMillos();
time-=15000000;
Date date=new Date(time);
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM月-日 hh:mm:ss");
String format=sf.format(date);
System.out.println(format);
6.日歷類Calendar
Calendar是一個(gè)抽象類肌稻,并且構(gòu)造器時(shí)private。所以Calendar不能通過new來創(chuàng)建對象匕荸,而是通過getInstance()來獲取實(shí)例
Calendar c = Calendar.getInstance(); //創(chuàng)建日歷類對象//比較簡單爹谭,自由
System.out.println("c=" + c);
//2.獲取日歷對象的某個(gè)日歷字段
System.out.println("年:" + c.get(Calendar.YEAR));
// 這里為什么要 + 1, 因?yàn)?Calendar 返回月時(shí)候,是按照 0 開始編號
System.out.println("月:" + (c.get(Calendar.MONTH) + 1));
System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));
System.out.println("小時(shí):" + c.get(Calendar.HOUR));
System.out.println("分鐘:" + c.get(Calendar.MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));
//Calender 沒有專門的格式化方法榛搔,所以需要程序員自己來組合顯示
System.out.println(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1)
+ "-" +c.get(Calendar.DAY_OF_MONTH)
+" " + c.get(Calendar.HOUR_OF_DAY)
+ ":" + c.get(Calendar.MINUTE)
+ ":" + c.get(Calendar.SECOND) );
}
JDK8之后加入:
LocalDate(日期/年月日):只包含日期诺凡,可以獲取日期字段
LocalTime(時(shí)間/時(shí)分秒):只包含時(shí)間,可以獲取時(shí)間字段
LocalDateTime(日期時(shí)間/年月日時(shí)分秒):包含日期+時(shí)間践惑,可以獲取日期和時(shí)間字段
//1. 使用 now() 返回表示當(dāng)前日期時(shí)間的 對象
LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()
System.out.println(ldt);
//2. 使用 DateTimeFormatter 對象來進(jìn)行格式化
// 創(chuàng)建 DateTimeFormatter 對象
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dateTimeFormatter.format(ldt);
System.out.println("格式化的日期=" + format);
System.out.println("年=" + ldt.getYear());
System.out.println("月=" + ldt.getMonth());
System.out.println("月=" + ldt.getMonthValue());
System.out.println("日=" + ldt.getDayOfMonth());
System.out.println("時(shí)=" + ldt.getHour());
System.out.println("分=" + ldt.getMinute());
System.out.println("秒=" + ldt.getSecond());
LocalDate now = LocalDate.now(); //可以獲取年月日
LocalTime now2 = LocalTime.now();//獲取到時(shí)分秒
//提供 plus 和 minus 方法可以對當(dāng)前時(shí)間進(jìn)行加或者減
//看看 890 天后腹泌,是什么時(shí)候 把 年月日-時(shí)分秒
LocalDateTime localDateTime = ldt.plusDays(890);
System.out.println("890 天后=" + dateTimeFormatter.format(localDateTime));
//看看在 3456 分鐘前是什么時(shí)候,把 年月日-時(shí)分秒輸出
LocalDateTime localDateTime2 = ldt.minusMinutes(3456);
System.out.println("3456 分鐘前 日期=" + dateTimeFormatter.format(localDateTime2));