你知道Java的這些騷操作嗎?
一、try with catch
還記得這樣的代碼嗎?我們需要手動的關閉資源的流,不然會造成資源泄漏,因為虛擬機無法管理系統(tǒ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結束后程序會自動關閉資源。
如果需要聲明多個資源,可以在try后面的()中,以;分隔;也就是說,try后邊的()可以添加多行語句, 我上篇文章有展示:你肯定能看懂的Java IO相關知識總結
二、instance of
對象是否是這個特定類或者是它的子類的一個實例,返回一個布爾值。左邊是對象,右邊是類;當對象是右邊類或子類所創(chuàng)建對象時,返回true;否則,返回false。
用法:
result = object instanceof class
參數:
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);
}
三、不定項參數 ...
格式如下:
參數個數可以0或者多個
public void method(int...args);
業(yè)務場景:
1、在業(yè)務開發(fā)的時候經常之前寫一個方法,但是后來業(yè)務變動了,需要增加參數,這個時候可以使用這種方式,多傳參數,調用的地方不需要覆蓋
2、如果一個方法的的不確定參數個數的情況,通常來說我們會重載,但是如果多了很麻煩,這個時候...可以出場了
//方法重載,解決參數個數不確定問題
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);
調用的三種方式
public void call(){
//1、 不使用變參
method(1);
//2、 直接調用
method(1,2,23,4,5,6);
//3、 數組調用
int[] arr = {1,2,23,4,5,6};
method(5,arr);
}
四、跳出多層循環(huán)的label
Java 中的標簽是為循環(huán)設計的,是為了在多重循環(huán)中方便的使用 break 和coutinue ,當在循環(huán)中使用 break 或 continue 循環(huán)時跳到指定的標簽處
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 比較好,你覺得吶?
五、方法引用
用Lambda表達式僅僅是調用一些已經存在的方法,除了調用動作外,沒有其他任何多余的動作

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、構造函數
strList.forEach(Player::new);
// 4、對象方法
playerList.forEach(Player::printName);
}
}
總結
1、在try結束后程序會自動關閉資源
2、instance of 必須是子類
3、參數個數可以0或者多個,重構代碼利器
4、使用 break 或 continue 循環(huán)時跳到指定的標簽處
5、方法調用是除了調用動作外,沒有其他任何多余的動作
到此這篇關于你知道Java的這些騷操作嗎?的文章就介紹到這了,更多相關Java騷操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
創(chuàng)建好SpringBoot項目后但是找不到Maven的解決方法
在使用IDEA專業(yè)版創(chuàng)建好SpringBoot項目后,發(fā)現上方導航欄的運行按鈕是灰色的,而且左側導航欄的pom.xml的圖標顏色也不是正常的,點開右側導航欄的Maven后,發(fā)現Maven找不到,所以本文介紹了創(chuàng)建好SpringBoot項目后但是找不到Maven的解決方法,需要的朋友可以參考下2024-10-10
SpringBoot+Echarts實現請求后臺數據顯示餅狀圖
這篇文章主要介紹了SpringBoot+Echarts實現請求后臺數據顯示餅狀圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12
Struts2中Action三種接收參數形式與簡單的表單驗證功能
本文以登錄驗證為例,進行代碼展示,下面給大家詳細介紹Struts2中Action三種接收參數形式與簡單的表單驗證功能,需要的朋友參考下2017-03-03
SpringBoot2整合activiti6環(huán)境搭建過程解析
這篇文章主要介紹了SpringBoot2整合activiti6環(huán)境搭建過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11
如何通過自定義spring?invalidator注解校驗數據合法性
這篇文章主要介紹了如何通過自定義spring?invalidator注解校驗數據合法性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
SpringCloud OpenFeign超詳細講解模板化遠程通信的實現
這篇文章主要介紹了SpringCloudSpringboot集成OpenFeign實現模板化遠程通信,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2022-07-07

