[TOC]
# 基本類型包裝類
基本數據類型對象包裝類:java將基本數據類型值封裝成了對象。封裝成對象有什么好處?可以提供更多的操作基本數值的功能。
## 概述

其中需要注意int對應的是Integer,char對應的Character,其他6個都是基本類型首字母大寫即可。
基本數據類型對象包裝類特點:用于在基本數據和字符串之間進行轉換。
## 將字符串轉成基本類型

parseXXX(String s);其中XXX表示基本類型,參數為可以轉成基本類型的字符串,如果字符串無法轉成基本類型,將會發生數字轉換的問題 NumberFormatException
~~~
System.out.println(Integer.parseInt("123") + 2);
//打印結果為 125
~~~
## 基本類型轉成字符串
* 將基本數值轉成字符串有3種方式:
- 基本類型直接與””相連接即可;34+""
- 調用String的valueOf方法;String.valueOf(34) ;

- 調用包裝類中的toString方法;Integer.toString(34)

## 基本類型和對象轉換
使用int類型與Integer對象轉換進行演示,其他基本類型轉換方式相同。
* 基本數值---->包裝對象


* 包裝對象---->基本數值

## 自動裝箱拆箱
在需要的情況下,基本類型與包裝類型可以通用。有些時候我們必須使用引用數據類型時,可以傳入基本數據類型。
比如:
基本類型可以使用運算符直接進行計算,但是引用類型不可以。而基本類型包裝類作為引用類型的一種卻可以計算,原因在于,Java”偷偷地”自動地進行了對象向基本數據類型的轉換。
相對應的,引用數據類型變量的值必須是new出來的內存空間地址值,而我們可以將一個基本類型的值賦值給一個基本類型包裝類的引用。原因同樣在于Java又”偷偷地”自動地進行了基本數據類型向對象的轉換。
* 自動拆箱:對象轉成基本數值
* 自動裝箱:基本數值轉成對象
~~~
Integer i = 4;//自動裝箱。相當于Integer i = Integer.valueOf(4);
i = i + 5;//等號右邊:將i對象轉成基本數值(自動拆箱) i.intValue() + 5; 加法運算完成后,再次裝箱,把基本數值轉成對象。
~~~
* 自動裝箱(byte常量池)細節的演示
**當數值在byte范圍之內時,進行自動裝箱,不會新創建對象空間而是使用醫來已有的空間。**
~~~
Integer a = new Integer(3);
Integer b = new Integer(3);
System.out.println(a==b);//false
System.out.println(a.equals(b));//true
System.out.println("---------------------");
Integer x = 127;
Integer y = 127;
//在jdk1.5自動裝箱時,如果數值在byte范圍之內,不會新創建對象空間而是使用原來已有的空間。
System.out.println(x==y); //true
System.out.println(x.equals(y)); //true
~~~
# system類
## 概念
在API中System類介紹的比較簡單,我們給出定義,System中代表程序所在系統,提供了對應的一些系統屬性信息,和系統操作。
System類不能手動創建對象,因為構造方法被private修飾,阻止外界創建對象。System類中的都是static方法,類名訪問即可。在JDK中,有許多這樣的類。
## 常用方法

* currentTimeMillis() 獲取當前系統時間與1970年01月01日00:00點之間的毫秒差值
* exit(int status) 用來結束正在運行的Java程序。參數傳入一個數字即可。通常傳入0記為正常狀態,其他為異常狀態
* gc() 用來運行JVM中的垃圾回收器,完成內存中垃圾的清除。從程序的運行結果可以發現,執行System.gc()前,系統會自動調用finalize()方法清除對象占有的資源,通過super.finalize()方式可以實現從下到上的finalize()方法的調用,即先釋放自己的資源,再去釋放父類的資源。
但是,不要在程序中頻繁的調用垃圾回收,因為每一次執行垃圾回收,jvm都會強制啟動垃圾回收器運行,這會耗費更多的系統資源,會與正常的Java程序運行爭搶資源,只有在執行大量的對象的釋放,才調用垃圾回收最好
* getProperty(String key) 用來獲取指定鍵(字符串名稱)中所記錄的系統屬性信息
System.out.println(System.getProperties());

* arraycopy方法,用來實現將源數組部分元素復制到目標數組的指定位置

例子:
將src數組中前3個元素,復制到dest數組的前3個位置上
復制元素前:src數組元素[1,2,3,4,5],dest數組元素[6,7,8,9,10]
復制元素后:src數組元素[1,2,3,4,5],dest數組元素[1,2,3,9,10]
~~~
public static void main(String[] args) {
int[] src = new int[]{1,2,3,4,5};
int[] dest = new int[]{6,7,8,9,10};
System.arraycopy( src, 0, dest, 0, 3);
代碼運行后:兩個數組中的元素發生了變化
src數組元素[1,2,3,4,5]
dest數組元素[1,2,3,9,10]
}
~~~
# Math
## 概念
Math 類是包含用于執行基本數學運算的方法的數學工具類,如初等指數、對數、平方根和三角函數。
類似這樣的工具類(代表能夠完成一系列功能的類,在使用它們時,不用創建對象,該類中方法為靜態方法),其所有方法均為靜態方法,并且一般不會創建對象。如System類
## 常用方法

# Arrays類
## 概念
此類包含用來操作數組(比如排序和搜索)的各種方法。需要注意,如果指定數組引用為 null,則訪問此類中的方法都會拋出空指針異常NullPointerException。
## 常用方法

二分查找要求為排序的數組
# 大數據運算
## BigInteger
java中long型為最大整數類型,對于超過long型的數據如何去表示呢.在Java的世界中,超過long型的整數已經不能被稱為整數了,它們被封裝成BigInteger對象.在BigInteger類中,實現四則運算都是方法來實現,并不是采用運算符.
BigInteger類的構造方法:

構造方法中,采用字符串的形式給出整數
四則運算代碼:
~~~
public static void main(String[] args) {
//大數據封裝為BigInteger對象
BigInteger big1 = new BigInteger("12345678909876543210");
BigInteger big2 = new BigInteger("98765432101234567890");
//add實現加法運算
BigInteger bigAdd = big1.add(big2);
//subtract實現減法運算
BigInteger bigSub = big1.subtract(big2);
//multiply實現乘法運算
BigInteger bigMul = big1.multiply(big2);
//divide實現除法運算
BigInteger bigDiv = big2.divide(big1);
}
~~~
## BigDecimal
double和float類型在運算中很容易丟失精度,造成數據的不準確性,Java提供我們BigDecimal類可以實現浮點數據的高精度運算
構造方法如下:

建議浮點數據以字符串形式給出,因為參數結果是可以預知的
~~~
public static void main(String[] args) {
//大數據封裝為BigDecimal對象
BigDecimal big1 = new BigDecimal("0.09");
BigDecimal big2 = new BigDecimal("0.01");
//add實現加法運算
BigDecimal bigAdd = big1.add(big2);
BigDecimal big3 = new BigDecimal("1.0");
BigDecimal big4 = new BigDecimal("0.32");
//subtract實現減法運算
BigDecimal bigSub = big3.subtract(big4);
BigDecimal big5 = new BigDecimal("1.105");
BigDecimal big6 = new BigDecimal("100");
//multiply實現乘法運算
BigDecimal bigMul = big5.multiply(big6);
~~~
對于浮點數據的除法運算,和整數不同,可能出現無限不循環小數,因此需要對所需要的位數進行保留和選擇舍入模式


- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化