Java核心技術梳理-基礎類庫

来源:https://www.cnblogs.com/yuanqinnan/archive/2019/04/24/10757459.html
-Advertisement-
Play Games

一、引言 Oracle為Java提供了豐富的基礎類庫,Java 8 提供了4000多個基礎類庫,熟練掌握這些基礎類庫可以提高我們的開發效率,當然,記住所有的API是不可能也沒必要的,我們可以通過API文檔或直接網上搜索來逐漸熟悉大部分類的功能和方法,下麵我們來學習一些基礎類庫。 二、Scanner ...


一、引言

 

Oracle為Java提供了豐富的基礎類庫,Java 8 提供了4000多個基礎類庫,熟練掌握這些基礎類庫可以提高我們的開發效率,當然,記住所有的API是不可能也沒必要的,我們可以通過API文檔或直接網上搜索來逐漸熟悉大部分類的功能和方法,下麵我們來學習一些基礎類庫。

二、Scanner

Scanner類可以很方便的獲取用戶的鍵盤輸入,是一個基於正則表達式的文本掃描器,可以從文件、輸入流、字元串中解析出字元串和基本類型值,構造器也是以文件、輸入流、字元串為數據源進行構造,主要有兩種方法:

  • hasNextXxx():是否還有下一個Xxx類型輸入項。

  • nextXxx():獲取下一個Xxx輸入項。
//鍵盤輸入
Scanner scanner = new Scanner(System.in);
//回車作為分隔符
scanner.useDelimiter("\n");
while (scanner.hasNext()) {
    System.out.println(scanner.next());
}

預設使用空白(空格、tab空白、回車)來進行項之間的分隔符。我們也可以直接按照行來進行分隔,調用下麵方法:

  • hasNextLine

  • nextLine

Scanner 還可以讀取文件輸入

try {
    Scanner scannerfile=new Scanner(new File("123.txt"));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

三、系統相關

3.1 System

System類代表當前Java程式的運行平臺,System不能被創建,可以獲取環境變數,系統屬性,還提供了載入文件和動態鏈接庫的方法。

//鍵盤輸入
Scanner scanner = new Scanner(System.in);
//回車作為分隔符
scanner.useDelimiter("\n");
while (scanner.hasNext()) {
    System.out.println(scanner.next());
}
try {
    Scanner scannerfile=new Scanner(new File("123.txt"));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

3.2 Runtime

 Runtime類代表Java程式的運行環境,我們可以通過此類獲取JVM信息,如處理器數量,記憶體信息。並可以使用gc進行垃圾回收。

Runtime runtime = Runtime.getRuntime();
System.out.println("處理器數量:" + runtime.availableProcessors());
System.out.println("可用最大記憶體數:"+runtime.maxMemory());
System.out.println("空閑記憶體:"+runtime.freeMemory());
System.out.println("總記憶體數:"+runtime.totalMemory());

四、常用類

 4.1 Object

Object 是所有類、數組、枚舉類的父類,任何類型都可以賦給Object,有以下常用的一些方法:

  • boolean equals(Object obj) 判斷指定對象與該對象是否相等。

  • void finalize() 垃圾回收器調用此方法來清理對象資源。

  • Class<?> getClass() 返回該對象運行時類。

  • int hashCode() 返回該對象的hash值。

  • toString() 返回該對象字元串表示。

Object還有控制線程的幾個方法,wait()、notify()、notifyAll()。

Java 7 之後新增了Objects方法,裡面提供了工具方法來操作對象,這些工具方法大多是空指針安全的,使用更安全。

4.2 字元串類

字元串就是一連串字元序列,Java提供了String、StringBuffer、StringBuilder 三個類進行字元串封裝和處理。其中StringBuffer、StringBuilder基本相似,只是StringBuffer線程安全而StringBuilder線程不安全。

String類是不可變類,一旦創建,就不可改變,直至被銷毀。String類的不可變性,後面有機會再詳解。

String類提供了很多構造器:

 

String也提供了大量的方法來操作字元串對象,我們學習一些常用的方法:

String s = new String("abcdefg");
//獲取字元串中指定位置的字元
System.out.println(s.charAt(1));
//比較字元串的大小
System.out.println(s.compareTo("adasd"));
//將該字元串與str連接在一起
s.concat("higk");
System.out.println(s);
//與StringBuffer對象比較,值相等則返回true
System.out.println(s.contentEquals(new StringBuffer("abcd")));
//將字元數組連綴成字元串
System.out.println(String.copyValueOf(new char[]{'a', 'b'}));
//將字元數組的子數組連綴成字元串
System.out.println((String.copyValueOf(new char[]{'a', 'b', 'c', 'd', 'e'}, 2, 3)));
//將字元串與指定對象比較
System.out.println(s.equals("abcdefg"));
//忽略大小寫字元串與指定對象比較
System.out.println(s.equalsIgnoreCase("ABcdefg"));
//將string對象轉換成Byte數組
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
    System.out.println(bytes[i]);
}
char[] s1 = new char[]{'晚', '安', '!', '世', '界'};
String s2 = new String("。!?");
//將字元串從srcBegin開始,到srcEnd結束複製到字元串數組串中,dstBegin為字元串數組的初始位置
s2.getChars(0, 2, s1, 2);
for (int i = 0; i < s1.length; i++) {
    System.out.println(s1[i]);
}
//查詢字元在字元串中第一次出現的位置
System.out.println(s.indexOf('b'));
//查詢字元在字元串中從fromIndex後第一次出現在的位置
System.out.println(s.indexOf('b', 2));
//查詢子字元串在字元串中第一次出現的位置
System.out.println(s.indexOf("bc"));
//查詢子字元在字元串中從fromIndex後第一次出現在的位置
System.out.println(s.indexOf("bc", 2));
//查詢字元在字元串中最後一次出現的位置
System.out.println(s.lastIndexOf('b'));
//查詢字元在字元串中從fromIndex後最後一次出現在的位置
System.out.println(s.lastIndexOf('b', 2));
//查詢子字元串在字元串中最後一次出現的位置
System.out.println(s.lastIndexOf("bc"));
//查詢子字元在字元串中從fromIndex後最後一次出現在的位置
System.out.println(s.lastIndexOf("bc", 2));
//字元串長度
System.out.println(s.length());
//替換字元串
s.replace('a', 'b');
System.out.println(s);
//對象是否以某字元串結尾
System.out.println(s.startsWith("ab"));
//String 對象是以某字串結尾
System.out.println(s.endsWith("fg"));
//獲取從beginIndex位置開始到結束的子字元串
String substring = s.substring(4);
System.out.println(substring);
//獲取從beginIndex位置開始到endIndex結束的子字元串
String substring1 = s.substring(4, 6);
System.out.println(substring1);
char[] chars = s.toCharArray();
//轉換成char數組
for (int i = 0; i <chars.length ; i++) {
    System.out.println(chars[i]);
}
//將字元串轉換成小寫
String lowerCase = s.toLowerCase();
System.out.println(lowerCase);
//將字元串轉換成大寫
String upperCase = s.toUpperCase();
System.out.println(upperCase);

由於String的不可變性,頻繁操作String時會產生大量的臨時變數,這時我們可以使用StringBuilder和StringBuffer,兩個類的用戶基本一致,在不需要線程安全時,建議使用StringBuilder。

StringBuilder sb=new StringBuilder();
//追加
sb.append("java");
System.out.println(sb);
//插入
sb.insert(0,"hello ");
System.out.println(sb);
//替換
sb.replace(5,6,",");
System.out.println(sb);
//反轉
sb.reverse();
System.out.println(sb);
//長度與容量
System.out.println(sb.length()+ sb.capacity());

4.3 Math 類

Java 提供了Math來進行複雜的數學運算,我們記住一些常用的就行:

//返回小於目標數的最大整數
System.out.println(Math.floor(-1.57));
//返回大於目標數的最小整數
System.out.println(Math.ceil(1.57));
//四捨五入
System.out.println(Math.round(2.3));
//取絕對值
System.out.println(Math.abs(-4.6));
//取最大數
System.out.println(Math.max(1,3));

4.4 Random

Random類專門用於生產偽隨機數,有兩個構造器,一個已當前系統時間作為種子,一個已外部輸入數字作為種子,常用的方法有:

Random random = new Random();
//生成一個int範圍內的隨機數
System.out.println(random.nextInt());
//生成0-30範圍的隨機數
System.out.println(random.nextInt(30));
//生成0.0-1.0 的隨機數
System.out.println(random.nextDouble());

五、日期、時間類

ava提供了Date和Calendar來處理日期和時間,但Date不僅不支持國際化,而且不同屬性也使用了前後矛盾的偏移量,Java 8 又提供了全新的日期時間庫。

5.1 Date

Date 現在在用的有兩個構造器:

  • Date() :生成一個代表當前日期時間的date對象

  • Date(long date):指定的long型整數來生成一個Date對象

Date 還在使用的方法也很少:

Date date = new Date();
Date date1 = new Date(System.currentTimeMillis()+100);
//測試該日期是否在指定日期之後
System.out.println(date.after(date1));
//比較日期大小
System.out.println(date.compareTo(date1));

Date類設計的並不好,對日期的操作推薦使用Calendar。

5.2 Calendar 類

Calendar 類是一個抽象類,是所有日曆的模板,提供了靜態getInstance()方法獲取Calendar對象,這個方法是通過獲取TimeZone和Locale 來創建Calendar。Calendar 和Date都是表示日期的類,他們可以互相轉換。

Calendar calendar = Calendar.getInstance();
Date date2 = calendar.getTime();
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date2);

Calendar 類提供了大量訪問、修改日期時間的方法,常用方法如下:

//給指定的欄位增加或者減去時間量,如果指定量超過最大值,則進位
calendar.add(Calendar.YEAR,1);
//獲取指定的欄位值
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DATE));
//設置日期值
calendar.set(2003,10,2,10,50,10);
//給指定的欄位增加或者減去時間量,如果指定量超過最大值,不進位
calendar.roll(Calendar.YEAR,13);

5.3 Java 8新增的時間日期包

Java 8 提供了java.time 包來處理日期和時間,常用的類:

  • Clock:獲取指定時區的當前日期、時間。

  • Duration:代表持續時間,可以方便的獲取一段時間。

  • Instant:代表具體時刻,可以精確到納秒。

  • LocalDate:該類代表不帶時區的日期。

  • LocalTime:該類代表不帶時區的時間。

  • LocalDateTime:該類代表不帶時區的日期、時間。

  • MonthDay:該類代表月日。

  • Year:代表年。

  • YearMonth:代表年月。

這些類的方法比較簡單,需要使用時再通過API文檔查找。

六、正則表達式

正則表達式是強大的字元串處理工具,可以對字元串進行查找、提取、分隔、替換等操作。

Java提供了Pattern和Matcher來使用正則表達式

//將字元串編譯成Pattern對象
        Pattern pattern = Pattern.compile("a*b");
        //使用Pattern創建Matcher對象
        Matcher matcher = pattern.matcher("aaaaab");
        System.out.println(matcher.matches());
        //只能使用一次,效率不高
        Pattern.matches("a*b", "aaabbb");
        String s = "XXX:13892329111,XXX:18922121231,XXX:13824322341";
        Matcher matcher1 = Pattern.compile("1\\d{10}").matcher(s);
        //返回目標字元串中是否包含匹配的字串
        while (matcher1.find()) {
            //返回上一次匹配的字串
            System.out.println(matcher1.group());
        }

七、日期、時間格式化器

對於日期的展示,我們一般的會格式化處理,Java提供了幾個類來進行日期格式化處理。

7.1 SimpleDateFormat

SimpleDateFormat 既可以將日期按照固定格式轉成字元串,也可以將特殊日期字元串轉成日期

//將日期轉換成固定格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
System.out.println(simpleDateFormat.format(date));
//日期字元串
String str = "14###三月##21";
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("y###MMM##d");
//將日期字元串解析成日期,主要格式要匹配的上,不然會報錯
System.out.println(simpleDateFormat.format(simpleDateFormat1.parse(str)));

7.2  DateTimeFormatter

DateTimeFormatter 是Java 8提供的增強版的日期格式器類,功能很強大,DateTimeFormatter中包含了大量的靜態化常量,這些靜態化常量本身就是DateTimeFormatter實例

我們可以通過常量來創建格式化器,也可以使用不同風格的枚舉值來創建

DateTimeFormatter[] formatters=new DateTimeFormatter[]{
        //常量創建
        DateTimeFormatter.ISO_DATE_TIME,
        DateTimeFormatter.ISO_LOCAL_DATE,
        DateTimeFormatter.ISO_DATE,
        //枚舉值創建
        DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL,FormatStyle.MEDIUM),
        //模式字元串
        DateTimeFormatter.ofPattern("Gyyyy%%MMM%%dd")
};
LocalDateTime localDate = LocalDateTime.now();

for (int i = 0; i <formatters.length ; i++) {
    //兩種方式格式化日期
    System.out.println(formatters[i].format(localDate));
    System.out.println(localDate.format(formatters[i]));
}

DateTimeFormatter 也可以將字元串直接轉成日期,用法與SimpleDateFormat 相同。


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

-Advertisement-
Play Games
更多相關文章
  • 1 三次作業的設計策略 經過了上一單元的訓練,我也積累了一些設計策略上的經驗。在這一單元的一開始,我便儘可能地把問題中的各個功能實體區分開來,分別封裝成類,以便於隨後作業中新需求的加入。與此同時,我也在有意地控制住方法的規模,依照程式邏輯層次化地設計方法,使得每個方法都不至於過分臃腫,從而增加代碼的 ...
  • 1. " java爬蟲系列第一講 爬蟲入門(爬取動作片列表)" 2. " java爬蟲系列第二講 爬取最新動作電影《海王》迅雷下載地址" 3. " java爬蟲系列第三講 獲取頁面中絕對路徑的各種方法" 4. " java爬蟲系列第四講 採集"極客時間"專欄文章、視頻專輯" 5. "java爬蟲系列 ...
  • [TOC] 電梯作業總結 程式結構與複雜度的分析 第一次作業 1.設計思路 第一次作業是電梯作業的第一次,也是我多線程變成的第一次實踐。任務是編寫一個多線程實時電梯系統,採用FAFS的調度方式。由於第一次作業中沒有涉及到多部電梯以及捎帶的情況,因此來說是比較簡單的。我採用的是指導書提示部分中的模式, ...
  • 這裡演示的是前期框架的搭建,剩下的Controller就很簡單了 ...
  • 前幾天,棧長分享了 《 "Spring Cloud Eureka 註冊中心集群搭建,Greenwich 最新版!" 》,今天來分享下 Spring Cloud Eureka 常用的一些參數配置及說明。 Spring Boot 的配置參考Java技術棧微信公眾號往期 Spring Boot 系列文章, ...
  • [TOC] 函數的嵌套定義(掌握) 函數內部定義的函數,無法在函數外部使用內部定義的函數。 from f2 現在有一個需求,通過給一個函數傳參即可求得某個圓的面積或者圓的周長。也就是說把一堆工具丟進工具箱內,之後想要獲得某個工具,直接從工具箱中獲取就行了。 circle(10): 314.15926 ...
  • 一、前言 Go(又稱Golang)是Google開發的一種靜態強類型、編譯型的編程語言。 Go語言的主要特點包括:自動垃圾回收、更豐富的內置類型、函數多返回值、錯誤處理、匿名函數和閉包、類型和介面、併發編程、反射、語言交互性。 二、安裝配置 Go語言的安裝是很簡單的,下載安裝包進行安裝就好了,但是不 ...
  • [TOC] 函數是第一類對象,即函數可以被當做數據處理。 函數對象的四大功能(掌握) 1.引用 2.當作參數傳給一個函數 from func 3.可以當作函數的返回值 from func 4.可以當作容器類型的元素 from func 練習(掌握) '1': 支付, '2': 提現, '3': 退出 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...