1. 程式人生 > >java自學之路-day11

java自學之路-day11

局限 局限性 浮點運算 漢字 虛擬機 trac 檢查 copy intvalue

JAVA11

正則表達式

l 概念

  1. 是一個字符串
  2. 滿足一定的規則
  3. qq號碼檢查

[1-9] [0-9] [4,9]

  1. 檢查某些字符是否合規 例如 用戶名是否合規
  2. 一個[]代表一個或者多個字符
  3. 為了解決String處理一些問題的太復雜

l 匹配規則

  1. 字符x

a) 需要匹配的內容是a

  1. 字符 \\

a) 代表 \

b) 是轉義字符

  1. \t 制表符
  2. \n 換行符 新增一空行
  3. \r 回車符 光標到下一行的首部
  4. [abc] 代表一個字符範圍
  5. [^abc] 代表取反的一個範圍 不是abc就匹配
  6. [a-zA-Z] 任意一個字母
  7. [0-9] 任意一個數字
  8. [a-z A-Z _ 0-9 ] 字母 下劃線 和數字都匹配
  9. \d 代表數字 0-9
  10. \w 代表字母 下劃線 和數字都匹配
  11. ^ 代表是行的開頭

a) ^[abc][0-9]$ 需要匹配的內容從[abc]這個位置開始 相當於左雙引號

  1. $ 代表是行的結尾

a) ^[abc][0-9]$ 需要匹配的內容以[0-9]這個位置結束 相當於右雙引號

  1. \b 單詞邊界

需要某個字符兩邊需要是非單詞字符 數字 字母 下劃線

  1. X ? 代表 x出現一次或者一次也沒有
  2. X * 代表出現零次 或者多次
  3. X + 代表出現一次或者多次
  4. X{n}代表出現n次
  5. X{n,}代表出現至少n次
  6. X{n,m}代表出現至少n次但不超過m次

l 使用

  1. String類的matches

返回值是boolean

“abc”.matches(“[a]”)

  1. String類的方法split

返回值是 String[]

使用規則將字符串進行切割

“abc”.split(“a”);

  1. String類的方法replaceAll

返回值是String

按照規則特換字符串

“abc0123”.reaplceAll(“[\\d]”,”#”)

把所有數字替換為#

  1. “ . ”表示任意字符
  2. “\\d+” 整數
  3. “\\d+\\.\\d+” 正小數
  4. “-\\d+” 負整數
  5. “-\\d+\\.\\d+” 負小數
  6. “\\d+\\.\d{2}” 保留兩位小數的正數
  7. “\\d+\\.\d{1,3}” 保留1-3位小數的正數

Date類

l 概述

  1. 表示特定的瞬間 精確到毫秒
  2. 以實現的接口
  3. 已有的子類
  4. 包名是Java.util.Date
  5. 毫秒 1000毫秒=1秒
  6. long time=System.currentTimeMillis();
  7. 返回Long型 因為超過了int的範圍
  8. 時間原點 零點 公元1970年1月1日 午夜0:00:00:
  9. 時間和日期的計算 必須依賴毫秒值

l 構造方法

  1. 已過時 從jdk1.1 被日歷類取代
  2. 除了 date(); date(long date)
  3. date()輸出不是對象地址 說明重寫了toString方法

Sat Jul 15 10:58:26 CST 2017 當前操作系統中的時間

  1. date(long date)

傳遞一個毫秒值

變成和零點相加的日期

  1. Date get set方法

getTime() 將日期轉為毫秒值 long time=System.currentTimeMillis()也可以

setTime() 將毫秒值轉為日期 構造方法也可以

l 日期格式化

  1. DateFormat
  2. 日期格式化的抽象類
  3. java.text包
  4. 抽象方法和非抽象方法都有
  5. SimpleDateFormat子類可以實現抽象方法 可以直接使用非抽象方法
  6. 創建SimpleDateFormat對象

構造方法中寫去日期格式

yyyy 年份

MM 月份

dd 月中的天數

HH 0-23小時

mm 小時中的分鐘

ss 秒

new SimpleDateFormat("公元yyyy年MM月dd日m分鐘ss秒");

漢字可以所以寫但字母必須按要求寫

然後調用format()方法 返回值是String 參數是一個date

l String轉為date對象

  1. Parse方法
  2. 步驟

a) 創建SimpleDateFormat對象

b) 構造方法指定日期格式

c) 子類對象 調用方法parse 傳遞String 返回Date

d) Parse中的字符串日期必須和指定的格式相同

e) 日期不能輸入 只能選擇

Calendar

l 概念

  1. 替換了date方法
  2. 為抽象類 不能創建對象 需要子類實現
  3. 靜態方法 靜態變量 YEAR 日歷字段
  4. getInstance ()獲得子類對象

l get 獲取日歷字段的值

get(int)

參數int獲取哪個日歷字段的具體數值

返回 int值

int year=calendar.get(calendar.YEAR);

年 YEAR

月份 MONTH

天數 DATE_OF_MOUTH

l set(int field,int value)

設置日歷哪個日歷字段 具體數值

set(int year,int month,int day)

傳遞3個整數的年月日

外國月份比國內少一月

l add(int 字段,int 偏移量)

日歷的偏移量可以指定哪個一個日歷中的字段,進行整數的偏移

l getTime() 不常用

將日歷對象轉為日期對象

練習

l 活了多少年

l 閏年

  1. 將日歷指定到3月1日,add偏移一天 29 閏年 28平年

l Java日歷

包裝類

概述

  1. 基本類型有八種 數學計算
  2. 基本類型進行復雜操作功能不夠 需要擴充
  3. 包裝類解決了這個問題
  4. 用戶從界面輸入的任何數據都是以字符串進行儲存
  5. 對這些字符串進行操作只能進行字符串操作 無法轉換為基本類型完成運算
  6. Java提供了八種基本類型的包裝類

每一個類中都封裝了一個基本類型 從而來操作更多數據

除了int 是iteger char是character 其他都是首字母大寫

  1. 主要學習integer,其他類和integer類差不多
  2. 在Java.lang包中

特點

l parseInt(String a)

  1. 在基本數據類型和字符串之間進行切換
  2. parseInt(String a)
  3. 將字符串解析為有符號的int整數
  4. 只能寫數字不能加空格

l parseInt(String s,int radix)

  1. 把其他進制數轉換為十進制
  2. 前面的進制數和後面的進制必須相對應
  3. 可以寫ABCDEF 16進制

l 將基本類型變為字符串

  1. 數據類型變量+“”
  2. Integer 靜態方法 toString
  3. toString(String s,int radix) 以規定進制輸出 最高支持36進制 0-9 A-Z

l 構造方法

  1. Integer(String s) 創建一個Interger對象 包含的是字符串
  2. 非靜態方法intValue() 返回int類型 將此字符串轉為基本數據類型

l 其他方法

  1. 三個方法 和 兩個靜態的成員變量
  2. MAX_VALUE 基本數據類型取值最大值
  3. MIN_ALUE 基本數據類型取值最小值
  4. toBinarString(int) 十進制轉為二進制 返回String
  5. toOctalString(int) 十進制轉為八進制
  6. toHexString(int) 十進制轉為十六進制

自動裝箱和自動拆箱

l jdk1.5後

數據類型變為對象 自動裝箱

對象中的數據變回基本數據類型 自動拆箱

l 自動裝箱

  1. Integer in=1;

打印後為字符串 1

例如集合ArrayList<Integer> 可以存儲1

  1. In=in+1

In首先in.inValue()轉為基本類型

然後in+1

之後in在轉為包裝類

l 弊端

空指針異常

如果是in是null的話,編譯沒錯但是運行會出錯

l 練習

System類

l Java.lang 包

l Final類

l 構造方法私有 外界不能直接建立對象

l 可以用類名訪問靜態方法

l 方法

  1. currentTimeMills()

a) 獲得當前系統時間

b) 可以在程序運行前後各調用一次用來進行統計程序執行時間

  1. exit()

a) 虛擬機退出就會停止運行程序

b) 退出虛擬機

c) 用參數作為狀態碼 0表示正常終止 1表示異常終止

  1. gc()

a) 回收垃圾

b) 比如匿名對象等

c) 在對象類 重寫 finalize()方法可以輸出語句

  1. getProperties()

getProperties(String key)

a) 獲取當前操作系統的屬性

b) 返回Properties 集合中的一個類 和ArrayList差不多

c) 輸出getProperties()就可以得到所有信息

d) file.separator 系統的文件位置符號 例如 windows \ unix

是/

  1. arrayCopy

a) 可變數組ArratList StringBuffer的原理都是用了這個

b) 源碼 沒有

c) 復制替換

d) 是調用windows的本地方法 JVM內存中有一部分是本地方法棧 這方法運行時就是在本地方方法棧中

Math類

概念

l 數學計算的類

l 工具類

l 平方根 對數 指數 三角函數

l Java.lang包中

l 靜態方法

方法

l static int abs(int i )

  1. 獲取參數的絕對值
  2. Math.abs(int a)
  3. 浮點 long都可以

l static double ceil(double d)

  1. 返回大於或者等於d的最小整數
  2. Math.cell()

l static double floor(double d)

  1. 返回小於或者等於d的最大整數
  2. Math.floor()

l static double pow(double a, double a,)

  1. 返回a的b次方
  2. Math.pow(2,3) 2的3次方

l static double sqrt(double d)

  1. 返回double參數的平方根
  2. 如果是負數-2 會輸出Nan
  3. 本地方法

l static double random(double d)

  1. 來源Random類
  2. 返回一個0.0-1.0之間的一個隨機數
  3. 不推薦用

l static double round(double d)

  1. 獲取參數的四舍五入 取整數
  2. 怎麽自己實現 +0.5 強轉int 在轉為double

Arrays工具類

概念

l 包含操作數組的內容

l Java.Util

l 包括排序 查找

方法

l static void sort(數組)

  1. 對數組進行升序排列
  2. 排序算法是經過優化的的快速排序

l static int binarySearch(數組,被查找的元素)

  1. 數組的二分搜索法
  2. 返回元素在數組中的出現的索引
  3. 如果元素不存在返回得是 (- 插入點-1)

a) 保證有序放到元素的中

b) -索引 -1

l static String toString(數組)

  1. 將數組變為字符串
  2. 並且 有一定格式
  3. 原理 StringBuilder 之前寫過的按照一定格式輸出數組

練習

l 接收輸入存儲十個人的成績

l 將最後三個人存入新的數組

l 返回新的數組

l 程序分析

  1. main方法傳過來一個數組
  2. 用sort方法進行排序

  1. 新建一個數組
  2. 用arraycopy將傳過來的數組的前三個元素復制到新數組
  3. 返回這數組
  4. Main接收這個數組
  5. 用toString輸出
  6. 也可以用for循環遍歷輸出和取出前三個元素 但是比較麻煩

BigInteger

概念引入

l Long型是最大的整數

l 超過long型的基本類型不能表示

l 變為BigInteger的對象

l 實現大數據的運算

l Java.math

構造方法

l 可以傳遞 字節數組 整型 有局限性

l 選擇傳遞String 可以表示任意大小的整數

l BigInteger(String s) 是一個對象

運算

l 可以進行四則運算

  1. 調用方運算
  2. 計算結果只能還是BigInteger對象

l 加法 add(另一個BigInteger對象)

  1. 結果還是一個對象

l 減法 subtract(另一個BigInteger對象)

結果還是一個對象

l 乘法 multiply(另一個BigInteger對象)

結果還是一個對象

l 除法 divied(另一個BigInteger對象)

結果還是一個對象

BigDeciaml

概述

  1. 0.09+0.01=0.09999999999999

l 無限接近0.1

  1. 原因 計算機計算二進制中表示浮點數不精確
  2. 超級大數浮點運算 提高運算精度
  3. Java.math

構造方法

l 建議用String進行傳遞參數

l Int和double 可能回超出 不可預知性

運算

l 加減乘

  1. 加法

a) add

b) 精確計算

  1. 減法

a) Subtract

b) 精確計算

  1. 乘法

c) Multiply

d) 精確計算

  1. 結果

0.1 0.68 101.5

l 除法 提現高精度

  1. 除法 divied
  2. 結果

1.301/100

0.01301

1.301/101

報異常 無限不循環

  1. 解決辦法:重載

a) 保留模式

閱讀API文檔

.ROUND_UP 向上一位加1

.ROUND_DOWN 截斷

.ROUND_HALF_UP 四舍五入

.ROUND_HALF_DOWN 四舍(大於0.5五)入

java自學之路-day11