Java基礎(九)★ String,Pattern,包裝類,異常

API

 --- Application Programming Interfaces -> 應用程序接口

Object String Math Date 包裝類

異常 集合 映射

File IO 線程 套接字 反射 設計模式

JDK8

Object

Java中的頂級父類---Java中所有的類都是這個類的子類。---任何一個類的對象都可以用Object對象接住

重要方法

clone()---克隆對象---克隆完成之後會產生一個新的對象,這個新對象和原對象的地址不同但是屬性值是一樣的。---一個對象要想被克隆,那麼這個對象對應的類必須實現Cloneable接口---Cloneable接口中沒有任何的方法和屬性,僅僅用於標識這個類產生的對象可以被克隆

finalize()---通知gc回收垃圾對象---即使gc開始運行,也只回收當前對象而不回收其他對象   System.gc();---通知gc回收對象

getClass()---獲取當前對象的實際類型

hashCode()---獲取對象的哈希碼---哈希碼是一串32位的二進制數據---可以認爲是唯一的。

toString()----對象的字符串形式--當打印對象的時候實際上是調用了這個對象的toString方法

equals(Object o)---判斷兩個對象是否一致---要求能夠手動重寫

Eclipse命令

Ctrl + /--單行註釋/取消單行註釋

Ctrl + shift + /---多行註釋

Ctrl + shift + \---取消多行註釋

Alt + /---提示鍵

Alt + up / down 向上或者向下移動

Ctrl + d---刪除一行

Ctrl + shift + o---導包

Ctrl + 1---錯誤提示鍵

二進制---Bin---Binary

八進制---Oct---Octal

十進制---Dec---Decimal

十六進制---Hex---Hexagondecimal

String

代表字符串的一個類---是一個最終類,沒有子類。所有的字符串都是String的對象。

字符串是一個常量,定義好之後不可改變;字符串是被共享的。

 

String s = “a”; s += “b”; -> String s = “a”; -> s = new StringBuilder(“a”).append(“b”).toString(); -> s = new String(“ab”);

創建對象次數:

String s = “abc”; --- 1

String s = new String(“abc”); --- 2

String s = “a”; s += “b”;  --- 5

String s = “a”; --- 1

s = new StringBuilder(“a”).append(“b”).toString(); --- 4

// 100個字符串組成的字符數組

String[] arr = new String[100];

// + 進行拼接

String s = “”; // 1

for(String str : arr){

s += str; //s = new StringBuilder(s).append(str).toString(); //300

}

// StringBuilder

StringBuilder sb = new StringBuilder(); // 1

for(String str : arr){

sb.append(str); // 100

}

String s = sb.toString(); // 1

如果拼接多個字符串,建議使用StringBuilder;如果拼接少量字符串,可以使用+.

StringBuilder/ StringBuffer中的方法在使用上完全一致的---StringBuilder是線程不安全的,StringBuffer是線程安全。

concat(String str)---將參數字符串拼接到對象字符串的末尾---不改變原串

注意:在String中提供了一系列的操作而不改變的原串的方法

contains(String str)---判斷是否包含指定的子串

equals(Object o)---判斷兩個字符串是否一致---判斷的是實際值

getBytes()---將字符串轉化爲字節數組---如果不指定編碼,會按照默認的系統平臺碼轉化

charAt(int index)---表示獲取這個字符串指定下標位置上的字符

length()---獲取字符串的長度

toCharArray()---將字符串轉化爲字符數組


練習:

1. 輸入一個字符串,統計字符串中字母、數字以及其他字符的個數

sdlgn479d  -=23 -> 字母:數字:其他字符:4

2. 輸入一個字符串,提取其中的數字並求和。 sdlgn479d  -=23 -> 25

3. 輸入一個字符串,提取其中的數字並排序。 sdlgn479d  -=23 -> 23479

4. 輸入一個字符串,統計每個字符出現的次數。

hdslanldao -> h:1 d:2 s:1 l:1 a:2 n:1 o:1

compareTo(String another)---判斷兩個字符串的大小---根據返回值的正負來確定大小

編碼

按照某種規則將字符映射成字節---記錄這種規則的形式---編碼表

ASCII--- 0-127---不完全的碼錶

ISO-8859-1---西歐碼錶--- 一個字符一個字節

gb2312---gbk---1個字符2個字節---收錄了基本的簡體漢字以及一部分常見的繁體漢字

Unicode編碼體系---utf-8---1個字符3個字節--- 常見語言的常見字符

所有的碼錶默認兼容西歐編碼---無論哪個碼錶中,英文一個字符永遠佔一個字節

練習:

1.輸入一個字符串和一個數字,數字表示字節個數,然後按照指定的字節個數來截取字符串

中文english5 -> 中文e   6 -> 中文en  2 -> 中  3 -> 12-> 中文english

indexOf(int ch, int index)---表示從指定的下標開始尋找指定字符第一次出現的位置

2.輸入一個字符串和一個字符,輸出這個字符出現的所有位置

public class Test {
public static void main(String[] args){
    String str = “abc”;
    append(str);
    System.out.println(str); // abc
}
public static void append(String str){
    // 地址發生了改變
    // str += str;
 	str = “def”;
}
}

注意:null身上沒有任何的方法和屬性,只要利用null去調用方法或者屬性一定會出現空指針異常

Pattern

指定規則的類

本質上使用與指定匹配或者篩選規則的一系列表達式

練習:

輸入一個字符串,判斷這個字符串是否是一個小數

練習:

1. 疊字換單字 --- 我我我我我我愛愛愛愛學學學學學學學學學學學學編編編程程程程程程 -> 我愛學編程

2. 匹配郵箱 @ qq.com 163.com sina.cn sohu.com.cn

3. 匹配密碼:6-12位組成,至少字母/數字/符號中的兩個組成

包裝類

給每種基本類型提供一個對應的類---包裝類

byte

short

int

long

float

double

char

boolean

Byte

Short

Integer

Long

Float

Double

Character

Boolean

intchar對應的包裝類發生變化

自動封箱:將一個基本類型的變量來直接賦值給對應的引用類型的對象---實際上是調用了對應類的valueOf方法

自動拆箱:將一個引用類型的對象來直接賦值給對應的基本類型的變量---實際上是調用了對應對象的***Value方法

自動封箱/拆箱是JDK1.5的特性之一

將一個字符串轉化爲一個字符?

“a” -> ‘a’ “a”.charAt(0) -> ‘a’ “a”.toCharArray()[0]

整數的哈希碼是其本身;小數的哈希碼需要經過計算;字符的哈希碼是其對應的編碼;布爾類型的哈希碼是返回一個特殊值---true1231  false:1237

八種基本類型的哈希碼都是固定值

數學類

Math---是一個最終類,構造函數是私有,提供了一系列的操作基本數據的靜態方法---提供了基本的數學運算,運算的是基本類型----完全的作爲了工具類使用。---初等數學運算

BigDecimal---用於精確運算小數的類---要去參數以字符串形式傳入

日期類

Date/Calendar

異常

異常是一套用於問題的處理和反饋的機制

Throwable

Error---錯誤---無法處理---StackOverFlowError

Exception---異常---可以處理

編譯時異常---在編譯時期就已經出現了---由於在編譯的時候已經出現了,所以要求必須處理---要麼拋出,要麼捕獲

CloneNotSupportedException

ParseException

運行時異常---編譯的時候不報錯的,但是在運行的時候出現。---由於在編譯的時候不報錯,所以可以不處理,也可以處理。---往往語法沒有錯誤---RuntimeException

ArithmeticException-算術異常

ArrayIndexOutOfBoundsException---數組下標越界異常

NullPointerException

ClassCastException

NumberFormatException

對於運行時異常而言,可以隨意拋出隨意捕獲;對於編譯時異常,只有在拋出的時候才能捕獲

自定義異常---繼承某個異常類

異常捕獲的方式

1. 可以使用多個catch來分別捕獲不同的異常來分別處理

2. 可以捕獲一個父類異常對象,做統一處理

3. 可以使用 分隔不同的異常來做分組的處理---JDK1.7開始


如果方法聲明throws了一個父類異常,那麼在處理的時候必須處理這個父類異常

捕獲異常的時候需要先捕獲子類異常再捕獲父類異常

異常對方法的重載沒有任何的影響---方法的重載只和方法簽名有關---方法名一致而參數列表不同

子類重寫的方法的異常必須是父類方法異常的子類或者本身。---子類不能拋出比父類更多的異常---範圍不能更大,而且指的是編譯時異常

finally代碼塊無論如何都會執行一次

項目在開發階段,如果捕獲了異常,打印棧軌跡,拋出一個RuntimeException來停止項目

項目上線了,如果捕獲了異常,跳轉錯誤頁面,記錄錯誤日誌。


發佈了1 篇原創文章 · 獲贊 12 · 訪問量 6814
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章