.\" Copyright (c) 1994, 2020, Oracle and/or its affiliates. All rights reserved. .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. .\" .\" This code is free software; you can redistribute it and/or modify it .\" under the terms of the GNU General Public License version 2 only, as .\" published by the Free Software Foundation. .\" .\" This code is distributed in the hope that it will be useful, but WITHOUT .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License .\" version 2 for more details (a copy is included in the LICENSE file that .\" accompanied this code). .\" .\" You should have received a copy of the GNU General Public License version .\" 2 along with this work; if not, write to the Free Software Foundation, .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. .\" .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA .\" or visit www.oracle.com if you need additional information or have any .\" questions. .\" .\" Automatically generated by Pandoc 2.19.2 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. .ie "\f[CB]x\f[R]"x" \{\ . ftr V B . ftr VI BI . ftr VB B . ftr VBI BI .\} .el \{\ . ftr V CR . ftr VI CI . ftr VB CB . ftr VBI CBI .\} .TH "JAVAP" "1" "2023" "JDK 21" "دستورات JDK" .hy .SH "نام (NAME)" .PP javap-openjdk21 \- دیس‌اسمبلر فایل‌های کلاس جاوا در OpenJDK 21 .SH "خلاصه دستور (SYNOPSIS)" .PP \f[V]javap\f[R] [\f[I]گزینه‌ها\f[R]] \f[I]کلاس‌ها\f[R]... .TP \f[I]گزینه‌ها\f[R] گزینه‌های خط فرمان را مشخص می‌کند. بخش \f[B]گزینه‌های javap (OPTIONS FOR JAVAP)\f[R] را ببینید. .TP \f[I]کلاس‌ها\f[R] یک یا چند کلاس جدا شده با فاصله را برای پردازش حاشیه‌نویسی‌ها (annotations) مشخص می‌کند. می‌توانید کلاسی را که در مسیر کلاس (class path) یافت می‌شود با نام فایل، نشانی URL یا نام کامل کلاس (fully qualified class name) مشخص کنید. .RS .PP مثال‌ها: .RS .PP \f[V]path/to/MyClass.class\f[R] .RE .RS .PP \f[V]jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class\f[R] .RE .RS .PP \f[V]java.lang.Object\f[R] .RE .RE .SH "توضیحات (DESCRIPTION)" .PP دستور \f[V]javap\f[R] یک یا چند فایل کلاس را دیس‌اسمبل (بازگردانی بایت‌کد) می‌کند. خروجی به گزینه‌های استفاده‌شده بستگی دارد. در صورت عدم استفاده از گزینه‌ها، دستور \f[V]javap\f[R] فیلدها و متدهای محافظت‌شده (protected) و عمومی (public) کلاس‌های ارائه‌شده را چاپ می‌کند. .PP دستور \f[V]javap\f[R] قابلیت تشخیص فایل‌های چندنسخه‌ای JAR (چندنسخه‌ای / multirelease) را ندارد. استفاده از فرم مسیر کلاس (class path) برای دستور، باعث نمایش ورودی پایه (base entry) در تمام فایل‌های JAR می‌شود (چه چندنسخه‌ای باشند چه نباشند). با استفاده از فرم URL برای آرگومان، می‌توانید نسخه خاصی از یک کلاس را برای دیس‌اسمبل کردن مشخص نمایید. .PP دستور \f[V]javap\f[R] خروجی خود را در \f[V]stdout\f[R] چاپ می‌کند. .PP \f[B]نکته:\f[R] .PP در ابزارهایی که از گزینه‌های به سبک \f[V]--\f[R] پشتیبانی می‌کنند، گزینه‌های به سبک GNU می‌توانند به‌جای فاصله، از علامت مساوی (\f[V]=\f[R]) برای جداسازی نام گزینه از مقدار آن استفاده کنند. .SH "گزینه‌های JAVAP (OPTIONS FOR JAVAP)" .TP \f[V]--help\f[R], \f[V]-help\f[R] , \f[V]-h\f[R] یا \f[V]-?\f[R] پیام راهنمای دستور \f[V]javap\f[R] را چاپ می‌کند. .TP \f[V]-version\f[R] اطلاعات نسخه انتشار را چاپ می‌کند. .TP \f[V]-verbose\f[R] یا \f[V]-v\f[R] اطلاعات اضافی درباره کلاس انتخاب‌شده را چاپ می‌کند. .TP \f[V]-l\f[R] جدول خطوط کد (line table) و متغیرهای محلی (local variable table) را چاپ می‌کند. .TP \f[V]-public\f[R] فقط کلاس‌ها و اعضای عمومی (public) را نمایش می‌دهد. .TP \f[V]-protected\f[R] فقط کلاس‌ها و اعضای محافظت‌شده (protected) و عمومی (public) را نمایش می‌دهد. .TP \f[V]-package\f[R] کلاس‌ها و اعضای بسته/محافظت‌شده/عمومی (پیش‌فرض) را نمایش می‌دهد. .TP \f[V]-private\f[R] یا \f[V]-p\f[R] تمام کلاس‌ها و اعضا را نمایش می‌دهد. .TP \f[V]-c\f[R] کد دیس‌اسمبل‌شده را چاپ می‌کند؛ برای مثال، دستورالعمل‌هایی که بایت‌کدهای جاوا را برای هر یک از متدهای کلاس تشکیل می‌دهند. .TP \f[V]-s\f[R] امضاهای نوع داخلی (internal type signatures) را چاپ می‌کند. .TP \f[V]-sysinfo\f[R] اطلاعات سیستمی (مسیر، اندازه، تاریخ، هش SHA-256) کلاس در حال پردازش را نمایش می‌دهد. .TP \f[V]-constants\f[R] ثوابت \f[V]static final\f[R] را نمایش می‌دهد. .TP \f[V]--module\f[R] \f[I]module\f[R] یا \f[V]-m\f[R] \f[I]module\f[R] ماژول حاوی کلاس‌هایی را که باید دیس‌اسمبل شوند مشخص می‌کند. .TP \f[V]--module-path\f[R] \f[I]path\f[R] محل یافتن ماژول‌های برنامه را مشخص می‌کند. .TP \f[V]--system\f[R] \f[I]jdk\f[R] محل یافتن ماژول‌های سیستمی را مشخص می‌کند. .TP \f[V]--class-path\f[R] \f[I]path\f[R], \f[V]-classpath\f[R] \f[I]path\f[R] یا \f[V]-cp\f[R] \f[I]path\f[R] مسیری را مشخص می‌کند که دستور \f[V]javap\f[R] برای یافتن فایل‌های کلاس کاربر استفاده می‌کند. در صورت تنظیم، پیش‌فرض یا متغیر محیطی \f[V]CLASSPATH\f[R] را لغو (override) می‌کند. .TP \f[V]-bootclasspath\f[R] \f[I]path\f[R] محل فایل‌های کلاس راه‌انداز (bootstrap class files) را بازنویسی (override) می‌کند. .TP \f[V]--multi-release\f[R] \f[I]version\f[R] نسخه انتخابی در فایل‌های JAR چندنسخه‌ای را مشخص می‌کند. .TP \f[V]-J\f[R]\f[I]option\f[R] گزینه مشخص‌شده را به JVM ارسال می‌کند. برای مثال: .RS .IP .nf \f[CB] javap -J-version javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName \f[R] .fi .PP بخش \f[I]مرور گزینه‌های جاوا (Overview of Java Options)\f[R] در \f[B]java\f[R] را ببینید. .RE .SH "مثال‌های JAVAP (JAVAP EXAMPLE)" .PP کلاس \f[V]HelloWorldFrame\f[R] زیر را کامپایل کنید: .IP .nf \f[CB] import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class HelloWorldFrame extends JFrame { String message = \[dq]Hello World!\[dq]; public HelloWorldFrame(){ setContentPane(new JPanel(){ \[at]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); } } \f[R] .fi .PP خروجی حاصل از اجرای دستور \f[V]javap HelloWorldFrame.class\f[R] به صورت زیر است: .IP .nf \f[CB] Compiled from \[dq]HelloWorldFrame.java\[dq] public class HelloWorldFrame extends javax.swing.JFrame { java.lang.String message; public HelloWorldFrame(); public static void main(java.lang.String[]); } \f[R] .fi .PP خروجی حاصل از اجرای دستور \f[V]javap -c HelloWorldFrame.class\f[R] به صورت زیر است: .IP .nf \f[CB] Compiled from \[dq]HelloWorldFrame.java\[dq] public class HelloWorldFrame extends javax.swing.JFrame { java.lang.String message; public HelloWorldFrame(); Code: 0: aload_0 1: invokespecial #1 // Method javax/swing/JFrame.\[dq]\[dq]:()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.\[dq]\[dq]:(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 \[dq]\[dq]:()V 7: astore_1 8: aload_1 9: iconst_1 10: invokevirtual #10 // Method setVisible:(Z)V 13: return } \f[R] .fi