常用API API概述 API全稱是應用程式編程介面,是Java寫好的程式,程式員可以直接調用。 Object類:toString方法 Object是祖宗類,它裡面的方法,一切子類對象都可以使用。 public String toString() 預設是返回當前對象的地址信息。 Student s ...
API概述
API全稱是應用程式編程介面,是Java寫好的程式,程式員可以直接調用。
Object類:toString方法
Object是祖宗類,它裡面的方法,一切子類對象都可以使用。
-
預設是返回當前對象的地址信息。
Student s = new Student("張三",'女', 23);
-
System.out.println(s.toString());
-
返回對象地址
-
-
System.out.println(s);
-
直接輸出對象名,預設是調用toString方法的
-
toString存在的意義:
-
預設返回對象的地址其實是沒有意義的
-
真實存在的意義是被子類重寫,以便返回子類對象的內容。
Object類:equals方法
public boolean equals(Object o )
-
預設是比較2個對象的地址是否一樣,返回true 或者false
equals存在的意義
-
預設比較對象的地址其實是沒有意義的,因為== 號可以更簡單的完成
-
存在的的真實意義是被子類重寫,以便比較對象的內容。
Object類:clone方法
protected Object clone()
當某個對象調用這個方法時,這個方法會複製一個一模一樣的新對象返回。
分類:
-
淺克隆:拷貝出的新對象,與原對象中的數據一模一樣(引用類型拷貝的只是地址)
-
深克隆:
對象中基本類型的數據直接拷貝。
對象中的字元串數據拷貝的還是地址。
對象中還包含的其他對象,不會拷貝地址,會創建新對象。
Objects
Objects是一個工具類,提供了更安全的方式比較2個對象。
Student s = null;
-
s.equals(s2); 空指針異常
-
Objects.equals(s, s2); 返回false
Objects常見方法:
方法名 | 說明 |
---|---|
public static boolean equals(Object a, Object b) | 比較兩個對象的,底層會先進行非空判斷,從而可以避免空指針異常。再進行equals比較 |
public static boolean isNull(Object obj) | 判斷變數是否為null ,為null返回true ,反之返回false |
StringBuilder
StringBuilder稱為可變字元串容器,操作字元串的性能優於String類。
StringBuilder拼接操作字元串的手段:性能好
String才是我們的目的:結果數據的類型
StringJoiner
JDK8開始才有的,跟StringBuilder一樣,也是用來操作字元串的,也可以看成是一個容器,創建之後裡面的內容是可變的。
好處:不僅能提高字元串的操作效率,並且在有些場景下使用它操作字元串,代碼會更簡潔
public static String getArrayData(int[] arr) { // 拼接最終的結果:[11, 22, 33, 44, 55] // 1.判斷arr是否為null if (arr == null) { return null; } StringJoiner sj = new StringJoiner(", ", "[", "]"); for (int i = 0; i < arr.length; i++) { sj.add(arr[i] + ""); } return sj.toString(); }
Math
Math相當於是一個工具類,提供的方法全部是完成數學操作的靜態方法,直接用類名調用即可。
目標:熟悉Math類的方法就行了。
// 目標:看看Math類的方法就行了。 // 1、取絕對值(拿到的結果一定是正數) System.out.println(Math.abs(-12)); System.out.println(Math.abs(-12.2)); System.out.println(Math.abs(1443)); // 2、向上取整 System.out.println(Math.ceil(3.000001)); // 4.0 System.out.println(Math.ceil(4.0)); // 4.0 // 3、向下取整 System.out.println(Math.floor(3.9999999)); // 3.0 System.out.println(Math.floor(3.0)); // 3.0 // 4、四捨五入 System.out.println(Math.round(3.45555)); // 3 System.out.println(Math.round(3.500001)); // 4 // 5、取較大值 System.out.println(Math.max(10, 20)); // 6、取次方 System.out.println(Math.pow(2, 4)); // 16.0 System.out.println(Math.pow(3, 2)); // 9.0 // 7、取隨機數(用的少) System.out.println(Math.random()); // [0.0 , 1.0) (包前不包後)
System
System代表系統,也是一個工具類的形式,裡面的方法都是與系統操作相關的靜態方法。
// 目標:瞭解下System類的幾個方法。 // 1、終止虛擬機(幹掉全部Java程式的執行) System.out.println("程式開始。。。"); // System.exit(0); // 0代表是人為認為的正常終止的 (慎用) // 2、獲取當前系統的時間信息的。(時間毫秒值:從1970-1-1 0:0:0開始走到此刻的總的毫秒值。1s = 1000ms) long time = System.currentTimeMillis(); System.out.println(time); // 通常用來統計程式執行的性能問題。 for (int i = 0; i < 2000; i++) { System.out.println("輸出:" + i); } long time2 = System.currentTimeMillis(); System.out.println("耗時:" + (time2 - time) / 1000.0 + "s");
Runtime
public static void main(String[] args) throws IOException, InterruptedException { // 目標:瞭解下Runtime的幾個常見方法。 // 1、public static Runtime getRuntime() 返回與當前Java應用程式關聯的運行時對象。 Runtime r = Runtime.getRuntime(); // 2、public void exit(int status) 終止當前運行的虛擬機,該參數用作狀態代碼; 按照慣例,非零狀態代碼表示異常終止。 // r.exit(0); // 3、public int availableProcessors(): 獲取虛擬機能夠使用的處理器數。 System.out.println(r.availableProcessors()); // 4、public long totalMemory() 返回Java虛擬機中的記憶體總量。 System.out.println(r.totalMemory() / 1024.0 / 1024.0 + "MB"); // 1024 = 1K 1024 * 1024 = 1M // 5、public long freeMemory() 返回Java虛擬機中的可用記憶體量 System.out.println(r.freeMemory() / 1024.0 / 1024.0 + "MB"); // 6、public Process exec(String command) 啟動某個程式,並返回代表該程式的對象。 // r.exec("C:\\SoftWare\\XMind2020\\XMind.exe"); Process p = r.exec("QQ"); Thread.sleep(5000); // 讓程式在這裡暫停5s後繼續往下走!! p.destroy(); // 銷毀!關閉程式! }
BigDecimal
封裝double類型的數據進行運算的,為瞭解決計算精度問題
目前:浮點型 double直接運算是不精準的。
-
double a1 = 0.1
-
double b1 = 0.2;
-
double c1 = a1 + b1;
c1: 0.3000000000000001
把浮點型數據進行封裝後再運算
double a = 0.1; double b = 0.2; double c = a + b; System.out.println(c); System.out.println("--------------------------"); // 使用BigDecimal規避浮點數運算過程中可能出現的精度失真問題 BigDecimal a1 = BigDecimal.valueOf(a); BigDecimal b1 = BigDecimal.valueOf(b); // BigDecimal c1 = a1.add(b1); // BigDecimal c1 = a1.subtract(b1); // BigDecimal c1 = a1.multiply(b1); BigDecimal c1 = a1.divide(b1); System.out.println(c1); // 0.3 BigDecimal c2 = a1.divide(b1, 2, RoundingMode.Half_Up);
日期與時間
Date
-
作用:代表當前此刻日期和時間的。
-
構建對象和常用方法:
Date d = new Date(); long time = d.getTime(); Date d2 = new Date(time) // 把時間毫秒值轉換成日期對象。 public void setTime(long time): // 設計日期對象為當前時間毫秒值對應的日期。 d2.setTime(time);
SimpleDateFormat
-
作用:格式化、解析時間的。
-
構建對象:
public SimpleDateFormat(String pattern)
-
方法
-
public String format(Date d)
-
格式化日期對象
-
-
public String format(Object o)
-
格式化時間毫秒值
-
-
public Date parse(String date):
-
把字元串時間解析成日期對象
-
// 目標:掌握簡單日期格式化類:SimpleDateFormat的使用。 // 1、創建一個簡單日期格式化對象:封裝時間格式。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss:SSS EEE a"); // 2、創建日期對象 Date d = new Date(); System.out.println(d); // 3、開始使用簡單日期格式化對象負責格式化日期成為我們喜歡的字元串時間形式 String rs = sdf.format(d); System.out.println(rs); // 4、可以格式化時間毫秒值 long time = d.getTime() + 121 * 1000; System.out.println(sdf.format(time));
-
字元串日期解析
public class SimpleDateFormatDemo2 { public static void main(String[] args) throws ParseException { // 目標2:掌握簡單日期格式化的解析操作。 // 需要:把字元串時間解析成日期對象 String dateStr = "2022-11-11 11:11:12"; // 1、創建簡單日期格式化對象。 // 註意、註意、註意: 解析時間的格式必須與被解析時間的格式一模一樣,否則報錯! SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 2、開始解析了(會報錯的,把異常拋出去,什麼意思,今天會詳細講解) Date d = sdf.parse(dateStr); System.out.println(d); } }
-
Calendar
-
作用:代表的是系統此刻時間對應的日曆,通過它可以單獨獲取、修改時間中的年、月、日、時、分、秒等
-
構建對象和常用方法:
// 目標:掌握日曆類的使用。 // 1、得到日曆對象 Calendar c = Calendar.getInstance(); System.out.println(c); // 2、獲取信息:public int get(int field): int year = c.get(Calendar.YEAR); System.out.println(year); int days = c.get(Calendar.DAY_OF_YEAR); System.out.println(days); // 3、獲取日期對象(瞭解) Date d = c.getTime(); System.out.println(d); long time0 = d.getTime(); // 4、時間毫秒值(瞭解) long time = c.getTimeInMillis(); System.out.println(time); // 5、修改日曆的時間(需求:問89天後是什麼日子) // 參數一:信息欄位:一年中的第幾天 // 參數二:往後加多少天。 c.add(Calendar.DAY_OF_YEAR, 89); Date d1 = c.getTime(); System.out.println(d1); c.set(Calendar.DAY_OF_YEAR, 364); // 直接修改日曆到某一天! Date d2 = c.getTime(); System.out.println(d2);
JDK8新增日期類
LocalDate、LocalTime、LocalDateTime
LocalDate:代表本地日期(年、月、日、星期) LocalTime:代表本地時間(時、分、秒、納秒) LocalDateTime:代表本地日期、時間(年、月、日、星期、時、分、秒、納秒)
ZoneId、ZonedDateTime
提供了一些帶時區的相關方法。
Instant
代表時間線上的某個時刻/時間戳
通過獲取Instant的對象可以拿到此刻的時間,該時間由兩部分組成:從1970-01-01 00:00:00 開始走到此刻的總秒數 + 不夠1秒的納秒數
DateTimeFormatter
可以用來格式化或者解析日期時間
public class Demo { // 目標:掌握JDK 8新增的DateTimeFormatter格式化器的用法。 public static void main(String[] args) { // 1、創建一個日期時間格式化器對象出來。 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); // 2、對時間進行格式化 LocalDateTime now = LocalDateTime.now(); System.out.println(now); String rs = formatter.format(now); // 正向格式化 System.out.println(rs); // 3、格式化時間,其實還有一種方案。 String rs2 = now.format(formatter); // 反向格式化 System.out.println(rs2); // 4、解析時間:解析時間一般使用LocalDateTime提供的解析方法來解析。 String dateStr = "2029年12月12日 12:12:11"; LocalDateTime ldt = LocalDateTime.parse(dateStr, formatter); System.out.println(ldt); } }
Period、Duration
Period(一段時期)
l可以用於計算兩個 LocalDate對象 相差的年數、月數、天數。
public class PeriodDemo1 { public static void main(String[] args) { //張二狗的生日是1998年12月3日,請問到今天張二狗活了多長時間? => 基於Period進行差值計算 LocalDate ergouBirthday = LocalDate.of(1998, 12, 3); LocalDate now = LocalDate.now(); //public static Period between(LocalDate l1,LocalDate l2) Period period = Period.between(ergouBirthday, now); //基於get方法獲取差額信息的數據信息 getMonths:獲取的差額信息中的月份【必須和年搭配在一起看】 //如果想查看總月份可以基於toTotalMonth進行獲取 int years = period.getYears(); int months = period.getMonths(); int days = period.getDays(); System.out.println(years + " " + months + " " + days); } }
Duration(持續時間)
public class DurationDemo1 { public static void main(String[] args) { //晚上7:30開始考試,小明9:25:30秒交卷了 【計算小明總共答卷的耗時時間】 LocalTime startTime = LocalTime.of(19, 30, 0); LocalTime mingTime = LocalTime.of(21, 25, 30); //獲取兩個時間的差值 Duration duration = Duration.between(startTime, mingTime); //可以基於get方法來獲取差值中的相關信息 long seconds = duration.getSeconds(); System.out.println("【seconds】:" + seconds); //可以基於to方法來獲取差值中的不同單位的總信息【總共幾小時】【總共多少分鐘】【總共多少秒】 long hours = duration.toHours(); System.out.println("【hours】:" + hours); long minutes = duration.toMinutes(); System.out.println("【minutes】:" + minutes); long millis = duration.toMillis(); System.out.println("【millis】:" + millis); } }