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."":()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."":(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 "":()V       7: astore_1       8: aload_1       9: iconst_1       10: invokevirtual #10       // Method setVisible:(Z)V       13: return } JDK 17 2021 JAVAP(1)