ลายเซ็นของ Java Method เพื่อนที่ต้องการพัฒนา Java ก็รู้ว่าความสำคัญของลายเซ็นวิธีการเป็นคำอธิบายที่ดีกว่าของวิธีการมากเกินไปโดยเฉพาะอย่างยิ่งในการเพิ่มประสิทธิภาพที่ตามมา นี่คือบันทึก เพื่อนที่เคยเห็นมันสามารถอ่านได้
ความหมายของลายเซ็นวิธีการ
สำหรับวิธีการที่มีชื่อที่แตกต่างกันและชื่อที่แตกต่างกันของชื่อเดียวกันลายเซ็นวิธีการไม่ได้มีความหมายมาก แต่สำหรับวิธีการมากเกินไปลายเซ็นวิธีการมีความหมายมาก เนื่องจากชื่อวิธีการระหว่างวิธีการโอเวอร์โหลดเหมือนกันเราต้องค้นหาองค์ประกอบอื่นจากองค์ประกอบอื่น ๆ ที่ประกอบด้วยวิธีการและองค์ประกอบชื่อวิธีที่สามารถระบุวิธีการโดยเฉพาะและร่างกายวิธีการจะไม่ได้รับการพิจารณา จากนั้นมันเป็นรายการพารามิเตอร์ที่เป็นทางการและค่าส่งคืน อย่างไรก็ตามสำหรับผู้ที่เรียกวิธีการความสำคัญของรายการชนิดข้อมูลพารามิเตอร์ที่เป็นทางการของวิธีการสูงกว่าค่าคืนดังนั้นลายเซ็นวิธีการประกอบด้วยชื่อวิธี + รายการพารามิเตอร์ที่เป็นทางการ กล่าวคือชื่อวิธีการและรายการประเภทข้อมูลพารามิเตอร์อย่างเป็นทางการสามารถกำหนดวิธีการไม่ซ้ำกันและไม่มีความสัมพันธ์กับค่าคืนของวิธีการ นี่เป็นพื้นฐานที่สำคัญสำหรับการตัดสินมากเกินไปดังนั้นจึงไม่อนุญาตให้ใช้รหัสต่อไปนี้
สาธารณะยาว AAAA () {} int public int aaaa () {}รูปแบบลายเซ็นของวิธีการ
ก่อนอื่นมาดูวิธีการหลายวิธีและลายเซ็นวิธีการของพวกเขา:
โมฆะสาธารณะ test1 () {} test1 () vpublic void test2 (string str) test2 (ljava/lang/string;) vpublic int test3 () {} test3 () i จากสามตัวอย่างข้างต้นเราสามารถเห็นกฎเล็ก ๆ น้อย ๆ :
ลายเซ็นวิธีการที่จัดทำโดย JVM นั้นประกอบด้วยสามส่วน: ชื่อวิธี (ตัวอย่างด้านบนไม่ได้เขียนชื่อคลาสเต็มสำหรับความเรียบง่าย) รายการพารามิเตอร์ที่เป็นทางการและค่าส่งคืน รูปแบบพื้นฐานคือ:
ชื่อชั้นเรียนเต็ม ชื่อเมธอด (รายการข้อมูลพารามิเตอร์อย่างเป็นทางการ) ประเภทข้อมูลส่งคืนค่าข้อมูล
อักขระพิเศษ/ความหมายตัวอักษรในลายเซ็นของ Java Method
| อักขระพิเศษ | ชนิดข้อมูล | คำแนะนำพิเศษ |
|---|---|---|
| V | โมฆะ | โดยทั่วไปใช้เพื่อแสดงค่าคืนของวิธีการ |
| Z | บูลีน | |
| ข | ไบต์ | |
| C | ถ่าน | |
| S | สั้น | |
| ฉัน | int | |
| J | ยาว | |
| f | ลอย | |
| d | สองเท่า | |
| - | อาร์เรย์ | เริ่มต้นด้วย [และรวมกับอักขระพิเศษอื่น ๆ แสดงถึงอาร์เรย์ของชนิดข้อมูลที่สอดคล้องกันและหลาย [แสดงถึงอาร์เรย์สองสามมิติ |
| l | ชื่อหมวดหมู่เต็ม; | ประเภทอ้างอิงเริ่มต้นด้วย l; จบลงด้วยชื่อคลาสทั้งหมดของประเภทอ้างอิงตรงกลาง |
จะต้องสังเกตว่าเมื่อวิธีการมากเกินไปค่าการส่งคืนวิธีการไม่มีความหมายจะถูกกำหนดโดยชื่อวิธีและรายการพารามิเตอร์
สร้างลายเซ็นวิธีการโดยใช้ Javap
คลาสไลบรารีคลาส
$ javap -s java.lang.string รวบรวมจาก "string.java" ชั้นสุดท้ายสาธารณะ Java.lang.string ขยาย java.lang.Object ใช้ java.io.serializable, java.lang.comparable, java.lang ลายเซ็น: ljava/util/comparator; สาธารณะ java.lang.string (); ลายเซ็น: () v สาธารณะ java.lang.string (java.lang.string); ลายเซ็น: (ljava/lang/string;) v สาธารณะ java.lang.string (char []); ลายเซ็น: ([c) v สาธารณะ java.lang.string (char [], int, int); ลายเซ็น: ([CII) v สาธารณะ java.lang.string (int [], int, int); ลายเซ็น: ([iii) v สาธารณะ java.lang.string (byte [], int, int); ลายเซ็น: ([biii) v สาธารณะ java.lang.string (byte [], int); ลายเซ็น: ([biii) v สาธารณะ java.lang.string (byte [], int); ลายเซ็น: ([bi) v สาธารณะ java.lang.string (byte [], int, int, java.lang.string) โยน java.io.unsupportencodingexception; ลายเซ็น: ([biiljava/lang/string;) v สาธารณะ java.lang.string (byte [], int, int, java.nio.charset.charset); ลายเซ็น: ([biiljava/nio/charset/charset;) v สาธารณะ java.lang.string (byte [], java.lang.string) โยน java.io.unsupportencodingexception; ลายเซ็น: ([bljava/lang/string;) v สาธารณะ java.lang.string (byte [], java.nio.charset.charset); ลายเซ็น: ([bljava/nio/charset/charset;) v สาธารณะ java.lang.string (byte [], int, int); ลายเซ็น: ([BII) V ...
ชั้นเรียนที่กำหนดเอง
แพ็คเกจ com.demo; คลาสสาธารณะ sigtest {สตริงสุดท้ายคงที่สาธารณะ = null; public int getName (int [] ข้อมูลดัชนียาว) {return 0; - เอาท์พุท
$ javac sigtest.java $ javap -s -p com.demo.sigtestcompiled จาก "sigtest.java" ชั้นเรียนสาธารณะ com.demo.sigtest ขยาย java.lang.object {สาธารณะคงสุดท้าย java.lang.string ชื่อ; ลายเซ็น: ljava/lang/string; com.demo.sigtest (); ลายเซ็น: () vpublic int getName (int [], ยาว); ลายเซ็น: ([ij) iStatic {}; ลายเซ็น: () v}-S หมายถึงการพิมพ์ข้อมูลลายเซ็น
-P หมายถึงการพิมพ์ข้อมูลลายเซ็นของฟังก์ชั่นและสมาชิกทั้งหมด โดยค่าเริ่มต้นจะมีการพิมพ์ข้อมูลลายเซ็นสาธารณะเท่านั้น
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!