| JAVAP(1) | JDK Commands | JAVAP(1) |
نام (NAME)
javap - دیاسمبلر و تحلیلگر بایتکد کلاسهای جاوا (نسخه ۱۷)
خلاصه دستور (SYNOPSIS)
javap [گزینهها] کلاسها...
- گزینهها
- گزینههای خط فرمان را مشخص میکند. بخش گزینهها (OPTIONS) را ببینید.
- کلاسها
- یک یا چند کلاس (جداشده با فاصله) را برای پردازش مشخص میکند. میتوانید کلاسی را که در مسیر کلاس (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 یک یا چند فایل کلاس را دیاسمبل (Disassemble) و ساختار آنها را باز میکند. خروجی به گزینههای استفادهشده بستگی دارد. هنگامی که هیچ گزینهای استفاده نشود، دستور javap فیلدها و متدهای محافظتشده (protected) و عمومی (public) کلاسهای دادهشده را چاپ میکند.
دستور javap از بستههای JAR چندنسخهای (multirelease) به صورت خودکار پشتیبانی نمیکند. استفاده از فرمت مسیر کلاس در دستور منجر به مشاهده مدخل پایه در تمام فایلهای JAR (چندنسخهای یا غیر آن) میشود. با استفاده از فرمت نشانی اینترنتی (URL)، میتوانید نسخه خاصی از یک کلاس را برای دیاسمبل شدن مشخص کنید.
دستور javap خروجی خود را در خروجی استاندارد (stdout) چاپ میکند.
نکته:
در ابزارهایی که از گزینههای به سبک -- پشتیبانی میکنند، گزینههای سبک گنو (GNU) میتوانند از علامت مساوی (=) به جای فاصله برای جدا کردن نام گزینه از مقدار آن استفاده کنند.
گزینهها (OPTIONS)
- --help، -help، -h یا -?
- پیام راهنمای دستور javap را چاپ میکند.
- -version
- اطلاعات نسخه انتشار را چاپ میکند.
- -verbose یا -v
- اطلاعات تکمیلی و تفصیلی درباره کلاس انتخابشده را چاپ میکند.
- -l
- جدول شماره خطوط و متغیرهای محلی را چاپ میکند.
- -public
- تنها کلاسها و اعضای عمومی (public) را نمایش میدهد.
- -protected
- تنها کلاسها و اعضای محافظتشده (protected) و عمومی (public) را نمایش میدهد.
- -package
- کلاسها و اعضای بستهای (package)، محافظتشده و عمومی را نمایش میدهد (پیشفرض).
- -private یا -p
- تمامی کلاسها و اعضا را نمایش میدهد.
- -c
- کد دیاسمبلشده را برای هر یک از متدهای کلاس چاپ میکند؛ برای مثال، دستورالعملهایی که بایتکدهای جاوا را تشکیل میدهند.
- -s
- امضاهای نوع داخلی (internal type signatures) را چاپ میکند.
- -sysinfo
- اطلاعات سیستمی (مسیر، اندازه، تاریخ، هش SHA-256) کلاسی که در حال پردازش است را نمایش میدهد.
- -constants
- ثابتهای static final را نمایش میدهد.
- --module ماژول یا -m ماژول
- ماژول حاوی کلاسهای مورد نظر برای دیاسمبل شدن را مشخص میکند.
- --module-path مسیر
- محل جستجوی ماژولهای برنامه را مشخص میکند.
- --system jdk
- محل جستجوی ماژولهای سیستمی را مشخص میکند.
- --class-path مسیر، -classpath مسیر یا -cp مسیر
- مسیری را که دستور javap برای یافتن فایلهای کلاس کاربر استفاده میکند، مشخص مینماید. در صورت تنظیم بودن، مقدار پیشفرض یا متغیر محیطی CLASSPATH را بازنویسی میکند.
- -bootclasspath مسیر
- محل فایلهای کلاس راهانداز (bootstrap) را بازنویسی میکند.
- --multi-release نسخه
- نسخه مورد نظر را برای انتخاب در فایلهای JAR چندنسخهای (multi-release) مشخص میکند.
- -Jگزینه
- گزینه مشخصشده را به JVM ارسال میکند. برای مثال:
-
javap -J-version javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName
بخش Overview of Java Options در java را ببینید.
مثالها (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 }
| 2021 | JDK 17 |