วิธี Java เป็นการรวมกันของคำสั่งบางอย่างเพื่อดำเนินการ ตัวอย่างเช่นเมื่อคุณเรียกใช้เมธอด system.out.println ระบบจะดำเนินการข้อความจำนวนมากเพื่อส่งออกข้อมูลบนคอนโซล
ตอนนี้คุณจะได้เรียนรู้วิธีการสร้างวิธีการของคุณเอง พวกเขาสามารถมีค่าส่งคืนหรือไม่มีค่าส่งคืนสามารถมีพารามิเตอร์หรือไม่มีพารามิเตอร์ วิธีการโอเวอร์โหลดควรใช้ชื่อวิธีการเดียวกันและใช้วิธีนามธรรมในการเขียนโปรแกรม
วิธีการสร้าง
ลองใช้ตัวอย่างต่อไปนี้เพื่ออธิบายไวยากรณ์ของวิธีการ:
funcname int คงที่สาธารณะ (int a, int b) {// body}ที่นี่
วิธีการยังมีขั้นตอนหรือฟังก์ชั่น
คำจำกัดความของวิธีการรวมถึงส่วนหัวของวิธีการและร่างกายวิธีการ ดังที่แสดงด้านล่าง:
modifier returnType nameofmethod (รายการพารามิเตอร์) {// วิธีการ}ไวยากรณ์ด้านบนรวมถึง
ตัวอย่าง
นี่คือวิธีการสูงสุด () ที่กำหนดไว้ข้างต้นซึ่งยอมรับพารามิเตอร์สองพารามิเตอร์ NUM1 และ NUM2 เพื่อส่งคืนค่าสูงสุดระหว่างสอง
/** ข้อมูลตัวอย่างส่งคืนค่าต่ำสุดระหว่างสองตัวเลข*/minfunction int คงที่สาธารณะ (int n1, int n2) {int min; ถ้า (n1> n2) min = n2; อย่างอื่น min = n1; กลับมาน้อย; - วิธีการโทร
ในการใช้วิธีการจะต้องเรียกวิธีการ มีสองวิธีในการเรียกวิธีการหนึ่งมีค่าส่งคืนและอีกวิธีหนึ่งไม่มีค่าส่งคืน
การเรียกวิธีการนั้นง่ายมาก เมื่อโปรแกรมต้องการเรียกใช้วิธีการโปรแกรมควบคุมจะโอนไปยังวิธีที่เรียกว่า วิธีการจะส่งคืนสองเงื่อนไขให้กับผู้โทร:
ใช้วิธีการที่ส่งคืนโมฆะเป็นคำสั่งการโทรให้ฉันดูตัวอย่างต่อไปนี้:
System.out.println ("wiki.jikexueyuan.com!");ค่าส่งคืนของวิธีนี้สามารถเข้าใจได้โดยตัวอย่างต่อไปนี้:
int result = sum (6, 9);
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีกำหนดวิธีและวิธีการเรียกมัน:
Public Class ExampleMinNumber {โมฆะคงที่สาธารณะหลัก (String [] args) {int a = 11; int b = 6; int c = minfunction (a, b); System.out.println ("ค่าต่ำสุด =" + c); } / ** ส่งคืนค่าต่ำสุดของตัวเลขสองตัว* / minfunction int คงที่สาธารณะ (int n1, int n2) {int min; ถ้า (n1> n2) min = n2; อย่างอื่น min = n1; กลับมาน้อย; -ผลลัพธ์ต่อไปนี้จะถูกสร้างขึ้น
ค่าต่ำสุด = 6
คำหลักเป็นโมฆะ
โมฆะคำหลักช่วยให้เราสามารถสร้างวิธีการโดยไม่มีค่าส่งคืน ที่นี่เราสร้างวิธีการโมฆะวิธีการในตัวอย่างถัดไป วิธีนี้ไม่มีประเภทค่าส่งคืน การเรียกวิธีการเป็นโมฆะจะต้องประกาศจุดเริ่มต้น (255.7); คำสั่ง Java ลงท้ายด้วย semicolon ดังที่แสดงด้านล่าง:
Public Class ExampleVoid {โมฆะคงที่สาธารณะหลัก (String [] args) {methodrankpoints (2555.7); } โมฆะแบบคงที่สาธารณะ methodrankpoints (จุดสองจุด) {ถ้า (คะแนน> = 202.5) {system.out.println ("อันดับ: A1"); } อื่นถ้า (คะแนน> = 122.4) {system.out.println ("อันดับ: a2"); } else {system.out.println ("อันดับ: a3"); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
อันดับ: A1
ผ่านพารามิเตอร์ตามค่า
พารามิเตอร์จะต้องผ่านเมื่อเรียกใช้ฟังก์ชัน และคำสั่งซื้อของพวกเขาจะต้องเหมือนกับลำดับของพารามิเตอร์เมื่อพวกเขาถูกสร้างขึ้น พารามิเตอร์สามารถส่งผ่านตามค่าหรือการอ้างอิง
การส่งพารามิเตอร์ผ่านค่าหมายถึงการเรียกพารามิเตอร์ของวิธีการส่งผ่านไปยังพารามิเตอร์ผ่านค่าพารามิเตอร์
ตัวอย่าง
โปรแกรมต่อไปนี้ให้ตัวอย่างเพื่อแสดงว่าพารามิเตอร์ถูกส่งผ่านด้วยค่า ค่าพารามิเตอร์จะไม่เปลี่ยนแปลงหลังจากเรียกวิธีการ
ระดับสาธารณะ swappingxample {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a = 30; int b = 45; System.out.println ("ก่อนการสลับ, a =" + a + "และ b =" + b); // เรียกใช้วิธีการแลกเปลี่ยน swapfunction (a, b); System.out.println ("/n ** ตอนนี้ก่อนและหลังการสลับค่าจะเหมือนกันที่นี่ **:"); System.out.println ("หลังจากการสลับ, a =" + a + "และ b คือ" + b); } โมฆะคงที่สาธารณะ swapfunction (int a, int b) {system.out.println ("ก่อนการสลับ (ภายใน), a =" + a + "b =" + b); // swap n1 กับ n2 int c = a; a = b; B = C; System.out.println ("หลังจากการสลับ (ภายใน), a =" + a + "b =" + b); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
ก่อนการสลับ A = 30 และ B = 45 ก่อนการสลับ (ภายใน), A = 30 B = 45 หลังจากการสลับ (ภายใน), A = 45 B = 30 ** ตอนนี้ก่อนและหลังการสลับค่าจะเหมือนกันที่นี่ **: หลังจากการสลับ A = 30 และ B คือ 45 คือ 45
วิธีการโอเวอร์โหลด
เมื่อวิธีการมีสองวิธีขึ้นไปชื่อของพวกเขาจะเหมือนกัน แต่พารามิเตอร์แตกต่างกันมันจะเรียกว่าวิธีการโอเวอร์โหลด มันแตกต่างจากการครอบคลุม Override หมายถึงจำนวนวิธีที่มีชื่อประเภทและพารามิเตอร์เดียวกัน
ลองพิจารณาตัวอย่างก่อนหน้าของการค้นหาหมายเลขจำนวนเต็มขั้นต่ำ หากเราขอให้ค้นหาตัวเลขที่เล็กที่สุดในประเภทจุดลอยตัวเราจำเป็นต้องใช้การโอเวอร์โหลดของวิธีการเพื่อสร้างสองวิธีขึ้นไปด้วยชื่อฟังก์ชันเดียวกัน แต่พารามิเตอร์ที่แตกต่างกัน
มีการอธิบายตัวอย่างต่อไปนี้:
คลาสสาธารณะตัวอย่างการโหลด {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int a = 11; int b = 6; double c = 7.3; double d = 9.4; int result1 = minfunction (a, b); // ชื่อฟังก์ชั่นเดียวกันที่มีพารามิเตอร์ที่แตกต่างกันเป็นสองเท่าผลลัพธ์ 2 = minfunction (c, d); System.out.println ("ค่าต่ำสุด =" + ผลลัพธ์ 1); System.out.println ("ค่าต่ำสุด =" + result2); } // สำหรับจำนวนเต็มสาธารณะคงที่ int minfunction (int n1, int n2) {int min; ถ้า (n1> n2) min = n2; อย่างอื่น min = n1; กลับมาน้อย; } // สำหรับ minfunction คู่คงที่สองครั้ง (double n1, double n2) {double min; ถ้า (n1> n2) min = n2; อย่างอื่น min = n1; กลับมาน้อย; -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
ค่าต่ำสุด = 6 ค่าต่ำสุด = 7.3
วิธีการโอเวอร์โหลดทำให้โปรแกรมอ่านง่าย ที่นี่ทั้งสองวิธีมีชื่อเดียวกัน แต่พารามิเตอร์ที่แตกต่างกัน สร้างจำนวนจำนวนเต็มและประเภทจุดลอยตัวขั้นต่ำเป็นผลมาจากการทำงานของโปรแกรม
ใช้พารามิเตอร์บรรทัดคำสั่ง
บางครั้งคุณต้องการผ่านพารามิเตอร์ก่อนที่โปรแกรมจะทำงาน สิ่งนี้สามารถทำได้โดยการส่งพารามิเตอร์บรรทัดคำสั่งไปยังฟังก์ชันหลัก
ในบรรทัดคำสั่งเมื่อคุณต้องการเรียกใช้ไฟล์โปรแกรมพารามิเตอร์บรรทัดคำสั่งจะปรากฏขึ้นทันทีหลังจากชื่อไฟล์ มันง่ายมากที่จะยอมรับพารามิเตอร์บรรทัดคำสั่งในโปรแกรม Java พวกเขาจะถูกส่งผ่านไปยังอาร์เรย์ตัวละครฟังก์ชั่นหลัก
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงโปรแกรมที่ส่งออกพารามิเตอร์บรรทัดคำสั่งทั้งหมด:
Public Class Commandline {โมฆะสาธารณะคงที่หลัก (String args []) {สำหรับ (int i = 0; i <args.length; i ++) {system.out.println ("args [" + i + "]:" + args [i]); -ดำเนินการโปรแกรมโดย:
Java Commandline นี่คือบรรทัดคำสั่ง 200 -100
สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
args [0]: thisargs [1]: isargs [2]: aargs [3]: Commandargs [4]: lineargs [5]: 200args [6]: -100
ตัวสร้าง
นี่คือตัวอย่างง่ายๆของการใช้ตัวสร้าง:
// ตัวสร้างแบบง่าย ๆ myclass {int x; // ต่อไปนี้เป็นตัวสร้าง myClass () {x = 10; -คุณสามารถสร้างอินสแตนซ์วัตถุโดยเรียกตัวสร้าง:
คลาสสาธารณะ consdemo {โมฆะสาธารณะคงที่หลัก (สตริง args []) {myclass t1 = new myclass (); MyClass T2 = ใหม่ myClass (); System.out.println (t1.x + "" + t2.x); -โดยทั่วไปคุณจะต้องใช้ตัวสร้างเพื่อยอมรับพารามิเตอร์หนึ่งตัวขึ้นไป พารามิเตอร์การส่งผ่านนั้นเหมือนกับพารามิเตอร์ที่ส่งผ่านของวิธีธรรมดาที่แนะนำข้างต้นซึ่งคือรายการรายการพารามิเตอร์หลังจากชื่อของตัวสร้าง
ตัวอย่าง
นี่คือตัวอย่างง่ายๆของการใช้ตัวสร้าง:
// ตัวสร้างแบบง่าย ๆ myclass {int x; // ต่อไปนี้เป็นตัวสร้าง myclass (int i) {x = i; -คุณสามารถสร้างอินสแตนซ์วัตถุโดยเรียกตัวสร้าง:
คลาสสาธารณะ consdemo {โมฆะสาธารณะคงที่หลัก (สตริง args []) {myclass t1 = myclass ใหม่ (10); myclass t2 = myclass ใหม่ (20); System.out.println (t1.x + "" + t2.x); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
10 20
พารามิเตอร์ความยาวตัวแปร
JDK1.5 สามารถอนุญาตให้คุณผ่านพารามิเตอร์ความยาวตัวแปรของประเภทเดียวกัน ประกาศโดยใช้วิธีการต่อไปนี้:
Typename ... ParameterName
เมื่อประกาศวิธีการคุณจะต้องระบุประเภทพารามิเตอร์ก่อนที่จุดไข่ปลาและสามารถมีพารามิเตอร์ความยาวตัวแปรเดียวเท่านั้นและพารามิเตอร์ความยาวตัวแปรจะต้องเป็นพารามิเตอร์สุดท้ายของพารามิเตอร์ทั้งหมด
ตัวอย่าง
คลาสสาธารณะ varargsdemo {โมฆะคงที่สาธารณะหลัก (สตริง args []) {// วิธีการโทรด้วยตัวแปร args printmax (34, 3, 3, 2, 56.5); printmax (ใหม่ double [] {1, 2, 3}); } โมฆะคงที่สาธารณะ printmax (สอง ... ตัวเลข) {ถ้า (numbers.length == 0) {system.out.println ("ไม่มีอาร์กิวเมนต์ผ่าน"); กลับ; } double result = ตัวเลข [0]; สำหรับ (int i = 1; i <number.length; i ++) ถ้า (ตัวเลข [i]> ผลลัพธ์) ผลลัพธ์ = ตัวเลข [i]; System.out.println ("ค่าสูงสุดคือ" ผลลัพธ์); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
ค่าสูงสุดคือ 56.5 ค่าสูงสุดคือ 3.0
วิธีการขั้นสุดท้าย ()
คุณสามารถกำหนดวิธีการที่จะถูกเรียกก่อนที่จะถูกทำลายโดยนักสะสมขยะ วิธีนี้เรียกว่าวิธีสุดท้าย () ซึ่งสามารถใช้เพื่อให้แน่ใจว่าวัตถุได้รับการทำความสะอาด
ตัวอย่างเช่นคุณอาจใช้ finalize () เพื่อให้แน่ใจว่าไฟล์ที่เปิดโดยวัตถุถูกปิด
ในการเพิ่ม finalizer ในชั้นเรียนคุณเพียงแค่ต้องกำหนดวิธีการสรุป () เมื่อ Java ต้องการรีไซเคิลวัตถุของคลาสนี้วิธีการจะถูกเรียก
ในวิธีสุดท้าย () คุณจะระบุพฤติกรรมบางอย่างที่ต้องทำก่อนที่วัตถุจะถูกทำลาย
วิธีการสรุป () โดยทั่วไปจะคล้ายกับสิ่งต่อไปนี้:
Void Protected Finalize () {// การสรุปรหัสที่นี่}ที่นี่คำหลักที่ได้รับการป้องกันคือการตรวจสอบให้แน่ใจว่ารหัสนอกชั้นเรียนไม่สามารถเข้าถึงวิธีการสรุป ()
ซึ่งหมายความว่าคุณไม่สามารถรู้ได้ว่าจะดำเนินการเสร็จสิ้น () ตัวอย่างเช่นหากโปรแกรมของคุณสิ้นสุดลงก่อนที่ตัวเก็บขยะจะเกิดขึ้นวิธีการสรุป () จะไม่ถูกดำเนินการ
วิธีการทั่วไป:
วิธี Java Generic ถูกนำมาใช้กันอย่างแพร่หลายเมื่อวิธีการส่งคืนค่าที่เป็นวัตถุระดับคอนเทนเนอร์
รายการคงที่สาธารณะ <T> ค้นหา (คลาส <t> clazz, string userId) {.... }โดยทั่วไปเมื่อเขียนวิธีการทั่วไป Java ประเภทค่าคืนและประเภทพารามิเตอร์อย่างน้อยหนึ่งประเภทควรเป็นทั่วไปและประเภทควรจะเหมือนกัน หากมีเพียงประเภทหนึ่งของประเภทค่าคืนหรือประเภทพารามิเตอร์ที่ใช้ทั่วไปการใช้วิธีการทั่วไปนี้จะถูก จำกัด อย่างมากโดยทั่วไปในระดับเดียวกับว่าคุณไม่ได้ใช้ยาสามัญ
ต่อไปนี้ส่วนใหญ่แนะนำการใช้วิธีการชวาสองวิธีที่คล้ายกันมากและความแตกต่างระหว่างพวกเขา
ประเภทแรก:
สาธารณะคงที่ <t ขยาย Commonservice> t getService (คลาส <t> clazz) {t service = (t) serviceMap.get (clazz.getName ()); if (service == null) {service = (t) serviceLocator.getService (clazz.getName ()); servicemap.put (clazz.getName (), บริการ); } ส่งคืนบริการ; - ประเภทที่สอง:
สาธารณะคงที่ <t> t getService (คลาส <? ขยาย Commonservice> Clazz) {t service = (t) serviceMap.get (clazz.getName ()); if (service == null) {service = (t) serviceLocator.getService (clazz.getName ()); servicemap.put (clazz.getName (), บริการ); } ส่งคืนบริการ; - นี่คือคลาสที่มีวิธีทั่วไปอยู่:
บทคัดย่อระดับสาธารณะ Commonservice {HashMap แบบคงที่ส่วนตัว <String, Commonservice> servicemap = new HashMap <String, Commonservice> (); // นี่คือคำจำกัดความวิธีการทั่วไป - - วิธีการทั่วไปสองวิธีนี้มีลายเซ็นของวิธีการที่แตกต่างกันเท่านั้นและร่างกายวิธีการเหมือนกันทุกประการ แล้วอะไรคือความแตกต่าง?
มาใช้กันแล้วคุณจะรู้ความแตกต่าง
ใช้วิธีการทั่วไปครั้งแรก:
ชั้นเรียนสาธารณะหลัก {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {noticeservice noticeservice = Commonservice.getService (noticeservice.class); // ใช้วิธีการทั่วไปครั้งแรกอย่างถูกต้องโดยไม่ต้องรวบรวมข้อผิดพลาด Noticeservice Noticeservice = Commonservice.getService (userservice.class); // หากคุณใช้วิธีการทั่วไปครั้งแรกอย่างไม่ถูกต้องข้อผิดพลาดในการรวบรวมจะเกิดขึ้น - ใช้วิธีการทั่วไปที่สอง:
คลาสสาธารณะหลัก {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {noticeservice noticeservice = Commonservice.getService (noticeservice.class); // ใช้วิธีการทั่วไปที่สองอย่างถูกต้องจะไม่มีข้อผิดพลาดในการรวบรวมตรรกะถูกต้องและจะไม่มีข้อยกเว้นในระหว่างการรันไทม์ Noticeservice Noticeservice = Commonservice.getService (userservice.class); // หากคุณใช้วิธีการทั่วไปที่สองไม่ถูกต้องจะไม่มีข้อผิดพลาดในการรวบรวม แต่ตรรกะไม่ถูกต้องและข้อยกเว้นจะเกิดขึ้นในระหว่างการรันไทม์ซึ่งเป็นอันตราย! -ตอนนี้ฉันรู้ความแตกต่างระหว่างวิธีการทั่วไปสองวิธีที่คล้ายกันมากหรือไม่?