Tôi mới bắt đầu học Java.
Bạn của tôi, người đang giúp tôi học tập vừa gửi cho tôi cái này và nói 'hãy tìm ra cái này'.
Rất tiếc, tôi không thể đọc cái này. Nó trông giống như Perl đối với tôi.
class _{_ _;_(){_=this;}}
Nó có nghĩa là gì?
Tôi mới bắt đầu học Java.
Bạn của tôi, người đang giúp tôi học tập vừa gửi cho tôi cái này và nói 'hãy tìm ra cái này'.
Rất tiếc, tôi không thể đọc cái này. Nó trông giống như Perl đối với tôi.
class _{_ _;_(){_=this;}}
Nó có nghĩa là gì?
Câu trả lời:
_
là tên lớp. Nó rất khó hiểu, nhưng nó hoạt động!
Với lớp được đổi tên:
class Something {Something something;Something(){something=this;}}
Và dọn dẹp:
class Something {
Something something;
Something() {
something=this;
}
}
Và bạn có thể phát điên với cách đặt tên kỳ quặc này :)
class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__=___;}}
Trên thực tế, Unicode thậm chí còn được hỗ trợ, vì vậy điều này hợp lệ:
class 合法類別名稱{合法類別名稱(){}}
get crazy
ví dụ của bạn . (1) bạn quên để thêm dấu chấm phẩy sau ____=__
(hai lần), (2) nếu bạn đang cố gắng quá tải _
phương pháp thì bạn cũng cần để vượt qua loại rất _(___)
nên _(_ ___)
. Đây là cách nó có thể trông class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__ = ___;}}
. Đợi tí. Tôi vừa gỡ lỗi dấu gạch dưới? Đã đến lúc cần phanh.
_
là tên lớp, dấu gạch dưới là tên biến Java hợp lệ, bạn chỉ cần thụt đầu dòng mã của mình để giải mã nó:
class _{
_ _;
_(){
_=this;
}
}
Giống:
class A{
A A;
A(){
A=this;
}
}
Chỉnh sửa: cảm ơn @Daniel Fischer
Tên kiểu và tên biến có không gian tên khác nhau. và ví dụ mã
class FOO { FOO FOO; }
hợp lệ trong Java.
Tóm lược
_
là một tên lớp, ví dụ tại class _{
_
là tên thành viên trong lớp, ví dụ tại _ _;
và_=this
_
là một tên phương thức khởi tạo, ví dụ tại _()
Hãy nhớ rằng: Java sử dụng sáu không gian tên khác nhau:
- Tên gói,
- gõ tên,
- tên trường (biến),
- tên phương thức,
- tên biến cục bộ (bao gồm cả tham số) và
- nhãn.
Ngoài ra, mỗi enum được khai báo có không gian tên riêng của nó. Tên giống nhau của các loại khác nhau không xung đột; ví dụ, một phương thức có thể được đặt tên giống như một biến cục bộ .
class FOO { FOO FOO; }
làm.
data Foo = Foo | Bar Int
hoạt động. Tất nhiên, nó chỉ có thể hoạt động ở những ngôn ngữ mà bạn có thể tìm ra loại mã định danh từ nơi nó xuất hiện.
đó là một ví dụ tốt. Java cho phép unicode làm mã định danh để bạn có thể viết những thứ như:
class ⲥlass {
ⲥlass claѕѕ;
}
ở đây tên lớp c là 'ⲥ' (U + 2CA5 CHỮ NHỎ COPTIC SIMA) và
tên đối tượng là 'ѕ' (U + 0455 KÍCH THƯỚC CHỮ NHỎ CYRILLIC).
class
, đó là một từ khóa.
'class'
. như tôi đã đề cập rằng tên đối tượng 'claѕѕ'
có 'ss'
không phải là ký tự ascii. vì vậy thực sự tên của đối tượng claѕѕ
là cla\u0455\u0455'
tôi nghĩ rằng điều này rõ ràng là hiểu lầm. :)