Làm sao main
không thể được sử dụng như một định danh trong khi nó được sử dụng như định danh để khai báo phương thức "chính"?
Đối với một thành ngữ cổ điển như vậy:
public class Foo{
public static void main(String[] args){
}
}
main
không phải là một từ khóa và nó có thể sẽ không bao giờ là một từ khóa trong Java vì lý do tương thích retro rõ ràng.
Về câu hỏi, là main
một định danh tốt?
Đầu tiên: hợp lệ cho một trình biên dịch không có nghĩa là tốt.
Ví dụ, java1234
tùy chọn được đề xuất cũng là một định danh hợp lệ nhưng điều đó thực sự nên tránh.
main
có một ý nghĩa rất đặc biệt và quan trọng: nó được sử dụng làm phương thức điểm vào của các lớp và các tệp được thực thi bởi java
dòng lệnh.
Việc sử dụng main
cho một tên phương thức không điền vào các tiêu chí được sử dụng bởi java
dòng lệnh sẽ chỉ gây hiểu nhầm trong khi sử dụng nó làm tên biến hoặc tên lớp có thể có ý nghĩa.
Ví dụ: xác định lớp đại diện cho điểm vào của một ứng dụng vì Main
lớp của ứng dụng có thể được chấp nhận và do đó sử dụng nó làm tên biến cũng như:
public class Main {
public static void main(String args[]){
Main main = new Main();
// ...
}
}
Nói chung, trong Java, nhiều ký tự hoặc "từ" được coi là định danh hợp lệ cho trình biên dịch nhưng không được khuyến khích sử dụng trong mã máy khách (nhưng mã được tạo có thể làm điều đó: ví dụ các lớp lồng nhau) là không thể đọc được và / hoặc thực sự sai lệch.
Ví dụ, điều này có thể hợp lệ cho trình biên dịch:
public class Object { // 1
public void foo() {
...
}
}
public class BadChosenIdentifier {
public static void main() { // 2
new BadChosenIdentifier().toString(new Object());
}
public void toString(Object java1234) { // 3, 4
String _result$ = java1234 + " -> to avoid"; // 4
System.out.println(_result$);
}
}
Nhưng chúng tôi không muốn:
- để đặt tên
Object
lớp của chúng tôi vì điều này được định nghĩa trongjava.lang
(1).
- đặt tên cho một phương thức
main()
nếu không điền các tiêu chí được sử dụng bởijava
dòng lệnh (2).
- làm quá tải
Object.toString()
phương thức (3).
- để đặt tên cho các biến của chúng tôi với
_
, $
hoặc bất kỳ ký tự đáng ngạc nhiên / không thể thay đổi nào đi ngược lại các quy ước đặt tên được chia sẻ (4).