Java面向對象進階第四天(常用API)

来源:https://www.cnblogs.com/yaomagician/archive/2023/02/26/17157573.html
-Advertisement-
Play Games

常用API API概述 API全稱是應用程式編程介面,是Java寫好的程式,程式員可以直接調用。 Object類:toString方法 Object是祖宗類,它裡面的方法,一切子類對象都可以使用。 public String toString() 預設是返回當前對象的地址信息。 Student s ...


常用API

API概述

API全稱是應用程式編程介面,是Java寫好的程式,程式員可以直接調用。

Object類:toString方法

Object是祖宗類,它裡面的方法,一切子類對象都可以使用。

public String toString()

  • 預設是返回當前對象的地址信息。

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()

當某個對象調用這個方法時,這個方法會複製一個一模一樣的新對象返回。

分類:

  1. 淺克隆:拷貝出的新對象,與原對象中的數據一模一樣(引用類型拷貝的只是地址)

  2. 深克隆:

    對象中基本類型的數據直接拷貝。

    對象中的字元串數據拷貝的還是地址。

    對象中還包含的其他對象,不會拷貝地址,會創建新對象。

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(持續時間)

可以用於計算兩個時間對象相差的天數、小時數、分數、秒數、納秒數;支持LocalTime、LocalDateTime、Instant等時間。

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);
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 關於LWIP網路協議在嵌入式設備使用越來越廣泛,還是要好好學習一下,之前也看過一些資料,總是學了又忘(可能實踐的太少了吧!!)。所以本文重新整理一下筆記。共同進步! (一)ARP基礎知識 (1)ARP協議的本質: ​ ARP協議的基本功能是使用目標主機的IP地址,查詢其對應的MAC地址,來進行底層鏈 ...
  • 前言 Pod因記憶體不足消失,可能由2種不同的故障導致,其中對故障2的復現、監控比較繁瑣、耗時、棘手; 故障1:Pod自身記憶體不足 Pod中的運行進程占用空間超出了Pod設置的Limit限制,導致該Pod中進程被Pod內的OS內核Kill掉; 此時Pod的Status為OOMKilled,Pod的OO ...
  • 一、IDEA連接本地MySQL 點擊IDEA右側欄Database 在Data Sources中選擇MySQL (host 欄localhost port 欄 3306 user欄 root【資料庫用戶名】 password欄 root【資料庫密碼】 database欄 可填可不填) 填完後先點擊左 ...
  • Redis事務定義 Redis 事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。 Redis 事務的主要作用就是串聯多個命令防止別的命令插隊。 Multi、Exec、discard Redis 事務中有 Multi、Ex ...
  • 1. 需求:我們現在需要寫一個 foo 函數,這個函數返迴首次調用時的 Date 對象,註意是首次。 使用場景:當我們每次都需要進行條件判斷,其實只需要判斷一次,接下來的使用方式都不會發生改變的時候,想想是否可以考慮使用惰性函數。 惰性函數:顧名思義,有點懶惰,懶到事件只處理一次,當然不是值整個函數 ...
  • 本章將繼續和大家分享Vue的一些基礎知識。話不多說,下麵我們直接上代碼: 本文內容大部分摘自Vue的官網:https://v2.cn.vuejs.org/v2/guide/ 首先我們先來看一下Demo的目錄結構,如下所示: 一、偵聽器 <!DOCTYPE html> <html lang="en"> ...
  • 在ES6中新增了一個很重要的特性: class(類)。作為一個在2015年就出了的特性, 相信很多小伙伴對class並不陌生。但是在日常開發中使用class的頻率感覺並不高(可能僅限於作者),感覺對class總有種一知半解的感覺。今天就帶著小伙伴們一起,好好剖析剖析這個特性。 1.什麼是class ...
  • ———————————————— 版權聲明:本文為CSDN博主「LW0512」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/LW0512/article/details/120287699 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...