1. 程式人生 > >Java基礎-基礎工具(2)

Java基礎-基礎工具(2)

一、常用類

(一) 字串

1.字串介紹

字元序列: 把多個字元按照一定的順序排列起來。

字串: 把多個字串連起來。

字串分類:
不可變的字串: String:當前物件建立完畢之後,該物件的內容(字串序列)是不能改變的,一旦內容改變就是一個新的物件。
可變的字串: StringBuilder/StringBuffer:當物件建立完畢之後,該物件的內容可以發生改變,當內容發生改變時,物件保持不變。

字串的本質:
字串的底層其實是char[],char表示一個字元,陣列表示同一種類型的多個數據。

String str = "ABCDEFG"; // 定義一個字串物件
Char[] cs = new char[]{'A','B','C','D','E','F','G'}; // 等價於上面

String物件的建立:
① 直接賦一個字面量:String str1 = “ABCD”;
② 通過構造器建立:String str2 = new String(“ABCD”);

String物件的空值:
① 表示引用為空(null):String str1 = null; 沒有初始化,沒有分配記憶體空間。
② 內容為空字串:String str2 = “”; 已經初始化,分配了記憶體空間,但是沒有內容。

判斷字串非空:
① 引用不能為空(null)。
② 字元內容不能為空字串(”“)。

字串的比較操作:
① 使用“==”號:只能比較引用的記憶體地址是否相同。
② 使用equals方法:在Object類中和“==”相同,建議子類覆蓋equals方法比較自己的內容。
String類覆蓋euqals方法比較的是字元內容。

2.String面試題

面試題一:
下列程式碼分別建立了幾個String物件?

String str1 = "ABCD";
String str2 = new String("ABCD");

第一行:最多建立一個String物件,最少不建立String物件。如果常量池中,已經存在”ABCD”,那麼str1直接引用,此時不建立String物件。否則,先在常量池先建立”ABCD”記憶體空間,再引用。

第二行:最多建立兩個String物件,至少建立一個String物件。new 關鍵字:絕對會在堆空間,建立記憶體區域,所以至少建立一個String物件。

面試題二:
下面String物件,彼此之間是否相等?

private static String getXx(){
    return "AB";
}

public static void main(String[] args){
    String str1 = "ABCD";

    String str2 = "A" + "B" + "C" + "D"; // true
    String str3 = "AB" + "CD"; // true
    String str4 = new String("ABCD"); // false
    String temp = "AB";
    String str5 = temp + "CD"; // false
    String str6 = getXx() + "CD"; // false
}

String物件比較:
① 單獨使用”“引號建立的字串都是直接量,編譯期就已經確定,儲存到常量池中。
② 使用new String(“”)建立的物件會儲存到堆記憶體中,是執行時期才建立。
③ 使用只包含直接量的字串連線,符合如:”aa” + “bb”。建立的也是直接量編譯期就能確定。
④ 使用包含String直接量(無final修飾符)的字串表單式(如”aa” + s1)建立的物件是執行期才建立的,存在堆中。
⑤通過變數/呼叫方法去連線字串,都只能在執行時期才能確定變數的值和方法的返回值。不存在編譯優化操作。

3.String方法

String類中的常用方法(從API中去找下列方法):

1).String的建立和轉換:
① byte[] getBytes():把字串轉換為byte陣列。
② char[] tocharArray():把字串轉換為char陣列。
③ String(byte[] bytes):把byte陣列轉換為字串。
④ String(char[] value):把char陣列轉換為字串。

2).獲取字串資訊:
① int length():返回字串的長度。
② char charAt(int index):返回指定索引處的char值。
③ int indexOf(String str):返回指定子字串在此字串中第一次出現處的索引。
④ int lastIndexOf(String str):返回指定字串在此字串中最右邊出現處的索引。

3).字串比較判斷:
① boolean equals(Object anObject):將字串與指定物件進行比較。
② boolean equalslgnoreCase(String anotherString):將此String與另一個String比較,不考慮大小寫。
③ boolean contentEquals(charSequence cs):將此字串與指定的charSequence比較

4).字串大小寫轉換:
① String toUpperCase():將字串轉換為大寫
② String toLowerCase():將字串轉換為小寫

分別使用String、StringBuilder、StringBuffer來拼接30000次字串,對比各自損耗的時間:
經過測試:
String做字串拼接的時候,效能極低(耗時),原因是String是不可變的,每次內容改變都會在記憶體中建立新的物件。
String耗時:1964ms。
StringBuffer耗時:3ms。
StringBuilder耗時:1ms。
結論:以後拼接字串,統統使用StringBuffer/StringBuilder,不要使用String。

String和StringBuilder以及StringBuffer的區別:
StringBuilder和StringBuffer都是表示可變的字串,功能方法相同。

唯一的區別:
StringBuffer:StringBuffer中的方法都使用了synchronized修飾符,表示同步的。在多執行緒併發的時候可以保證執行緒安全,但是效能降低。
StringBuilder:StringBuilder中的方法都沒有使用synchronize修飾符,執行緒不安全,但效能最高。

使用了StringBuilder無參的構造器,在底層建立了一個長度為16的char陣列
char[] value = new char[16];
此時該陣列只能儲存16個字元,如果超過了就要自動擴容,自動擴容(建立長度更大的陣列,再把之前的陣列拷貝到新的陣列)。
此時效能極低,一般我們事先知道大概要儲存多少個字元,在構造器中就應該設定。

// 建立一個長度為80的char陣列
new Stringbuilder(80);

append(Object val):表示追加任意型別的資料。
StringBuilder deleteCharAt(int index):刪除字串中,指定位置的字元。

(二) 隨機數

隨機的生成任意一個數(理論上具有不可預見性)

Random類: 用於產生一個偽隨機數(通過相同的種子,產生的隨機數是相同的)。
ThreadLocalRandom類: 使用預設的種子(以當前系統時間作為種子)。
UUID類: 根據指定的種子。

ThreadLocalRandom:是Java7新增類,是Random類的子類,在多執行緒併發的情況下,ThreadLocalRandom相對於Random可以減少多執行緒資源的競爭,保證了執行緒的安全性。

public class ThreadLocalRandom extends Random{}

因為構造器是預設的訪問許可權,只能在java.util包中建立物件,故提供了一個方法ThreadLocalRandom.current()用於返回當前類物件。

ThreadLocalRandom random = ThreadLocalRandom.current();
// 生成[34,213)之間的隨機數
System.out.println(random.nextInt(34,213));

UUID:通用唯一識別:Universally Unique Identifier,在一臺機器上生成的數字,它保證對同一時空中所有的機器都是唯一的。

UUID是一個128位長的數字,一般用16進製表示。演算法的核心思想是結合機器的網絡卡,當地時間,一個隨機數來生成UUID。

我們一般用來表示:隨機的唯一字串。

String uuid = UUID.randomUUID().toString();
System.out.println(uuid);

(三) 日期

日期相關類:
Date類:java.util.Date類,不是java.sql.Date類!表示特定的瞬間,精確到毫秒。
DateFormat/SimpleDateFormat類:日期格式化類。
Calendar類:Java8中重新為日期定義的新的API。

Date類中大量的方法都已經過時了,但過時不代表不能使用,只是不建議使用,官方建議使用Calendar類。

日期格式化操作:
DateFormat:可以完成日期的格式化操作。
格式化(format):Date型別物件–>String物件:String format(Date date)
解析(Parse):String型別時間–>Date型別:Date parse(String source)

DateFormat轉換的格式是固定的。

SimpleDateFormat類:是DateFormat的子類,支援自定義格式模式。

日曆類(Calendar): 是抽象類,表示日曆,比Date更強大。

// 建立日曆物件
Calendar c = Calendar.getInstancel();

int get(int field) 返回給定日曆欄位(年,月,日,時,分,秒)的值。

// Calendar轉換為Date型別
Date d = c.getTime();

// void add(int field,int amount) 根據日曆的規則,為給定的日曆欄位新增或減去指定的時間量
System.out.println("日="+c.get(Calendar.DAY_OF_MONTH));
c.add(Calendar.DAY_OF_MONTH,1000)
System.out.println(c.getTime().toLocaleString())

(四) 正則表示式

主要用於(匹配判斷,分割操作,替換操作)

反饋與建議

感謝你閱讀這篇部落格。如果您喜歡這篇部落格就請關注我和朋友一起分享吧!

相關推薦

Java基礎-基礎工具(2)

一、常用類 (一) 字串 1.字串介紹 字元序列: 把多個字元按照一定的順序排列起來。 字串: 把多個字串連起來。 字串分類: ① 不可變的字串: String:當前物件建立完畢之後,該物件的內容(字串序列)是不能改變的,一旦內容改變就是一個

java並發工具學習 01 進程與線程基礎

ava 多處理器 科技 進程通訊 存在 空間 會有 過時 主線程 在並發程序設計中,有兩個基本的單位:進程和線程。並發程序設計主要是針對線程而言,當然,進程也是非常重要的。操作系統包含很多進程與線程。即使在單核系統中(systems that only have a sin

java基礎筆記(2)----流程控制

特性 byte 增加 基本 執行 size 判斷 efault 跳轉 java流程控制結構包括順序結構,分支結構,循環結構。 順序結構: 程序從上到下依次執行,中間沒有任何判斷和跳轉。 代碼如下: package c

JAVA Web基礎2-JSP九大內置對象

上下文 inf AD 應對 版本號 提交 contex har post 在jsp開發中會頻繁使用到一些對象,如ServletContext HttpSession PageContext等.如果每次我們在jsp頁面中需要使用這些對象都要自己親自動手創建就會特別的繁瑣.SU

java基礎74 待續2(網頁知識)

tps str log strong body cnblogs logs blank targe 1、待續 待續 原創作者:DSHORE 作者主頁:http://www.cnblogs.com/dshore123/ 原文出自:

java基礎75 待續2(網頁知識)

謝謝 logs borde 幫助 www. targe 轉載 .com http 1、待續 待續 原創作者:DSHORE 作者主頁:http://www.cnblogs.com/dshore123/ 原文出自:https://ww

Java基礎部分(2

Java語言中常用的類和方法   方法格式 修飾符 返回值型別 方法名(引數型別 引數名1,引數型別 引數名2...){ 函式體; return 返回值; } //具體例項 public static void main(String[] args){ System

Java學習日誌14.2 (第一階段基礎

2018.10.22 天氣:晴 黑馬程式設計師養成記錄第二天 3.常見物件(數量詞) Greedy 數量詞 * X? X,一次或一次也沒有 * X X,零次或多次 * X+ X,一次或多次 * X{n} X,恰好 n 次 * X{n,} X,至少 n 次 * X{n,m} X,至少

Java 其他常用工具及其他基礎複習

以下內容為簡記複習,留個印象利於回顧。 每個標題後的內容為其方法及其簡單使用方式簡記。 System 靜態方法 gc(); exit(int status); currentTimeMillis(); arrayCopy(Obj src, int srcPos, Obj dest,

Java基礎復習2:程序註釋、標識符、關鍵字

變種 之間 符號 使用 類型 聲明 組元 stat 特點 一、程序註釋 Java程序的註釋一共分為三種:單行註釋、多行註釋以及文檔註釋。 單行註釋 Java中單行註釋是使用//來表示。//後面的語句都是註釋內容。程序不會執行。 多行註釋 Java中的多行註釋以/

【夾娃系列】java面試基礎知識儲備(¥2)——JVM記憶體劃分和記憶體溢位異常的原因和解決方法

JVM記憶體劃分和記憶體溢位 JVM記憶體劃分 記憶體溢位的異常和解決辦法 JVM記憶體劃分 堆:存放物件例項,被所有的執行緒共享的一塊區域。垃圾收集器管理的主要區域。 方法區:儲存虛擬機器載入的類資訊,常量,靜態變

JAVA高階基礎2)---Collection

Collection Collection介面成員方法         boolean add(E e)         boolean remo

Java基礎_基礎語法知識2

1.運算子 (1).什麼是運算子 運算子是指對常量和變數進行操作的符號。用於操作我們定義的變數和常量進行處理。 (2).運算子的分類 A:算數運算子 B:賦值運算子 C:比較運算子 D:邏輯運算子 E: 位運算子 F:三目運算子 (3).算術運算子 A:'+' a=3,b=4,a+b=7 表示對變數或

Java併發基礎-併發工具類(二)

併發工具類 本系列文章主要講解Java併發相關的內容,包括同步、鎖、訊號量、阻塞佇列、執行緒池等,整體思維導圖如下: 系列文章列表: 本文主要以例項講解Semaphore、阻塞佇列等內容。 Semaphore 基本概念和用途 Semaphore常稱訊號量,其維護了一個許可集,可以用來控制執行緒併發數。執行

Java程式設計基礎15——正則表示式&常用工具

1_正則表示式的概述和簡單使用 A:正則表示式 是指一個用來描述或者匹配一系列符合某個語法規則的字串的單個字串。其實就是一種規則。有自己特殊的應用。 作用:比如註冊郵箱,郵箱有使用者名稱和密碼,一般會對其限制長度,這個限制長度的事情就是正則表示式做的 B

工具 | Axure基礎操作 No.2

不廢話了,直接如之前一樣上操作圖才是正道。 1.設定文字型別為密碼或者檔案型別 可以在屬性中也選擇最大長度制定長度。 如果設定型別為檔案,在瀏覽器中就會自動變成選擇本地檔案的按鈕。 2.文字框提示文字 3.設定文本回車觸發事件 這裡的意思是文字框輸入狀態下按回車鍵,就能觸發

Java基礎入門學習2:變數與變數型別

大家好,歡迎回到我們的Java零基礎課程,今天我們要講的是變數與變數型別。 我們先來回憶一下我們小學時候學的未知數與方程。裡面的XYZ很是煩人。你有沒有想過在做不出題是,想把XYZ變為自己想要的數,那不是很好? 當然,在數學試卷上這麼做,大大的“X”就會出現在卷面上。不過,這可是資訊科,不是數學,在我

[Java] 藍橋杯 BASIC-2 基礎練習 01字串

問題描述對於長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:0000000001000100001100100請按從小到大的順序輸出這32種01串。 輸入格式本試題沒有

JAVA初級(一)認識八大基礎資料型別(2)-浮點型,字元型,布林型

我是導航 1,浮點型float,double 2,字元型char 3,String是什麼? 4,布林型boolean 一,浮點型:float,double 浮點型是什麼?通俗點說就是帶小數的數字。 float f = 0.3f; double b = 0.3; 什麼時

java基礎-jdk工具

1. 標準工具 這些工具都是JDK提供的,通常都是長期支援的工具,JDK承諾這些工具比較好用。不同系統、不同版本之間可能會有差異,但是不會突然就有一個工具消失。 1.1 基礎包 (extcheck, jar, java, javac, javadoc, javap) 工具