Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Động lực học lập trình Java, Phần 2: Giới thiệu sự phản chiếu Sử dụng thông tin lớp trong thời gian
MIỄN PHÍ
Số trang
20
Kích thước
259.9 KB
Định dạng
PDF
Lượt xem
935

Động lực học lập trình Java, Phần 2: Giới thiệu sự phản chiếu Sử dụng thông tin lớp trong thời gian

Nội dung xem thử

Mô tả chi tiết

Động lực học lập trình Java, Phần 2: Giới thiệu sự phản chiếu

Sử dụng thông tin lớp trong thời gian chạy để khởi động việc lập trình của bạn

Dennis Sosnoski, Nhà tư vấn, Sosnoski Software Solutions, Inc.

Tóm tắt: Sự phản chiếu cho phép truy cập mã của bạn tới thông tin bên trong đối

với các lớp được nạp vào JVM và cho phép bạn viết mã để làm việc với các lớp

được lựa chọn trong quá trình thực hiện, không phải trong mã nguồn. Điều này tạo

cho sự phản chiếu một công cụ quan trọng để xây dựng các ứng dụng linh hoạt.

Nhưng xem ra -- nếu được sử dụng không thích hợp, sự phản chiếu có thể tốn

kém. Trong Phần 2 của loạt bài của mình về bản chất của nền tảng Java, nhà tư

vấn phần mềm Dennis Sosnoski đưa ra một sự giới thiệu về cách sử dụng sự phản

chiếu, cũng như xem xét một số các chi phí liên quan. Bạn cũng sẽ tìm hiểu cách

Java Reflection API (API phản chiếu Java) cho phép bạn kết nối vào các đối tượng

trong thời gian chạy.

Trong "Động lực học lập trình Java, Phần 1," tôi đã cung cấp cho bạn một sự giới

thiệu về các lớp lập trình Java và nạp lớp. Bài viết đó mô tả một số tư liệu thông

tin rộng lớn theo định dạng lớp nhị phân Java. Trong bài viết tháng này, tôi sẽ

trình bày những điều cơ bản về việc sử dụng Java Reflection API để truy cập và sử

dụng một số thông tin như vậy trong thời gian chạy. Để giúp duy trì những điều

này thú vị với các nhà phát triển, những người đã biết những điều cơ bản của sự

phản chiếu, tôi sẽ trình bày một cái nhìn về cách so sánh hiệu năng phản chiếu với

truy cập trực tiếp.

Đừng bỏ lỡ phần còn lại của loạt bài này

Phần 1, "Các lớp Java và nạp lớp" (04.2003)

Phần 3, "Ứng dụng sự phản chiếu" (07.2003)

Phần 4, "Chuyển đổi lớp bằng Javassist" (09.2003)

Phần 5, "Việc chuyển các lớp đang hoạt động" (02.2004)

Phần 6, "Các thay đổi hướng-khía cạnh với Javassist" (03.2004)

Phần 7, "Kỹ thuật bytecode với BCEL" (04.2004)

Phần 8, "Thay thế sự phản chiếu bằng việc tạo mã" (06.2004)

Sử dụng sự phản chiếu khác với lập trình Java tiêu chuẩn ở chỗ nó làm việc với

siêu dữ liệu -- dữ liệu mô tả dữ liệu khác. Kiểu siêu dữ liệu cụ thể được truy cập

bởi sự phản chiếu của ngôn ngữ Java là sự mô tả về các lớp và các đối tượng bên

trong JVM. Sự phản chiếu cho phép bạn truy cập trong thời gian chạy đến một loạt

các thông tin lớp. Thậm chí nó còn cho phép bạn đọc và viết các trường và các

phương thức gọi của một lớp được chọn trong thời gian chạy.

Sự phản chiếu là một công cụ mạnh. Nó cho phép bạn xây dựng mã linh hoạt, mã

này có thể được lắp ráp trong thời gian chạy mà không đòi hỏi các liên kết mã

nguồn giữa các thành phần. Nhưng một số khía cạnh của sự phản chiếu có thể khó

hiểu. Trong bài này, tôi sẽ đi vào những lý do tại sao bạn có thể không muốn sử

dụng sự phản chiếu trong các chương trình của bạn, cũng như những lý do tại sao

bạn muốn. Sau khi bạn biết các sự thỏa hiệp, bạn có thể quyết định cho chính mình

khi những lợi ích có giá trị hơn những hạn chế.

Lớp của những người mới bắt đầu

Điểm khởi đầu để sử dụng sự phản chiếu luôn luôn là một cá thể java.lang.Class.

Nếu bạn muốn làm việc với một lớp định sẵn, thì ngôn ngữ Java cung cấp một

phím tắt dễ dàng để có được cá thể Class trực tiếp:

Class clas = MyClass.class;

Khi bạn sử dụng kỹ thuật này, tất cả các công việc liên quan đến việc nạp các lớp

diễn ra ở hậu trường. Tuy nhiên, nếu bạn cần phải đọc tên lớp trong thời gian chạy

từ một số nguồn bên ngoài, thì cách tiếp cận này không phải là sắp thực hiện. Thay

vào đó, bạn cần phải sử dụng một trình nạp lớp để tìm thông tin lớp. Dưới đây là

một cách để thực hiện điều đó:

// "name" is the class name to load

Class clas = null;

try {

clas = Class.forName(name);

Tải ngay đi em, còn do dự, trời tối mất!