20 thực tiễn tốt nhất về java
Một số phương pháp hay nhất về java sẽ giúp bạn nâng cao chất lượng mã của mình.
1-Ưu tiên các hàm nguyên thủy hơn các hàm bao nguyên thủy khi có thể.
Long idNumber;
long idNumber; // long takes less memory than Long
int birthYear;
short birthYear; // better because birth year can not be more than 32767
int personRunningSpeedKmHour;
byte personRunningSpeedKmHour; // better because a person can not have
// more than 127 km/h as speed
public boolean isOdd(int num) {
return (num & 1) != 0;
}
// best way to check the oddity of a number
String name = null; // redundant
int speed = 0; // redundant
boolean isOpen = false; // redundant
String name;
int speed;
boolean isOpen;
// same values in a cleaner way
public int age; // very bad
int age; // bad
private int age; // good
String s1 = new String("AnyString") ; // bad : low instantiation
// The constructor creates a new object, and adds the literal to the heap
String s2 = "AnyString" ; // good: fast instantiation
// This shortcut refers to the item in the String pool
// and creates a new object only if the literal is not in the String pool.
String address = streetNumber +" "+ streetName +" "
+cityName+" "+cityNumber+" "+ countryName; // bad
StringBuilder address = new StringBuilder(streetNumber).append(" ")
.append(streetName).append(" ").append(cityName).append(" ")
.append(cityNumber).append(" ").append(countryName); // good
8-Sử dụng dấu gạch dưới trong Numeric Literals.
int myMoneyInBank = 58356823;
int myMoneyInBank = 58_356_823; // more readable
long billsToPay = 1000000000L;
long billsToPay = 1_000_000_000L; // more readable
for (int i = 0; i < names.length; i++)
{ saveInDb(names[i]); }
for (String name : names)
{ saveInDb(name); } // cleaner
Scanner scanner = null;
try
{scanner = new Scanner(new File("test.txt"));
while (scanner.hasNext())
{System.out.println(scanner.nextLine());}}
catch (FileNotFoundException e)
{e.printStackTrace();}
finally
{if (scanner != null)
{scanner.close();}}
// error-prone as we can forget to close the scanner in the finally block
try (Scanner scanner = new Scanner(new File("test.txt")))
{while (scanner.hasNext())
{System.out.println(scanner.nextLine());}}
catch (FileNotFoundException fnfe)
{fnfe.printStackTrace();}
// cleaner and more succinct
try
{ productPrice = Integer.parseInt(integer); }
catch (NumberFormatException ex)
{ }
// fail silently without giving any feedback
try
{ productPrice = Integer.parseInt(integer); }
catch (NumberFormatException ex)
{unreadablePrices.add(productPrice); // handle error
log.error("Cannot read price : ", productPrice );// proper and meaningful message
}
- Trả về Bộ sưu tập rỗng thay vì trả về các phần tử Null
- Sử dụng
Optionalnhư bạn có thể requireNonNullphương pháp củajava.utils.ObjectsNotNull,NotEmpty,NotBlankChú thíchObjects::nonNullTRONGStreamsrequireNonNullphương pháp trongjava.util.Objects
14-Để kiểm tra sự bằng nhau, dùng ==tham chiếu và equalsđối tượng
// prerequisite: the person class overrides equals() and hashCode()
Person p1 = new Person("John","Doe");
Person p2 = new Person("John","Doe");
System.out.println(p1 == p2); // false
System.out.println(p1.equals(p2)); // true
15-Luôn triển khai mã băm khi bạn triển khai bằng.
Hãy luôn nhớ ghi đè hashCodenếu ghi đè equalsđể không bị “phá kèo”.
Theo API, kết quả trả về từ hashCode()phương thức cho hai đối tượng phải giống nhau nếu equalsphương thức của chúng cho thấy chúng tương đương nhau. Điều ngược lại không nhất thiết phải đúng.
16-Bản ghi ưu tiên (kể từ java14) cho dữ liệu không thay đổi
public final class Person {
private final String name;
private final long idNumber;
public Person(String name, long idNumber) {
this.name = name;
this.idNumber = idNumber;
}
public boolean equals(Object other) {
if (other == this) return true;
if (other == null) return false;
if (other.getClass() != this.getClass()) return false;
Person that = (Person) other;
return (this.name.equals(that.name)) && (this.idNumber == that.idNumber);
}
public String toString() {
return name + " " + idNumber;
}
public int hashCode() {
return Objects.hash(idNumber, name);
}
}
// this class can be transformed to a record:
record Person(String name, long idNumber) { } // cleaner and less verbose
public final class MyValues {
private MyValues() {
// No need to instantiate the class, we can hide its constructor
}
public static final String VALUE1 = "foo";
public static final String VALUE2 = "bar";
}
// <-- empty line
@Repository
public class ...
20-Đối với việc xử lý loại ngày java.handling.java.localDateTimeđược khuyến nghị kể từ java 8.
Để xem thêm các phương pháp hay nhất về java, tôi giới thiệu những cuốn sách tuyệt vời sau: Clean code và Effective java .

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































