| JAVAP(1) | JDK Commands | JAVAP(1) |
نام (NAME)
javap - دیساسمبل کردن یک یا چند فایل کلاس
خلاصه دستور (SYNOPSIS)
javap [options] classes...
- options
- گزینههای خط فرمان را مشخص میکند. بخش گزینههای JAVAP (OPTIONS FOR JAVAP) را ببینید.
- classes
- یک یا چند کلاس جدا شده با فاصله را برای پردازش حاشیهنویسیها (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 چندانتشاره (multi-release) را ندارد. استفاده از حالت مسیر کلاس (class path) در این دستور منجر به مشاهده مدخل پایه در همه فایلهای JAR، چه چندانتشاره و چه عادی، میشود. با استفاده از قالب URL برای یک آرگومان، میتوانید نسخه مشخصی از یک کلاس را برای دیساسمبل شدن تعیین کنید.
دستور javap خروجی خود را در stdout چاپ میکند.
نکته:
در ابزارهایی که از گزینههای سبک -- پشتیبانی میکنند، گزینههای سبک گنو (GNU-style) میتوانند به جای فاصله، از علامت مساوی (=) برای جداسازی نام گزینه از مقدار آن استفاده کنند.
گزینههای JAVAP (OPTIONS FOR JAVAP)
- --help، -help، -h یا -?
- پیام راهنما را برای دستور javap چاپ میکند.
- -version
- اطلاعات نسخه انتشار را چاپ میکند.
- -verbose یا -v
- اطلاعات بیشتری را درباره کلاس انتخابشده چاپ میکند.
- -l
- جدولهای شماره خط و متغیرهای محلی را چاپ میکند.
- -public
- تنها کلاسها و اعضای عمومی (public) را نشان میدهد.
- -protected
- تنها کلاسها و اعضای محافظتشده (protected) و عمومی (public) را نشان میدهد.
- -package
- کلاسها و اعضای بستهای/محافظتشده/عمومی (package/protected/public) را نشان میدهد (پیشفرض).
- -private یا -p
- تمام کلاسها و اعضا را نشان میدهد.
- -c
- کد دیساسمبل شده، برای مثال دستورالعملهایی که بایتکدهای جاوا را تشکیل میدهند، برای هر یک از متدهای کلاس چاپ میکند.
- -s
- امضاهای داخلی نوع داده (internal type signatures) را چاپ میکند.
- -sysinfo
- اطلاعات سیستمی (مسیر، اندازه، تاریخ، هش SHA-256) کلاس در حال پردازش را نشان میدهد.
- -verify
- اطلاعات تکمیلی راستیآزمایی کلاس (verification) را چاپ میکند.
- -constants
- ثابتهای static final را نشان میدهد.
- --module module یا -m module
- ماژول حاوی کلاسهایی را که باید دیساسمبل شوند، مشخص میکند.
- --module-path path
- محل یافتن ماژولهای برنامه را مشخص میکند.
- --system jdk
- محل یافتن ماژولهای سیستمی را مشخص میکند.
- --class-path path، -classpath path یا -cp path
- مسیری را که دستور javap برای یافتن فایلهای کلاس کاربر استفاده میکند، مشخص مینماید. در صورت تنظیم بودن، مقدار پیشفرض یا متغیر محیطی CLASSPATH را بازنویسی میکند.
- -bootclasspath path
- محل فایلهای کلاس راهانداز (bootstrap) را بازنویسی میکند.
- --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 EXAMPLES)
کلاس 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 }
| 2026 | JDK 26.0.2.1 |