Một lớp học có thể được tạo ra trong một bối cảnh tĩnh mà không bị tuyên bố tĩnh, và đây là những gì đang xảy ra đây. Chúng ta hãy nhìn vào những gì được công bố tĩnh, và được tạo ra trong một bối cảnh tĩnh có nghĩa là:
Sự khác biệt giữa một lớp vô danh tạo ra trong một bối cảnh tĩnh và một bối cảnh không tĩnh là liệu nó có một ví dụ kèm theo:
Nếu C là một lớp vô danh, sau đó:
Nếu biểu thức tạo lớp dụ xảy ra trong một bối cảnh tĩnh, sau đó tôi đã không ngay lập tức kèm theo ví dụ.
Nếu không, trường hợp kèm theo ngay lập tức của i là này.
Một lớp lồng nhau được khai báo tĩnh phép các thành viên tĩnh:
Một lớp bên trong là một lớp lồng nhau đó là không rõ ràng hoặc ngầm tuyên bố tĩnh.
Lớp lồng nhau không phải là lớp bên trong có thể khai báo thành viên tĩnh một cách tự do, phù hợp với các quy tắc thông thường của ngôn ngữ lập trình Java .
Bằng cách nói một lớp lồng nhau đó là 'implicity tuyên bố tĩnh', nó đề cập đến những thứ như các lớp học trong giao diện:
Một lớp học thành viên của giao diện là mặc nhiên tĩnh (§9.5) như vậy là không bao giờ được coi là một lớp bên trong.
Lớp ẩn danh không được khai báo tĩnh (không rõ ràng với từ khóa, hoặc ngầm như ở bên trong giao diện) và do đó không cho phép khai báo thành viên tĩnh. Tuy nhiên, chúng có thể được tạo ra trong một bối cảnh tĩnh, có nghĩa là chúng không đề cập đến một cá thể kèm theo.
Bởi vì các lớp ẩn danh không được khai báo tĩnh, cả hai dấu ngoặc kép trong câu hỏi đều nhất quán.
'B b = new B() {};' không phải là một lớp ẩn danh.Và nó hoạt động bởi vì nó được * sử dụng trong * một ngữ cảnh tĩnh, nó tuyên bố lớp bên trong chính nó tĩnh bị cấm. –
@Shywim Vì vậy, loại đối tượng được tạo ra bởi 'new B() {} 'là gì? –