1、try with catch
還記得這樣的代碼嗎?我們需要手動的關(guān)閉資源的流,不然會造成資源泄漏,因為虛擬機無法管理系統(tǒng)資源的關(guān)閉,必須手動釋放。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public void manualClose(String fileName) { BufferedReader reader = null ; try { String line; reader = new BufferedReader( new FileReader(fileName)); while ((line = reader.readLine()) != null ) { ... } } catch (Exception e) { ... } finally { if (reader != null ) { try { reader.close(); } catch (IOException e) { ... } } } } |
騷操作解救你:
1
2
3
4
5
6
7
8
9
10
|
public void autoClose(String fileName) { try (BufferedReader reader = new BufferedReader( new FileReader(fileName))) { String line; while ((line = reader.readLine()) != null ) { ... } } catch (Exception e) { ... } } |
可以看到,try-with-resources的比前一種方法明顯節(jié)省了很多代碼,資源在try后邊的()中生成,在try結(jié)束后程序會自動關(guān)閉資源。
如果需要聲明多個資源,可以在try后面的()中,以;分隔;也就是說,try后邊的()可以添加多行語句, 我上篇文章有展示:《保姆系列五》原來JavaIO如此簡單,驚呆了
2、instance of
對象是否是這個特定類或者是它的子類的一個實例,返回一個布爾值。左邊是對象,右邊是類;當對象是右邊類或子類所創(chuàng)建對象時,返回true;否則,返回false。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
用法: result = object instanceof class 參數(shù): Result:布爾類型。 Object:必選項。任意對象表達式。 Class:必選項。任意已定義的對象類。 public interface Monster { } public static class Dinosaur implements Monster{ } public static void main(String[] args) { Dinosaur dinosaur = new Dinosaur(); System.out.println(dinosaur instanceof Monster); } |
3、不定項參數(shù) ...
格式如下:
參數(shù)個數(shù)可以0或者多個
1
|
public void method( int ...args); |
業(yè)務場景:
1、在業(yè)務開發(fā)的時候經(jīng)常之前寫一個方法,但是后來業(yè)務變動了,需要增加參數(shù),這個時候可以使用這種方式,多傳參數(shù),調(diào)用的地方不需要覆蓋
2、如果一個方法的的不確定參數(shù)個數(shù)的情況,通常來說我們會重載,但是如果多了很麻煩,這個時候...可以出場了
1
2
3
4
5
6
7
|
//方法重載,解決參數(shù)個數(shù)不確定問題 public void method(){}; public void method( int i){}; public void method( int i, int j){}; public void method( int i, int j, int k){}; 優(yōu)化之后的形式: public void method( int i, int ...args); |
調(diào)用的三種方式
1
2
3
4
5
6
7
8
9
|
public void call(){ //1、 不使用變參 method( 1 ); //2、 直接調(diào)用 method( 1 , 2 , 23 , 4 , 5 , 6 ); //3、 數(shù)組調(diào)用 int [] arr = { 1 , 2 , 23 , 4 , 5 , 6 }; method( 5 ,arr); } |
4、跳出多層循環(huán)的label
Java 中的標簽是為循環(huán)設計的,是為了在多重循環(huán)中方便的使用 break 和coutinue ,當在循環(huán)中使用 break 或 continue 循環(huán)時跳到指定的標簽處
1
2
3
4
5
6
7
8
9
10
11
12
|
public static void main(String[] args) { for ( int i = 0 ; i < 5 ; i++) { labelA: for ( int j = 0 ; j < 5 ; j++) { for ( int k = 0 ; k < 5 ; k++) { if (k == 1 ) { break labelA; } System.out.println( 1 ); } } } } |
不推薦這種用法,雖然很騷,但是老老實實的一層一層break 比較好,你覺得吶?
5、方法引用
用Lambda表達式僅僅是調(diào)用一些已經(jīng)存在的方法,除了調(diào)用動作外,沒有其他任何多余的動作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package org.pdool; import java.util.ArrayList; import java.util.List; /** * 方法引用測試類 * @author 香菜 */ public class Trytest { static List<Player> playerList = new ArrayList<>(); // 靜態(tài)方法 public static void print(String s) { System.out.println(s); } static class Player { private String name; public Player(String name) { this .name = name; playerList.add( this ); } private void printName() { System.out.println(name); } } public static void main(String[] args) { List<String> strList = new ArrayList<>(); strList.add( "香菜" ); strList.add( "follow me" ); // 1、靜態(tài)方法引用 strList.forEach(Trytest::print); // /2、對象方法引用 strList.forEach(System.out::println); // 3、構(gòu)造函數(shù) strList.forEach(Player:: new ); // 4、對象方法 playerList.forEach(Player::printName); } } |
總結(jié):
1、在try結(jié)束后程序會自動關(guān)閉資源
2、instance of 必須是子類
3、參數(shù)個數(shù)可以0或者多個,重構(gòu)代碼利器
4、使用 break 或 continue 循環(huán)時跳到指定的標簽處
5、方法調(diào)用是除了調(diào)用動作外,沒有其他任何多余的動作
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注服務器之家的更多內(nèi)容!
原文鏈接:https://gamwatcher.blog.csdn.net/article/details/117164678