javap(1) Basic Tools javap(1)

javap - دیس‌اسمبل کردن یک یا چند فایل class.

javap [options] classfile...

options

گزینه‌های خط فرمان. بخش گزینه‌ها را ببینید.

classfile

یک یا چند کلاس جدا شده با فاصله برای پردازش حاشیه‌نویسی‌ها (annotations)، مانند DocFooter.class. می‌توانید کلاسی را مشخص کنید که در class path یافت می‌شود، از طریق نام فایل آن یا با یک URL مانند file:///home/user/myproject/src/DocFooter.class.

دستور javap یک یا چند فایل class را دیس‌اسمبل می‌کند. خروجی به گزینه‌های استفاده‌شده بستگی دارد. هنگامی که از هیچ گزینه‌ای استفاده نشود، دستور javap فیلدها و متدهای عمومی (public)، محافظت‌شده (protected) و بسته‌ای (package) کلاس‌های ارائه‌شده به آن را چاپ می‌کند. دستور javap خروجی خود را در stdout چاپ می‌کند..SH "گزینه‌ها (OPTIONS)"

-help
--help
-?

پیام راهنما برای دستور javap را چاپ می‌کند.

-version

اطلاعات نسخه را چاپ می‌کند.

-l

جدول‌های شماره خط و متغیرهای محلی را چاپ می‌کند.

-public

فقط کلاس‌ها و اعضای عمومی را نشان می‌دهد.

-protected

فقط کلاس‌ها و اعضای محافظت‌شده و عمومی را نشان می‌دهد.

-private
-p

همه کلاس‌ها و اعضا را نشان می‌دهد.

-Joption

گزینهٔ مشخص‌شده را به JVM ارسال می‌کند. برای مثال:
javap -J-version
javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName
برای اطلاعات بیشتر درباره گزینه‌های JVM، به مستندات دستور مراجعه کنید.

-s

امضاهای نوع داخلی را چاپ می‌کند.

-sysinfo

اطلاعات سیستم (مسیر، اندازه، تاریخ، هش MD5) کلاس در حال پردازش را نشان می‌دهد.

-constants

ثابت‌های static final را نشان می‌دهد.

-c

کد دی‌اسمبل‌شده، برای نمونه دستورالعمل‌هایی که بایت‌کدهای جاوا را تشکیل می‌دهند، برای هر یک از متدهای کلاس چاپ می‌کند.

-verbose

اندازه پشته، تعداد متغیرهای محلی و آرگومان‌های متدها را چاپ می‌کند.

-classpath path

مسیری را مشخص می‌کند که دستور javap برای جستجوی کلاس‌ها از آن استفاده می‌کند. در صورت تعیین، مقدار پیش‌فرض یا متغیر محیطی CLASSPATH را بازنویسی می‌کند.

-bootclasspath path

مسیری را که کلاس‌های راه‌انداز (bootstrap) از آن بارگذاری می‌شوند مشخص می‌کند. به‌طور پیش‌فرض، کلاس‌های راه‌انداز کلاس‌هایی هستند که پلتفرم اصلی جاوا را پیاده‌سازی کرده و در jre/lib/rt.jar و چندین فایل JAR دیگر قرار دارند.

-extdir dirs

مکانی را که افزونه‌های نصب‌شده در آن جستجو می‌شوند بازنویسی می‌کند. مکان پیش‌فرض برای افزونه‌ها مقدار java.ext.dirs است.

کلاس DocFooter زیر را کامپایل کنید:

import java.awt.*;
import java.applet.*;
 
public class DocFooter extends Applet {
        String date;
        String email;
 
        public void init() {
                resize(500,100);
                date = getParameter("LAST_UPDATED");
                email = getParameter("EMAIL");
        }
 
        public void paint(Graphics g) {
                g.drawString(date + " by ",100, 15);
                g.drawString(email,290,15);
        }
}

خروجی حاصل از دستور javap DocFooter.class به صورت زیر خواهد بود:

Compiled from "DocFooter.java"
public class DocFooter extends java.applet.Applet {
  java.lang.String date;
  java.lang.String email;
  public DocFooter();
  public void init();
  public void paint(java.awt.Graphics);
}

خروجی حاصل از دستور javap -c DocFooter.class به صورت زیر خواهد بود:

Compiled from "DocFooter.java"
public class DocFooter extends java.applet.Applet {
  java.lang.String date;
  java.lang.String email;
  public DocFooter();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method
java/applet/Applet."<init>":()V
       4: return        
  public void init();
    Code:
       0: aload_0       
       1: sipush        500
       4: bipush        100
       6: invokevirtual #2                  // Method resize:(II)V
       9: aload_0       
      10: aload_0       
      11: ldc           #3                  // String LAST_UPDATED
      13: invokevirtual #4                  // Method
 getParameter:(Ljava/lang/String;)Ljava/lang/String;
      16: putfield      #5                  // Field date:Ljava/lang/String;
      19: aload_0       
      20: aload_0       
      21: ldc           #6                  // String EMAIL
      23: invokevirtual #4                  // Method
 getParameter:(Ljava/lang/String;)Ljava/lang/String;
      26: putfield      #7                  // Field email:Ljava/lang/String;
      29: return        
  public void paint(java.awt.Graphics);
    Code:
       0: aload_1       
       1: new           #8                  // class java/lang/StringBuilder
       4: dup           
       5: invokespecial #9                  // Method
 java/lang/StringBuilder."<init>":()V
       8: aload_0       
       9: getfield      #5                  // Field date:Ljava/lang/String;
      12: invokevirtual #10                 // Method
 java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      15: ldc           #11                 // String  by 
      17: invokevirtual #10                 // Method
 java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      20: invokevirtual #12                 // Method
 java/lang/StringBuilder.toString:()Ljava/lang/String;
      23: bipush        100
      25: bipush        15
      27: invokevirtual #13                 // Method
 java/awt/Graphics.drawString:(Ljava/lang/String;II)V
      30: aload_1       
      31: aload_0       
      32: getfield      #7                  // Field email:Ljava/lang/String;
      35: sipush        290
      38: bipush        15
      40: invokevirtual #13                 // Method
java/awt/Graphics.drawString:(Ljava/lang/String;II)V
      43: return        
}
•java(1)
•javac(1)
•javadoc(1)
•javah(1)
•jdb(1)
•jdeps(1)
8 August 2014 JDK 8