2010-03-09 24 views

Trả lời

6
  1. Bạn có thể ném bất kỳ đối tượng nào, không chỉ ngoại lệ.
  2. Bạn có thể quá tải trên loại trả về.
  3. Bạn có thể ném bất kỳ ngoại lệ nào mà không khai báo nó trong các lần ném.
3

JVM bytecode là stack-oriented programming language, vì vậy hầu hết các hướng dẫn quản lý ngăn xếp không có ý nghĩa trong Java, ví dụ: dup, swap, v.v. Bất kỳ goto, tất nhiên, cũng không thể hiển thị trong Java.

Thứ gì đó như JSR 292 đề xuất hỗ trợ cho các ngôn ngữ được nhập động, mà tôi không nghĩ Java đang có kế hoạch trở thành.

Tôi nghĩ rằng điều gì đó cần phải được giải quyết ở đây, mặc dù: câu hỏi của bạn dường như ít nhất được thúc đẩy một phần bởi vấn đề hiệu suất. Trong thực tế, bytecode được biên dịch JIT để lắp ráp. Có hay không có một hướng dẫn bytecode siêu phép thuật thực sự là khá tranh luận.

+0

Mọi thứ có thể hợp lý để lại cho JIT không? Có lẽ một cái gì đó giống như đảm bảo phân bổ stack? –

2

Tôi đã đọc rằng chữ ký phương pháp bytecode hỗ trợ nhiều công văn trên kiểu trả về, trong khi Java chỉ cho phép các phương pháp cùng tên để gửi về loại tham số.

+0

Với cùng một mã thông báo, bạn có thể tìm nạp các trường có cùng tên nhưng cũng có các kiểu khác nhau. – polygenelubricants

1

Điều ngược lại cũng đúng.

Ví dụ: khả năng hiển thị của Java đối với các lớp bên trong không thể được biểu diễn bằng mã byte. JVM chỉ biết khả năng hiển thị được bảo vệ theo gói, được bảo vệ, công khai và riêng tư. Vì vậy, trình biên dịch Java phải sử dụng một hack: Nó tạo ra các phương thức wrapper tổng hợp (có thể nhìn thấy gói) để trưng ra các trường riêng và các phương thức của các lớp bên trong cho lớp bên ngoài.

+0

Khả năng hiển thị của các lớp bên trong được thể hiện bằng mã byte bằng cách sử dụng các thuộc tính INNERCLASS/OUTERCLASS. –

Các vấn đề liên quan