การแยกคลาสใน Java

1. บทนำ

ในบทช่วยสอนนี้เราจะพูดถึงการแยกคลาส Java เมื่อไม่มีซอร์สโค้ดการถอดรหัสคลาส Java จะช่วยในการดีบักและทำความเข้าใจลักษณะการทำงานของซอร์สโค้ด

ลองมาดูตัวเลือกต่างๆที่มีให้

2. แยกย่อยใน IDE

เนื่องจากการพัฒนาส่วนใหญ่ทำในสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) จึงทำให้รู้สึกว่าการแยกส่วนควรเกิดขึ้นใน IDE

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ IDE ที่เราจะดำเนินการโปรดดูบทความของเราเกี่ยวกับวิธีการดีบักใน Eclipse และการกำหนดค่าสำหรับ IntelliJ IDEA

2.1. คราส

ประการแรกใน Eclipse เราต้องมีปลั๊กอินเช่น Enhanced Class Decompiler (ECD) ปลั๊กอินนี้ใช้ตัวถอดรหัสห้าแบบที่แตกต่างกัน เราสามารถติดตั้งได้จาก Eclipse Marketplace จากนั้นเราต้องรีสตาร์ท Eclipse

ถัดไป ECD ต้องการการตั้งค่าเล็กน้อยเพื่อเชื่อมโยงไฟล์คลาสกับ Class Decompiler Viewer:

นอกจากนี้เราต้องเชื่อมโยงไฟล์“ .class ที่ไม่มีซอร์ส”:

ในที่สุดเราสามารถใช้ตัวถอดรหัสได้โดยกดCtrl + คลิกซ้ายที่ชื่อคลาส เราเห็นตัวถอดรหัสที่ใช้บนแท็บไฟล์ในวงเล็บ

ในตัวอย่างนี้เราใช้ FernFlower:

2.2. IntelliJ IDEA

ในทางตรงกันข้ามกับคราสIntelliJ IDEA ให้ Decompiler FernFlower เป็นค่าเริ่มต้น

ในการใช้งานเราเพียงแค่Ctrl + คลิกซ้ายที่ชื่อคลาสและดูรหัส:

นอกจากนี้เราสามารถดาวน์โหลดแหล่งที่มา การดาวน์โหลดแหล่งที่มาจะให้รหัสจริงและความคิดเห็น

ยกตัวอย่างเช่นตัวแทนระดับคำอธิบายประกอบจากภาพหน้าจอดังกล่าวข้างต้นรวมถึง Javadoc ในการใช้งานของชิ้นส่วน เราสังเกตได้ถึงความแตกต่าง:

แม้ว่าการแยกส่วนจะมีประโยชน์มาก แต่ก็ไม่ได้ให้ภาพที่สมบูรณ์เสมอไป ซอร์สโค้ดแบบเต็มทำให้เราเห็นภาพที่สมบูรณ์

3. การแยกคอมไพล์บรรทัดคำสั่ง

ก่อนปลั๊กอิน IDE บรรทัดคำสั่งถูกใช้สำหรับการถอดรหัสคลาส ตัวถอดรหัสบรรทัดคำสั่งยังมีประโยชน์สำหรับการดีบัก Java bytecode บนเซิร์ฟเวอร์ระยะไกลที่ไม่สามารถเข้าถึงได้ด้วย IDE หรือ GUI

ตัวอย่างเช่นเราสามารถถอดรหัสด้วย JDCommandLine โดยใช้คำสั่ง jar ง่ายๆ:

java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes

อย่าทิ้งพารามิเตอร์. / class ไว้ กำหนดไดเร็กทอรีเอาต์พุต

หลังจากการแยกคอมไพล์สำเร็จเราสามารถเข้าถึงไฟล์ต้นฉบับที่อยู่ในไดเร็กทอรีเอาต์พุต ตอนนี้พวกเขาพร้อมที่จะดูผ่านโปรแกรมแก้ไขข้อความเช่น Vim

4. สรุป

เราดูการแยกส่วนใน Eclipse และ IntelliJ IDEA IDEs รวมถึงตัวเลือกบรรทัดคำสั่งเมื่อไม่พร้อมใช้งาน

นอกจากนี้เรายังดูความแตกต่างระหว่างการเชื่อมโยงซอร์สโค้ดและการถอดรหัส