Java中的這些騷操作你不能不知道!!!
1、try with catch
還記得這樣的代碼嗎?我們需要手動(dòng)的關(guān)閉資源的流,不然會(huì)造成資源泄漏,因?yàn)樘摂M機(jī)無法管理系統(tǒng)資源的關(guān)閉,必須手動(dòng)釋放。
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) { ... } } } }
騷操作解救你:
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é)束后程序會(huì)自動(dòng)關(guān)閉資源。
如果需要聲明多個(gè)資源,可以在try后面的()中,以;分隔;也就是說,try后邊的()可以添加多行語句, 我上篇文章有展示:《保姆系列五》原來JavaIO如此簡(jiǎn)單,驚呆了
2、instance of
對(duì)象是否是這個(gè)特定類或者是它的子類的一個(gè)實(shí)例,返回一個(gè)布爾值。左邊是對(duì)象,右邊是類;當(dāng)對(duì)象是右邊類或子類所創(chuàng)建對(duì)象時(shí),返回true;否則,返回false。
用法: result = object instanceof class 參數(shù): Result:布爾類型。 Object:必選項(xiàng)。任意對(duì)象表達(dá)式。 Class:必選項(xiàng)。任意已定義的對(duì)象類。 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、不定項(xiàng)參數(shù) ...
格式如下:
參數(shù)個(gè)數(shù)可以0或者多個(gè)
public void method(int...args);
業(yè)務(wù)場(chǎng)景:
1、在業(yè)務(wù)開發(fā)的時(shí)候經(jīng)常之前寫一個(gè)方法,但是后來業(yè)務(wù)變動(dòng)了,需要增加參數(shù),這個(gè)時(shí)候可以使用這種方式,多傳參數(shù),調(diào)用的地方不需要覆蓋
2、如果一個(gè)方法的的不確定參數(shù)個(gè)數(shù)的情況,通常來說我們會(huì)重載,但是如果多了很麻煩,這個(gè)時(shí)候...可以出場(chǎng)了
//方法重載,解決參數(shù)個(gè)數(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)用的三種方式
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 中的標(biāo)簽是為循環(huán)設(shè)計(jì)的,是為了在多重循環(huán)中方便的使用 break 和coutinue ,當(dāng)在循環(huán)中使用 break 或 continue 循環(huán)時(shí)跳到指定的標(biāo)簽處
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); } } } }
不推薦這種用法,雖然很騷,但是老老實(shí)實(shí)的一層一層break 比較好,你覺得吶?
5、方法引用
用Lambda表達(dá)式僅僅是調(diào)用一些已經(jīng)存在的方法,除了調(diào)用動(dòng)作外,沒有其他任何多余的動(dòng)作
package org.pdool; import java.util.ArrayList; import java.util.List; /** * 方法引用測(cè)試類 * @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、對(duì)象方法引用 strList.forEach(System.out::println); // 3、構(gòu)造函數(shù) strList.forEach(Player::new); // 4、對(duì)象方法 playerList.forEach(Player::printName); } }
總結(jié):
1、在try結(jié)束后程序會(huì)自動(dòng)關(guān)閉資源
2、instance of 必須是子類
3、參數(shù)個(gè)數(shù)可以0或者多個(gè),重構(gòu)代碼利器
4、使用 break 或 continue 循環(huán)時(shí)跳到指定的標(biāo)簽處
5、方法調(diào)用是除了調(diào)用動(dòng)作外,沒有其他任何多余的動(dòng)作
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
關(guān)于spring中事務(wù)的傳播機(jī)制
這篇文章主要介紹了關(guān)于spring中事務(wù)的傳播機(jī)制,所謂事務(wù)傳播機(jī)制,也就是在事務(wù)在多個(gè)方法的調(diào)用中是如何傳遞的,是重新創(chuàng)建事務(wù)還是使用父方法的事務(wù),需要的朋友可以參考下2023-05-05Spring SpringMVC在啟動(dòng)完成后執(zhí)行方法源碼解析
這篇文章主要介紹了SpringMVC在啟動(dòng)完成后執(zhí)行方法源碼解析,還是非常不錯(cuò)的,在這里分享給大家,需要的朋友可以參考下。2017-09-09Spring框架構(gòu)造注入操作實(shí)戰(zhàn)案例
這篇文章主要介紹了Spring框架構(gòu)造注入操作,結(jié)合具體實(shí)例形式分析了spring框架構(gòu)造輸入的相關(guān)定義與使用操作技巧,需要的朋友可以參考下2019-11-11SpringBoot2.x實(shí)現(xiàn)給Controller的RequestMapping添加統(tǒng)一前綴
這篇文章主要介紹了SpringBoot2.x實(shí)現(xiàn)給Controller的RequestMapping添加統(tǒng)一前綴,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02ssm框架controller層返回json格式數(shù)據(jù)到頁面的實(shí)現(xiàn)
這篇文章主要介紹了ssm框架controller層返回json格式數(shù)據(jù)到頁面的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09java集合 collection-list-LinkedList詳解
下面小編就為大家?guī)硪黄猨ava集合 collection-list-LinkedList詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01