Mọi người cho em hỏi làm thế nào để xem được code định nghĩa ra một chức năng nào đó trong java ạ
Vd như là muốn xem mã nguồn tạo ra vòng lặp while ạ
em cảm ơn ạ.
Hỏi về mã nguồn trong java
Vòng lặp là từ khóa, không phải phương thức, không có mã nguồn java.
JDK có kèm theo mã nguồn, cách xem trên từng IDE khác nhau, mình không biết cụ thể.
Ngoài ra, một số phương thức nội tại (từ khóa native
) không có mã nguồn java, nó chạy trực tiếp từ máy ảo.
Đối với mã nguồn dạng file .java thì hầu hết IDE đều hỗ trợ bấm 1 cái là nhảy ngay đến mã nguồn của object, method, class, interface, enum.
Đối với chức năng đã biên dịch (file .class) thì các IDE hiện nay cũng đã hỗ trợ decompile
Còn những thứ sâu hơn thì mình không biết, ví dụ cách ngôn ngữ định nghĩa vòng lặp while, nó sâu quá, mình chịu
Syntax của Java không có mã nguồn, việc chạy các cú pháp như vậy do compiler của Java đảm nhiệm. Nếu tò mò hơn, bạn có thể đọc quyển Compilers: Principles, Techniques, and Tools để biết compiler hoạt động như nào. Nói chung chung thì cơ chế của compiler của tất cả các ngôn ngữ đều như nhau như dưới đây:
(nguồn: https://www.tutorialspoint.com/compiler_design/compiler_design_phases_of_compiler.htm)
-
Lexical Analyzer: Đơn giản chỉ là đọc source code (từng từ, từng kí tự) và lưu lại thành các token
VD: sum = oldSum + rate * 60 ----> id1 = id2 + id3 * 60
(id1, id2, id3, =, +, *, 60 là các token) -
Syntax Analyzer: Từ các token ở trên và vị trí của chúng trong mã nguồn, compiler xây dựng cây cú pháp (syntax tree).
VD:
id1 = id2 + id3 * 60 -------> -
Semantic Analyzer: Java sẽ định nghĩa 1 bộ rule (nôm na là định nghĩa các token nào sẽ được đi cùng token nào, kiểu như sau int thì sẽ phải là chữ cái, không đc là kí tự đặc biệt,…) và so sánh cái cây cú pháp vừa tạo có thỏa mãn với bộ rule hay không.
------>
(cái chỗ intToReal kia là theo rule, các phép toán sẽ được thực hiện với số thực, compiler kiểm tra 60 có thể chuyển về dạng số thực được nên thêm vào, gọi là attribute, ngược lại nếu không theo rule sẽ báo lỗi) -
Intermediate Code Generator: Từ cây cú pháp kia tạo ngược lại thành code
---->
-
Machine Independent Code Optimiser: Code vừa tạo ra sẽ được tối ưu lại sao cho nhỏ gọn nhất có thể (tiết kiệm bộ nhớ, CPU,…)
------>
-
Code Generation và Machine Dependency Code Optimiser: Từ mã nguồn của bước trên sẽ chuyển thẳng sang mã máy và tối ưu lại 1 lần nữa để code chạy đc nhanh nhất
------>