| JAVAP(1) | دستورات JDK | JAVAP(1) |
نام (NAME)
javap-openjdk21 - دیساسمبلر فایلهای کلاس جاوا در OpenJDK 21
خلاصه دستور (SYNOPSIS)
javap [گزینهها] کلاسها...
- گزینهها
- گزینههای خط فرمان را مشخص میکند. بخش گزینههای javap (OPTIONS FOR JAVAP) را ببینید.
- کلاسها
- یک یا چند کلاس جدا شده با فاصله را برای پردازش حاشیهنویسیها (annotations) مشخص میکند. میتوانید کلاسی را که در مسیر کلاس (class path) یافت میشود با نام فایل، نشانی URL یا نام کامل کلاس (fully qualified class name) مشخص کنید.
مثالها:
path/to/MyClass.class
jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class
java.lang.Object
توضیحات (DESCRIPTION)
دستور javap یک یا چند فایل کلاس را دیساسمبل (بازگردانی بایتکد) میکند. خروجی به گزینههای استفادهشده بستگی دارد. در صورت عدم استفاده از گزینهها، دستور javap فیلدها و متدهای محافظتشده (protected) و عمومی (public) کلاسهای ارائهشده را چاپ میکند.
دستور javap قابلیت تشخیص فایلهای چندنسخهای JAR (چندنسخهای / multirelease) را ندارد. استفاده از فرم مسیر کلاس (class path) برای دستور، باعث نمایش ورودی پایه (base entry) در تمام فایلهای JAR میشود (چه چندنسخهای باشند چه نباشند). با استفاده از فرم URL برای آرگومان، میتوانید نسخه خاصی از یک کلاس را برای دیساسمبل کردن مشخص نمایید.
دستور javap خروجی خود را در stdout چاپ میکند.
نکته:
در ابزارهایی که از گزینههای به سبک -- پشتیبانی میکنند، گزینههای به سبک GNU میتوانند بهجای فاصله، از علامت مساوی (=) برای جداسازی نام گزینه از مقدار آن استفاده کنند.
گزینههای JAVAP (OPTIONS FOR JAVAP)
- --help, -help , -h یا -?
- پیام راهنمای دستور javap را چاپ میکند.
- -version
- اطلاعات نسخه انتشار را چاپ میکند.
- -verbose یا -v
- اطلاعات اضافی درباره کلاس انتخابشده را چاپ میکند.
- -l
- جدول خطوط کد (line table) و متغیرهای محلی (local variable table) را چاپ میکند.
- -public
- فقط کلاسها و اعضای عمومی (public) را نمایش میدهد.
- -protected
- فقط کلاسها و اعضای محافظتشده (protected) و عمومی (public) را نمایش میدهد.
- -package
- کلاسها و اعضای بسته/محافظتشده/عمومی (پیشفرض) را نمایش میدهد.
- -private یا -p
- تمام کلاسها و اعضا را نمایش میدهد.
- -c
- کد دیساسمبلشده را چاپ میکند؛ برای مثال، دستورالعملهایی که بایتکدهای جاوا را برای هر یک از متدهای کلاس تشکیل میدهند.
- -s
- امضاهای نوع داخلی (internal type signatures) را چاپ میکند.
- -sysinfo
- اطلاعات سیستمی (مسیر، اندازه، تاریخ، هش SHA-256) کلاس در حال پردازش را نمایش میدهد.
- -constants
- ثوابت static final را نمایش میدهد.
- --module module یا -m module
- ماژول حاوی کلاسهایی را که باید دیساسمبل شوند مشخص میکند.
- --module-path path
- محل یافتن ماژولهای برنامه را مشخص میکند.
- --system jdk
- محل یافتن ماژولهای سیستمی را مشخص میکند.
- --class-path path, -classpath path یا -cp path
- مسیری را مشخص میکند که دستور javap برای یافتن فایلهای کلاس کاربر استفاده میکند. در صورت تنظیم، پیشفرض یا متغیر محیطی CLASSPATH را لغو (override) میکند.
- -bootclasspath path
- محل فایلهای کلاس راهانداز (bootstrap class files) را بازنویسی (override) میکند.
- --multi-release version
- نسخه انتخابی در فایلهای JAR چندنسخهای را مشخص میکند.
- -Joption
- گزینه مشخصشده را به JVM ارسال میکند. برای مثال:
-
javap -J-version javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName
بخش مرور گزینههای جاوا (Overview of Java Options) در java را ببینید.
مثالهای JAVAP (JAVAP EXAMPLE)
کلاس HelloWorldFrame زیر را کامپایل کنید:
-
import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class HelloWorldFrame extends JFrame { String message = "Hello World!"; public HelloWorldFrame(){ setContentPane(new JPanel(){ @Override protected void paintComponent(Graphics g) { g.drawString(message, 15, 30); } }); setSize(100, 100); } public static void main(String[] args) { HelloWorldFrame frame = new HelloWorldFrame(); frame.setVisible(true); } }
خروجی حاصل از اجرای دستور javap HelloWorldFrame.class به صورت زیر است:
-
Compiled from "HelloWorldFrame.java" public class HelloWorldFrame extends javax.swing.JFrame { java.lang.String message; public HelloWorldFrame(); public static void main(java.lang.String[]); }
خروجی حاصل از اجرای دستور javap -c HelloWorldFrame.class به صورت زیر است:
-
Compiled from "HelloWorldFrame.java" public class HelloWorldFrame extends javax.swing.JFrame { java.lang.String message; public HelloWorldFrame(); Code: 0: aload_0 1: invokespecial #1 // Method javax/swing/JFrame."<init>":()V 4: aload_0 5: ldc #2 // String Hello World! 7: putfield #3 // Field message:Ljava/lang/String; 10: aload_0 11: new #4 // class HelloWorldFrame$1 14: dup 15: aload_0 16: invokespecial #5 // Method HelloWorldFrame$1."<init>":(LHelloWorldFrame;)V 19: invokevirtual #6 // Method setContentPane:(Ljava/awt/Container;)V 22: aload_0 23: bipush 100 25: bipush 100 27: invokevirtual #7 // Method setSize:(II)V 30: return public static void main(java.lang.String[]); Code: 0: new #8 // class HelloWorldFrame 3: dup 4: invokespecial #9 // Method "<init>":()V 7: astore_1 8: aload_1 9: iconst_1 10: invokevirtual #10 // Method setVisible:(Z)V 13: return }
| 2023 | JDK 21 |