你知道Java的這些騷操作嗎?
一、try with catch
還記得這樣的代碼嗎?我們需要手動(dòng)的關(guān)閉資源的流,不然會(huì)造成資源泄漏,因?yàn)樘摂M機(jī)無(wú)法管理系統(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后邊的()可以添加多行語(yǔ)句, 我上篇文章有展示:你肯定能看懂的Java IO相關(guān)知識(shí)總結(jié)
二、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);
}
三、不定項(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è)方法,但是后來(lái)業(yè)務(wù)變動(dòng)了,需要增加參數(shù),這個(gè)時(shí)候可以使用這種方式,多傳參數(shù),調(diào)用的地方不需要覆蓋
2、如果一個(gè)方法的的不確定參數(shù)個(gè)數(shù)的情況,通常來(lái)說我們會(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);
}
四、跳出多層循環(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 比較好,你覺得吶?
五、方法引用
用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)于你知道Java的這些騷操作嗎?的文章就介紹到這了,更多相關(guān)Java騷操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Kafka中的producer攔截器與consumer攔截器詳解
這篇文章主要介紹了Kafka中的producer攔截器與consumer攔截器詳解,Producer 的Interceptor使得用戶在消息發(fā)送前以及Producer回調(diào)邏輯前有機(jī)會(huì)對(duì)消息做 一些定制化需求,比如修改消息等,需要的朋友可以參考下2023-12-12
Java使用freemarker實(shí)現(xiàn)word下載方式
文章介紹了如何使用FreeMarker實(shí)現(xiàn)Word文件下載,包括引用依賴、創(chuàng)建Word模板、將Word文件存為XML格式、更改后綴為FTL模板、處理圖片和代碼實(shí)現(xiàn)2025-02-02
Java多線程文件分片下載實(shí)現(xiàn)的示例代碼
這篇文章主要介紹了Java多線程文件分片下載實(shí)現(xiàn)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
SpringBoot @Import與@Conditional注解使用詳解
在了解spring boot自動(dòng)配置原理前,再來(lái)了解下兩個(gè)注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊(cè)bean2022-10-10
淺析Java Mail無(wú)法解析帶分號(hào)的收件人列表的問題
JAVA MAIL嚴(yán)格按照RFC 822規(guī)范進(jìn)行操作,沒有對(duì)分號(hào)做處理。大多數(shù)郵件服務(wù)器都是嚴(yán)格遵循RFC 822規(guī)范的2013-08-08
Spring Boot之FilterRegistrationBean-自定義Filter詳解
這篇文章主要介紹了Spring Boot之FilterRegistrationBean-自定義Filter詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Java使用junit框架進(jìn)行代碼測(cè)試過程詳解
單元測(cè)試就是針對(duì)最小的功能單元編寫測(cè)試代碼,Junit是使用Java語(yǔ)言實(shí)現(xiàn)的單元測(cè)試框架,它是開源的,Java開發(fā)者都應(yīng)當(dāng)學(xué)習(xí)并使用Junit編寫單元測(cè)試。本文就來(lái)講講Junit框架的使用教程,需要的可以參考一下2023-02-02
Java實(shí)現(xiàn)字符串和輸入流的相互轉(zhuǎn)換
這篇文章主要介紹了Java實(shí)現(xiàn)字符串和輸入流的相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

