更新時間:2022-10-10 10:36:47 來源:動力節點 瀏覽1242次
在 Java 中,聲明的每個變量都有一個作用域。這意味著變量的可見性和使用必須僅限于范圍內。在局部變量的情況下,從其聲明點到聲明它的方法或代碼塊的末尾都是可見的。在可能使用的點附近聲明一個變量是一個好習慣。這不僅增強了代碼的可讀性,而且使調試更簡單。
嘗試
連接 con = DriverManager。獲取連接(DATABASE_URL,
用戶名密碼);
語句 stmt = con.createStatement();
結果集 rs = stmt.executeQuery(SQL_QUERY)
){
//...
}捕獲(SQLException e){
e.printStackTrace();
}
在代碼片段中觀察局部變量的范圍是如何限制在聲明它們的塊內的。一旦塊結束,變量就看不見了。此外,代碼變得更加直觀、易讀和干凈。
但是,從 Java 8 開始,我們可以利用 lambda 表達式使代碼更加簡潔和直觀。為了說明這個想法,請注意我們如何在一行 lambda 表達式中組合許多實用程序。
整數[] nums={90,71,26,34,42,35,66,57,88,89};
打印原始數字。
最終列表<整數> l1 = 數組。asList (nums);
系統。out .printf( "原文:%s%n" ,l1);
現在我們使用 lambda 表達式來打印升序排序后的數字。
最終列表<整數> l2 = 數組。流(數字).sorted
().collect(Collectors.toList ());
系統。out .printf( "排序后:%s%n" ,l2);
我們可以應用更多的實用程序,例如只打印那些大于 50 的數字,然后按升序對它們進行排序。
最終列表<整數> l3 = 數組。流(數字)
.filter(num -> num > 50).collect(Collectors.toList ( ));
系統。out .printf( "只對大于 50 的數字排序
: %s%n" , l3);
在 Java 中,方法要么屬于一個類,要么屬于一個接口。因此,局部變量可能會被程序員無意中賦予與類成員變量相同的名稱。然而,Java 編譯器能夠從范圍中選擇正確的編譯器。此外,現代 IDE 足夠復雜,可以識別沖突。無論如何,程序員自己應該有足夠的責任來避免這種沖突,因為結果可能是災難性的。下面的代碼說明了如果我們不處理沖突的變量名,我們如何得到非常不同的結果。
public class TestClass {
私人雙倍傭金= 5.5d;
public double increaseCommission( final double newComm){
double Commission = newComm;
傭金+=傭金;
退貨傭金;
}
public double getCommission(){
返回傭金;
}
公共靜態無效{TestClass m = new TestClass();
系統。out .println(m.increaseCommission(3.3));
系統。出.println(m.getCommission());
}
}
避免與具有局部變量的類的字段名稱沖突的另一種方法是使用this關鍵字。例如this.commission總是只引用類字段。但是,經驗表明,最好在構造函數以外的方法中完全使用不同的名稱,以避免字段名稱沖突。
在 Java 中,一個變量一旦聲明就可以被重用。因此,方法參數中聲明的非最終局部變量也可以用不同的值重用。但是,這不是一個好主意,因為變量作為方法參數發送應該保存它所帶來的值的值,即方法使用的原始值。如果我們改變這個值,我們將完全失去方法中帶來的原始內容。相反,我們必須做的是將值復制到另一個變量并進行必要的處理。但是,我們可以通過使用final關鍵字來完全限制參數變量并使之成為常量,如下所示。
公共雙計算(最終雙newVal){
雙tmp = newVal;
// ...
返回tmp;
}
在 Java 中,裝箱和拆箱是基本類型與其對應的包裝類之間的轉換技術的另一面。包裝類什么都不是,而是原始類型的“類”版本,例如int到Integer、float到Float、double到Double、char到Character、byte到Byte、Boolean到Boolean等等。裝箱是將int轉換為Integer,拆箱是從Integer轉換回來到int。編譯器經常在后臺執行轉換;這稱為自動裝箱。但是,有時,這種自動裝箱可能會產生意想不到的結果,我們必須意識到這一點。
公共靜態無效更新(最終雙newVal){
// ...
}
最終雙 val = null ;
更新(val);
因為接口不依賴于任何方法實現(默認方法除外),所以我們必須在不需要具體類的地方充分使用它們。接口就像合同一樣,具有足夠的自由度和靈活性來布置合同。具體課程可以利用靈活性來豐富和補充其業務議程。尤其如此,當實施涉及外部系統或服務時,通??梢钥吹竭@一點。
包com.mano.examples;
公共接口Payable {
public double calcAmount();
}
包com.mano.examples;
公共類Invoice實現Payable {
private String itemNumber ;
私有字符串項目名稱;
私人 int 數量;
私人雙單位價格;
public Invoice(String itemName, int quantity,
double unitPrice) {
// ...
}
public int getQuantity() {
// ...
返回數量;
}
public double getUntPrice() {
// ...
return unitPrice ;
}
@覆蓋
public double calcAmount() {
return getQuantity()*getUntPrice();
}
}
Java 中沒有其他類型像String一樣被擴展。Java 字符串以 UTF-16 格式表示,并且是不可變對象。這意味著每次我們執行像連接這樣需要修改原始字符串的操作時,都會創建一個新的字符串對象。僅為執行所需操作而創建的這個中間字符串對象既浪費又低效。這是因為中間對象的創建是無關的;它涉及垃圾收集,盡管我們可以避免它。有兩個配套的字符串類,稱為StringBuffer和StringBuilder,它們可以恰當地促進我們可能需要的那種字符串操作。這兩個類就是為此而構建的。StringBuffer和_StringBuilder是前者是線程安全的。我們可以在需要大量字符串操作時使用這兩個類,而不是使用不可變的String實例。
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append( "你好" );
stringBuilder.append(108);
stringBuilder.deleteCharAt(0);
stringBuilder.insert(0, "h" );
stringBuilder.replace(stringBuilder.length() - 3,
stringBuilder.length(), "." );
系統。out .println(stringBuilder);
Java 命名約定是一組規則,使 Java 代碼在 Java 項目和庫中看起來一致。它們不是嚴格的規則,而是作為良好編程實踐的準則。因此,由于倉促或反抗而違反代碼統一性的神圣性并不是一個好主意。規則非常簡單。
包名是小寫的類型:javax.sql、org.junit、java.lang。
類、枚舉、接口和注釋名稱以大寫形式輸入:Thread、Runnable、@Override。
方法和字段名稱以駝峰形式輸入:deleteCharAt、add、isNull。
常量是用下劃線分隔的大寫類型:SIZE、MIN_VALUE。
局部變量以駝峰形式輸入:employeeName、birthDate、email。
這些約定已經成為 Java 的一部分,幾乎每個程序員都虔誠地遵循它們。結果,這方面的任何變化看起來都是古怪和錯誤的。遵循這些約定的一個明顯好處是代碼風格與庫或框架代碼保持一致。它還可以幫助其他程序員在需要時快速獲取代碼,從而利用代碼的整體可讀性。
Java以其豐富的庫集而聞名。然而,并不是每個庫都經過完美設計,但在大多數情況下它們都是最優的。Java 不時發布新庫并積極改進現有庫。因此,應始終盡可能多地使用庫中的類、方法、接口、Java枚舉和注釋。這可以大大減少生產時間。此外,所包含的功能都經過了很好的測試。最好在需要時使用庫中的它們,而不是重新發明輪子。
由于 Java 平臺不斷發展,因此我們必須密切關注我們從第三方庫或框架中包含的特性,這些特性已經存在于 Java 標準庫中。經驗法則是先用盡內部資源,然后再從外部資源中剔除支持。
不變性的概念非常重要。我們必須決定我們打算設計的類是否可以不可變,因為不可變性保證了它幾乎可以在任何地方使用,而不會出現并發修改的任何麻煩。不幸的是,并非所有類都可以設計為不可變的。但是,請確保我們必須盡可能這樣做。這使生活變得更加輕松。您可以稍后感謝我。
測試驅動實踐 (TDD) 是 Java 社區中代碼質量的象征。測試是現代 Java 開發的一部分,Java 標準庫有 Junit 框架來幫助實現這個方向。因此,初出茅廬的 Java 程序員不應該回避用代碼編寫測試用例。盡量保持測試簡單而簡短,一次只關注一件事。生產環境中可以有數百個測試用例。編寫測試用例的一個明顯好處是它們提供了正在開發的特性的即時反饋。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習