0426JavaSE01day02.txt=========正則、Object、包裝類詳解

正則表達式
基本正則表達式:正則表達式簡介、分組()、 "^"和"$"
String正則API:matches方法、split方法、replaceAll方法
Object
Object:Object
toString方法:如何重寫toString方法、String重寫toString
equal方法:如何重寫equals方法、String重寫equals、equals和==的區別
包裝類
包裝類概述:
8種基本類型包裝類:Number及其主要方法、Interger經常使用功能、Dobule經常使用功能、
自動裝箱和拆箱操做
自動裝箱和拆箱:自動裝箱和拆箱的原理java

 

基本正則表達式面試


1..1.1. 正則表達式簡介
實際開發中,常常須要對字符串數據進行一些複雜的匹配、查找、替換等操做。
經過正則表達式,能夠方便的實現字符串的複雜操做
正則表達式是一串特定的字符,組成一個「規則字符串」,這個規則字符串是描述
文本規則的工具,正則表達式就是記錄文本規則的代碼正則表達式

 


所謂正則表達式就是使用一系列預約義的特殊字符來描述一個字符串的格式規則,而後使用該格式規則匹配某個字符串是否符合格式要求。
一、「.」和"\"工具


"."點兒,在正則表達式中表示任意一個字符。
"\"在正則表達式中是轉意字符,當咱們須要描述一個已經被正則表達式使用的特殊字符時,咱們就能夠經過使用"\"將其轉變爲本來的意思。
"\"在正則表達式中也有一些預約義的特殊內容:
\d:表示任意一個數字-------------------------------至關與[0-9]
\w:表示任意一個單詞字符(只能是 數字,字母,下劃線) --------至關與[a-zA-Z0-9]
\s:表示任意一個空白字符(\t \r \n \f \x0B)
\D:表示任意一個非數字字符
\W:表示任意一個非單詞字符
\S:表示任意一個非空白字符性能

二、"字符集合 []"開發工具

"[]"用來描述單一字符,方括號內部能夠定義這個字符的內容,也能夠描述一個範圍。例如:
[abc]:表示該字符只能是a或者b或者c---------------------【只能取其中的一個】
[^abc] ------------------->除了abc之外的任意字符
[123]:表示該字符只能是1或者2或者3
當咱們須要描述全部小寫字母時,咱們可使用範圍 [a-z],表示該字符能夠是任意一個小寫字母。
一樣還可使用 [0-9] 來表示該字符能夠是任意一個數字。
也能夠在多個範圍內選擇。好比,[a-zA-Z0-9_] 表示該字符能夠是任意字母,數字以及"下劃線"測試


[a-z&&[^bc]] ---------------->a-z中除了bc之外的任意字符 【重要記住】ui


{} 的縮寫版
"+":表示內容能夠連續出現至少1次以上 【等價於】-------------->{1,}
"*":表示內容出現0-若干次 ----------------{0,}
"?":表示內容出現0-1次 ----------------{0,1}設計

x{n}:表示內容必須出現n次x
x{n,m}:表示內容出現n-m次x
x{n,}:表示內容出現至少n次x調試

 

1.1.2. 分組()


經過上面的內容,咱們還沒法解決相似下面的問題:
在描述電話號碼時,前面有區號,區號的形式能夠是0086或者+86
那麼咱們如何在這兩個字符串之間選擇?
這時咱們可使用分組"()"。() 能夠將內容看作一個總體,()中可使用"|"來表示或關係。例如,(+86|0086) 表示這裏能夠是+86或者0086。


1.1.3. "^"和"$"


經過在正則表達式的開始添加"^"以及末尾添加"$"來表示一個總體。若不使用它們,那麼正則表達式只匹配某個字符串的部份內容是否符合格式規則,但使用它們,則要求字符串必須從頭至尾都知足該格式規則。
例如,^\w{ 8,10 }$ 表示總體字符串只能出現單詞字符8-10個。------------------【重要】
\w{ 8,10 } 表示總體字符串只匹配其中連續的8-10個。------------------【重要】

 

 

1.2. String正則相關API

 

matches方法
matches()方法的參數要求咱們傳入一個用字符串描述的正則表達式,而後使用該正則表達式描述的字符串格式規則來匹配當前字符串,若知足那麼該方法返回true。不然返回false。

split方法
String[] split(String regex):參數要求傳入一個用字符串描述的正則表達式,而後使用該正則表達式描述的字符串規則來匹配當前字符串,並按照知足的部分將字符串拆分。

replaceAll方法
String replaceAll(String regex,String replacement):參數要求傳入一個用字符串描述的正則表達式和一個須要替換的字符串,而後使用該正則表達式描述的字符串規則來匹配當前字符串,並將知足的部分替換爲須要替換的這個字符串

 

 

 

2. Object

Object類是java中全部類的頂級父類。若咱們定義的一個類沒有顯式的使用extends繼承某個類時,默認就是繼承自Object的。
Object類型的引用變量能夠指向任何類型對象

 


2.2. toString()方法
2.2.1. 如何重寫 toString 方法
既然Object是全部類的頂級父類,那麼在Object中定義的方法全部的類都具有。其中之一就是toStirng()方法。
String toString():該方法java但願咱們重寫時返回一個字符串,這個字符串的原則爲:用一個字符串來描述當前對象。
Object實現了toString()方法,返回的是當前對象的「句柄」。
格式爲:類的徹底限定名@hashcode。
由於Object實現的toString()方法不具有什麼實際開發意義,因此若咱們須要在子類中使用該方法時一般咱們會重寫它。

 

2.2.2. String類重寫toString() ------------------------------爲何要重寫該方法?????

 


2.3.1. equals方法
boolean equals():該方法java但願咱們重寫時返回一個boolean值,表示兩個對象間的內容比較是否一致


Object中的方法:做用在於檢測一個對象是否等於另外一個對象
在Object類中,這個方法判斷二個對象是否具備相同的引用,便是否爲相同的對象
在實際應用中,通常須要重寫該方法,經過比較對象的成員屬性,使該方法更有意義
例如:對於Cell類,若是不重寫equals方法,默認比較二個對象相同時才返回true
,能夠將其重寫爲:當x和y座標相等時二個對象就相等,這樣更有意義。

 

 

 

2.3.2. 如何重寫equals方法
重寫equals方法應遵循幾個規則:
1.任何對象與null比較都應返回false
2.兩個對象不屬於同一個類時應返回false
3.同一個對象equals比較應當恆等爲true
String重寫了equals方法,做用是比較兩個字符串對象中保存的字符序列是否徹底一致。

 


2.3.4. equals與 == 的區別
"=="是值比較,對於引用類型變量而言,該變量保存的是對象的地址,因此使用"=="比較時,意思爲兩個變量的地址是否相等,換句話說就是看兩個變量引用的是否爲同一個對象
equals是內容比較,對於兩個引用變量而言,是比較兩個變量所引用的對象內容是否相同。
舉個例子, 就好像一對雙胞胎,他們是兩個獨立的個體,是兩個對象。因此那麼用"=="比較是 false。可是由於他們「長得同樣」,因此equals方法比較是true。
咱們也能夠變相的理解爲:"=="是判斷是否爲同一個,而"equals"是判斷像不像。


equals是Object的方法,重寫後,能夠比較二個對象的內容是否相等
須要注意:Object默認的equals方法的比較規則同 ==

 

 

3. 包裝類
包裝類是不可變類,在構造了包裝類對象後,不容許更改包裝在其中的值
包裝類是final的,不能定義他們的子類。

Number及其主要方法
抽象類Number是Byte 、Double 、Float Integer Long Short類的父類
Number的子類必須提供將表示的數值轉換爲byte double float int long short
的方法

doubleValue() 以double形式返回指定的數值
intValue() 以int形式返回指定的數值
floatValue 以float形式返回指定的數值

 

Integer經常使用功能:
能在int類型和String類型之間相互轉化,還提供了一些常量
static int MAX_VALUE int類型最大值
static int MIN_VALUE int類型最小值

Integer的靜態方法:parseInt() 用於將字符串轉爲int

 

 


3.1.1. 包裝類概述
咱們知道java是面向對象的語言,其精髓之一是可使用多態性,提升程序的靈活度。可是java中有8個基本類型:byte,short,int,long,float,double,char,boolean。它們是以值的形式存在於內存中,而不是對象。它們不是Object的子類,不能參與面向對象的開發。

public class Test{
public static void main(String[] args){
String str = "hello";
doSome(str);//能夠,由於String是Object的子類

int i = 1;
//程序編譯不經過,緣由在於int不是Object的子類,不能使用多態性。
doSome(i);
}
public static void doSome(Object o){
....
}
}

對於8個基本類型,java提供了他們相應的包裝類:
基本類型 包裝類
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
char java.lang.Character
boolean java.lang.Boolean
其中除了Character與Boolean的父類是Object以外,其他的都是繼承自:java.lang.Number

 

 


補充:
正則匹配特殊字符時 * ? . [ ] + - \ | 須要用 \ 進行轉意


(0086 | \+86)
(00 | \+)86


正則的意義:
1.正則自己也是字符串
2.用於匹配字符串中字符次序的「規則字符串」


經常使用API:
String.matches() 規則檢查方法
String.split() 切邊方法
String.replaceAll() 全局替換

用途:-----------------------------【面試題】
1.用戶表單數據檢查
2.字符串規則檢查(檢查是否符合規範)

技巧:
利用開發工具的正則搜索功能檢查正則表達式的正確性 Ctrl+F

 


設計一種規則,來檢查字符串是否知足規則

matchs()用於測試字符串 總體 是否符合正則規則
matchs 方法進行總體匹配檢查,至關與包含 ^ $邊界檢查,形成如上檢查結果相同,這不是正則表達式的問題,是matchs方法的現象

檢查"a"是否符合[abc]規則

 

/**
*toString() 方法是Object類上定義的方法, 是留給所有子類的方法
*Object 默認的toString方法返回值沒有意義
*類名@散列值 JavaSE_day2.Foo@1941dc9 -------------------->包名.類名@散列值 【記住】
*
*爲了讓子類重寫該方法
*
*通常重寫該方法,要返回對象的關鍵數據

*toString()方法的用途:Java的API會自動調用toString方法
*利用這個特色能夠簡化程序的調試輸出,
*例如:println(p)會自動調用toString()

**建議在子類中重寫toString方法
*Java 提供的API幾乎都重寫了toString()方法
*包括:String StringBuilder Date Integer
*/

Point p1=new Point(10,20);

傳統作法
System.out.println(p1.x+","+p1.y);

利用toString方法
System.out.println(p1); -------->能夠簡化程序的調試輸出(當參數有50個時,效果就很是明顯)

 

**
* Object 提供了比較二個對象是否相等的方法 equals()
* 1.默認的equals() 方法,不能比較對象中數據是否相等
* 建議子類重寫這個方法
* 2.重寫時按照關鍵數據比較二個對象是否相等

 

== 比較的是變量的值,引用變量的值是地址,也就是==比較的是引用變量的地址值

Object 的equasl方法就是用==比較的,因此建議子類重寫爲可靠的比較方法

Java提供的API幾乎都重寫了equals方法
包括:String Integer Date


基本類型數據性能比包裝類強

經常使用的包裝類 Integer Double


自動包裝拆包
java 5 開始提供自動包裝 拆包

//正常方式

Double x=new Double(5.5);
double d=x.doubleValue();

//自動方式Double n=5.6; //將基本類型 直接賦值給 包裝類double m=n; //將包裝類型 自動轉爲 基本類型

相關文章
相關標籤/搜索