Math類的使用。
- Math用于做數學運算。
- Math類中的方法全部是靜態方法,直接用類名調用即可。
- 方法:
- public static int abs(int a) 獲取參數a的絕對值
- public static double ceil(double a) 向上取整
- public static double floor(double a) 向下取整
- public static double pow(double a, double b) 獲取a的b次冪
- public static long round(double a) 四舍五入取整
System系統類
- System代表當前系統。
- 靜態方法:
- 1.public static void exit(int status):終止JVM虛擬機,非0是異常終止。
- 2.public static long currentTimeMillis():獲取當前系統此刻時間毫秒值。
- 3.可以做數組的拷貝。
- arraycopy(Object var0, int var1, Object var2, int var3, int var4);
- 使用:參數一:原數組;參數二:從原數組的哪個位置開始賦;參數三:目標數組;參數四:賦值到目標數組的哪個位置;參數五:賦值幾個。
BigDecimal大數據類
- 浮點型運算的時候直接+ * /可能會出現數據失真(精度問題)。
- BigDecimal以解決浮點型運算數據失真的問題。
- BigDicimal類:
- 包:java.math.
- 創建對象的方式(最好的方式:)public static BigDecimal valueOf(double val) :包裝浮點數成為大數據對象。
- 使用:
double a = 0.1;
BigDecimal a1 = BigDecimal.valueOf(a);
double rs = a1.doubleValue();
- 使用:
- BigDecimal只是解決精度問題的手段,double數據才是我們的目的
- 方法聲明
- public BigDecimal add(BigDecimal value) 加法運算
- public BigDecimal subtract(BigDecimal value) 減法運算
- public BigDecimal multiply(BigDecimal value) 乘法運算
- public BigDecimal divide(BigDecimal value) 除法運算
- public double doubleValue():把BigDecimal轉換成double類型。
包裝類
- 引入:Java認為一切皆對象。java數據類型中引用數據類型是對象,但是在Java中8種基本數據類型不是對象,只是表示一種數據的類型形式,顯得很突兀。Java為了一切皆對象的思想統一,把8種基本數據類型轉換成對應的類,這個類稱為基本數據類型的包裝類。類本身也是對象,成為類對象
- byte Byte
- short Short
- int Integer
- long Long
- float Float
- double Double
- char Character
- boolean Boolean
- 自動裝箱:可以直接把基本數據類型的值或者變量賦值給包裝類。
Integer a1 = 12;
- 自動拆箱:可以把包裝類的變量直接賦值給基本數據類型。
Integer c = 100; int c1 = c;
- 包裝類的特殊功能
- 包裝類作為類首先擁有了Object類的方法。
- 包裝類作為引用類型的變量可以存儲null值。
- 具體來看特殊功能主要有:
- 可以把基本數據類型的值轉換成字符串類型的值,調用toString()方法。
Integer it = 100;
- 1、調用
Integer.toString(基本數據類型的值)
得到字符串(沒有什么用)。String itStr = it.toString();
- 2、直接把基本數據類型**+**空字符串就得到了字符串 (推薦使用)。
String itStr = it + "";
- 1、調用
- 把字符串類型的數值轉換成對應的基本數據類型的值。
String numStr = "23";
- – Xxx.parseXxx(“字符串類型的數值”) (沒有什么用)
int numInt = Integer.parseInt(numStr);
- – Xxx.valueOf(“字符串類型的數值”):(推薦使用)
int numInt = Integer.valueOf(numStr);
- – Xxx.parseXxx(“字符串類型的數值”) (沒有什么用)
- 可以把基本數據類型的值轉換成字符串類型的值,調用toString()方法。
正則表達式
- 作用:是一些特殊字符組成的校驗規則,可以校驗信息的正確性,校驗郵箱是否合法。
- 字符類:默認只能校驗一個
[abc]
a、b或c(簡單類)[^abc]
任何字符,除了a、b或c(否定)[a-zA-Z]
a 到 z 或 A 到 Z,兩頭的字母包括在內(范圍)[a-d[m-p]]
a到d和m到 p:[a-dm-p]
(并集)[a-z&&[def23]]
d、e 或 f(交集)[a-z&&[^bc]]
a 到 z,除了 b 和 c:[ad-z]
(減去)[a-z&&[^m-p]]
a 到 z,而非 m 到 p:[a-lq-z]
(減去)
- 預定義字符類:默認只能校驗一個
.
任何字符\d
數字:[0-9]
\D
非數字:[^0-9]
\s
空白字符:[\t\n\x0B\f\r]
\S
非空白字符:[^\s]
\w
單詞字符:[a-zA-Z_0-9]
\W
非單詞字符:[^\w]
- Greedy 數量詞
X?
,X一次或一次也沒有X*
,X零次或多次X+
,X一次或多次X{n}
,X恰好 n 次X{n,}
,X至少 n 次X{n,m}
,X至少 n 次,但是不超過 m 次
- 使用:
"dsd2".matches("[a-zA-Z0-9]{4}") //true
- 郵箱:
email.matches("\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}")
- 手機號:
tel.matches("1[3-9]\\d{9}")
- 擴展:
String str="小李lv434fda324小強87632fad2342423小畫";
- public String[] split(String regex)
String[] nameArrs = str.split("\\w+");
- public String replaceAll(String regex,String newStr)
str.replaceAll("\\w+", "/")
- public String[] split(String regex)
- 字符串遍歷
String qq="1243542234";
for (int i = 0; i < qq.length(); i++) {char ch = qq.charAt(i);}
泛型
-
泛型就是一個標簽:<數據類型>
-
泛型可以在編譯階段約束只能操作某種數據類型。
-
注意:JDK 1.7開始之后,泛型后面的申明可以省略不寫。
-
泛型和集合都只能支持引用數據類型,不支持基本數據類型。
-
泛型的好處:泛型在編譯階段約束了操作的數據類型,從而不會出現類型轉換異常。
-
自定義泛型類
class 類名<泛型變量>{}
- 泛型變量建議使用 E , T , K , V
- 核心思想:把出現泛型變量的地方全部替換成傳輸的真實數據類型。
-
自定義泛型方法
- 格式:
修飾符 <泛型變量> 返回值類型 方法名稱(形參列表){}
- 注意:方法定義了是什么泛型變量,后面就只能用什么泛型變量。
- 泛型類的核心思想:是把出現泛型變量的地方全部替換成傳輸的真實數據類型。
-
public static <T> String arrToString(T[] nums) {StringBuilder sb = new StringBuilder();sb.append("[");if (nums != null && nums.length > 0) {for (int i = 0; i < nums.length; i++) {T ele = nums[i];sb.append(i == nums.length - 1 ? ele : ele + ", ");}}sb.append("]");return sb.toString(); }
- 格式:
-
自定義泛型接口
- 格式:
interface 接口名稱<泛型變量>{}
- 泛型接口的核心思想,在實現接口的時候傳入真實的數據類型,樣重寫的方法就是對該數據類型進行操作。
- 格式:
-
泛型通配符?
?
可以用在使用泛型的時候代表一切類型。public static void run(ArrayList<?> cars) {}
? extends Car
:那么**?必須是Car**或者其子類。(泛型的上限)public static void run(ArrayList<? extends Car> cars) {}
? super Car
:那么**?必須是Car**或者其父類。(泛型的下限。不是很常見)E , T , K , V
是在定義泛型的時候使用代表一切類型。
數組和集合
-
數組
- 1、Java語言中的數組是一種引用數據類型;不屬于基本數據類型。
- 2、數組當中既可以存儲“基本數據類型”的數據,也可以存儲“引用數據類型”的數據(數組既可以存儲基本數據類型,又可以存儲引用數據類型,基本數據類型存儲的是值,引用數據類型存儲的是內存地址值)。
- 3、數組是有對應的類,這個類是在JVM運行時創建的,所以沒有對應的class 文件;(通過數組創建語法 int[] a = {1, 100, 10, 20}; 可看出,無法查看 數組類,以及源碼);數組的父類是Object。
- 4、數組一旦創建,在java中規定,長度不可變。
- 5、java中的數組要求數組中元素的類型統一。比如int類型數組只能存儲int類型,自定義Person類型數組只能存儲Person類型。
- 6、數組在內存方面存儲的時候,內存地址連續。 這是數組存儲元素的特點。數組實際上是一種簡單的數據結構。
- 7、所有的數組都是拿“第一個小方框的內存地址”作為整個數組對象的內存地址。 (數組中首元素的內存地址作為整個數組對象的內存地址。)
- 8、數組中每一個元素都是有下標的,下標從0開始,以1遞增。最后一個元素的下標是:length - 1 下標非常重要,因為我們對數組中元素進行“存取”的時候,都需要通過下標來進行。
-
集合的由來:數組長度是固定的,當添加的元素超過了數組的長度時需要對數組重新定義, 這樣太過繁瑣。因此,Java內部給我們提供了集合類,能存儲任意對象,長度是可以改變的,隨著元素的增加而增加,隨著元素的減少而減少。
-
區別
1、數組既可以存儲基本數據類型,又可以存儲引用數據類型(基本數據類型存儲的是值, 引用數據類型存儲的是地址值),集合只能存儲引用數據類型(對象), 集合中也可以存儲基本數據類型,但是在存儲的時候會自動裝箱(JDK1.5新特性)變成對象。
2、數組的長度是固定的,集合長度是可以改變的。
3、定義數組時必須指定數組元素類型,集合默認其中所有元素都是Object。
4、無法直接獲取數組實際存儲的元素個數,數組使用length獲取數組的長度,但集合可以通過size()直接獲取集合實際存儲的元素個數。
5、集合有多種實現方式和不同的適用場合,如List,Set,Map等;而不像數組僅采用分配連續的空間方式。
6、集合以接口和類的形式存在,具有封裝,繼承和多態等類的特性,通過簡單的方法和屬性調用即可實現各種復雜的操作,大大提高軟件的開發效率。
集合
- 集合是一個大小可變的容器。
- 容器中的每個數據稱為一個元素。數據==元素。
- 集合的特點是:類型可以不確定,大小不固定。集合有很多種,不同的集合特點和使用場景不同。
- 數組:類型和長度一旦定義出來就都固定了。
- 集合的作用:
- 在開發中,很多時候元素的個數是不確定的。
- 而且經常要進行元素的增刪該查操作,集合都是非常合適的。
- Java中集合的代表是:Collection,它是Java中集合的祖宗類。
- Collection集合的體系:
- Collection(接口)
- Set(接口)
- HashSet****(實現類)
- LinkedHashSet<>(實現類)
- TreeSet<>(實現類)
- HashSet****(實現類)
- List****(接口)
- ArrayList****(實現類)
- LinekdList<>(實現類)
- Vector<>(實現類)
- Set(接口)
- Collection(接口)
- 集合的特點:
- Set系列集合:添加的元素是無序,不重復,無索引的。
- – HashSet:同父類Set一致。
- LinkedHashSet:添加的元素是有序,不重復,無索引的。
- – TreeSet:不重復,無索引,按照大小默認升序排序
- – HashSet:同父類Set一致。
- List系列集合:添加的元素是有序,可重復,有索引。
- – ArrayList:同父類List一致。
- – LinekdList:同父類List一致。
- –Vector:是線程安全的,速度慢,工作中很少使用。
- Set系列集合:添加的元素是無序,不重復,無索引的。
- Collection集合的常用API
- public boolean add(E e):把給定的對象添加到當前集合中 。
- public void clear() :清空集合中所有的元素。
- public boolean remove(E e):把給定的對象在當前集合中刪除。
- public boolean contains(Object obj):判斷當前集合中是否包含給定的對象。
- public boolean isEmpty():判斷當前集合是否為空。
- public int size(): 返回集合中元素的個數。
- public Object[] toArray(): 把集合中的元素,存儲到數組中。
- Collection集合的遍歷方式
- 迭代器
- public Iterator iterator():獲取集合對應的迭代器,用來遍歷集合中的元素的。
Iterator<String> it = lists.iterator();
- E next():獲取下一個元素值。
- boolean hasNext():判斷是否有下一個元素,有返回true ,反之。
while (it.hasNext()) { System.out.println(it.next());}
- public Iterator iterator():獲取集合對應的迭代器,用來遍歷集合中的元素的。
- foreach(增強for循環)
- JDK 1.8開始之后的新技術Lambda表達式
lists.forEach(s -> {System.out.println(s);});
lists.forEach(s -> System.out.println(s));
lists.forEach(System.out::println);
- 迭代器
ps:b站課程《黑馬程序員Java13天進階》根據官方筆記結合自身情況整理的筆記
視頻鏈接