Trong JLS Sec 8.4.3.6, synchronized
methods, nó nói:Tại sao Class.forName ("BumpTest"), không phải là BumpTest.class?
class BumpTest { // ... static synchronized void classBump() { classCount++; } }
có chính xác tác dụng tương tự như:
class BumpTest { // ... static void classBump() { try { synchronized (Class.forName("BumpTest")) { classCount++; } } catch (ClassNotFoundException e) {} } }
này trông lạ với tôi, chưa kể đến quá phức tạp: tại sao sử dụng Class.forName("BumpTest")
, không phải BumpTest.class
? Không thể là BumpTest
không được tải vì nó thực thi mã từ lớp đó. Và viết nó như nó được, kiểm tra ClassNotFoundException
đã bị bắt và nuốt.
Có lý do cụ thể nào để viết theo cách này không?
Có thể ví dụ trước các ký tự lớp. Tôi không chắc khi nào lớp học được giới thiệu. – user2357112
Về cơ bản, bạn đang nói rằng nếu bạn chỉ sử dụng với 'BumpTest.class' thay vì' Class.forName'? Bạn đã thử chưa? Có thể ví dụ của họ không phải là ví dụ tốt nhất – sfat
@ user2357112 bạn có thể đúng: ví dụ này nằm trong [thông số Java 1.0] (http://titanium.cs.berkeley.edu/doc/java-langspec-1.0/8.doc .html # 55408), nhưng không có đề cập đến các lớp học. Nếu bạn thêm câu trả lời đó, tôi sẽ chấp nhận. –