ตัวสร้างใน Java คืออะไรและคุณใช้งานอย่างไร?

ตัวสร้างใน Java คืออะไรและคุณใช้งานอย่างไร?

ในการเขียนโปรแกรมเชิงวัตถุ ตัวสร้างคือฟังก์ชันพิเศษที่คุณเรียกใช้เพื่อสร้างวัตถุ คอนสตรัคเตอร์มีคุณสมบัติพิเศษหลายอย่างที่ทำให้สามารถทำงานได้





ใน Java คุณตั้งชื่อคอนสตรัคเตอร์ตามคลาสของมัน คอนสตรัคเตอร์คือเมธอดที่กำหนดในคลาสที่ใช้ ตัวสร้าง Java อาจใช้การโอเวอร์โหลดเพื่อจัดเตรียมการทำงานทางเลือก ตัวสร้างใน Java ยังสามารถใช้ประโยชน์จากการสืบทอดเพื่อนำรหัสกลับมาใช้ใหม่ได้





ทำไมคุณถึงต้องการตัวสร้างอยู่แล้ว?

ตัวสร้างเป็นแกนหลักของการเขียนโปรแกรมเชิงวัตถุ และ Java ก็ไม่มีข้อยกเว้น ตัวอย่างนี้แสดงให้เห็นว่าคุณสามารถกำหนดคลาส Circle พื้นฐานด้วยคุณสมบัติข้อมูลเดียวและวิธีเดียว:





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

จากนั้นคุณสามารถสร้างอินสแตนซ์ของคลาสนี้และโต้ตอบกับคลาสนี้ได้:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

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



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

ตอนนี้รหัสโทรสามารถใช้ setRadius วิธีการและไม่ต้องกังวลกับรายละเอียดการใช้งาน:

เกมที่ไม่มีเครื่องเล่นแฟลชและปลั๊กอิน
Circle c = new Circle();
c.setRadius(2);

ตัวสร้างเสนอวิธีการที่ดียิ่งขึ้นในการให้ข้อมูลกับวัตถุเมื่อคุณสร้าง มักใช้สำหรับการเริ่มต้นคุณสมบัติ เช่น รัศมี ที่นี่.





ตัวอย่างของตัวสร้างอย่างง่าย

ตัวสร้างพื้นฐานที่สุดคือตัวที่ไม่มีข้อโต้แย้ง ซึ่งไม่ทำอะไรเลย:

public class Circle {
public Circle() {}
}

ดูสิ่งนี้ด้วย: เรียนรู้วิธีสร้างคลาสใน Java





หากคุณไม่ได้กำหนดคอนสตรัคเตอร์ Java จะจัดเตรียมตัวเริ่มต้นที่ทำงานในลักษณะเดียวกัน

หมายเหตุสองสามสิ่ง:

  1. ชื่อของตัวสร้างตรงกับชื่อคลาส
  2. ตัวสร้างนี้ใช้ สาธารณะ ตัวแก้ไขการเข้าถึง ดังนั้นรหัสอื่น ๆ สามารถเรียกมันได้
  3. คอนสตรัคเตอร์ไม่มีประเภทการส่งคืน คอนสตรัคเตอร์ไม่สามารถคืนค่าได้ต่างจากวิธีอื่นๆ

ตัวสร้างมักจะดำเนินการเริ่มต้นบางประเภท โปรดทราบว่าโค้ดข้างต้นไม่ได้เริ่มต้นค่าของรัศมี ในกรณีนี้ ภาษาจะตั้งค่าเป็นศูนย์โดยอัตโนมัติ คลาสนี้คาดหวังให้ผู้ใช้ใช้ setRadius() . ในการใช้ค่าดีฟอลต์ที่มีประโยชน์มากกว่า 0 คุณสามารถกำหนดได้ภายในคอนสตรัคเตอร์:

public class Circle {
public Circle() { radius = 1; }
}

แวดวงที่สร้างด้วยคลาสนี้อย่างน้อยจะมีพื้นที่จริงแล้ว! ผู้โทรยังใช้ได้อยู่ setRadius() เพื่อให้รัศมีอื่นที่ไม่ใช่ 1 แต่คอนสตรัคเตอร์สามารถเป็นมิตรยิ่งกว่า:

public class Circle {
public Circle(double r) { radius = r; }
}

ตอนนี้คุณสามารถสร้างวงกลมที่มีรัศมีเฉพาะตั้งแต่แรกเกิด:

linux คัดลอกโฟลเดอร์ไปยังโฟลเดอร์อื่น
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

นี่เป็นการใช้งานทั่วไปสำหรับตัวสร้าง คุณมักจะใช้เพื่อเริ่มต้นตัวแปรเป็นค่าพารามิเตอร์

ตัวสร้างโอเวอร์โหลด

คุณสามารถระบุคอนสตรัคเตอร์มากกว่าหนึ่งตัวในนิยามคลาส:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

สิ่งนี้ทำให้รหัสการโทรมีตัวเลือกในการสร้างวัตถุ:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

ด้วย Circle ที่ซับซ้อนกว่าเล็กน้อย คุณสามารถสำรวจคอนสตรัคเตอร์ที่น่าสนใจยิ่งขึ้นได้ รุ่นนี้เก็บตำแหน่ง:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

ตอนนี้คุณสามารถสร้างวงกลมที่ไม่มีอาร์กิวเมนต์ รัศมีเดียว หรือพิกัด x และ y ข้างรัศมี นี่เป็นการโอเวอร์โหลดแบบเดียวกับที่ Java รองรับในทุกวิธี

การผูกมัดตัวสร้าง

จะสร้างแวดวงหนึ่งโดยอิงจากอีกแวดวงหนึ่งได้อย่างไร ซึ่งจะทำให้เราสามารถคัดลอกแวดวงได้อย่างง่ายดาย สังเกตบล็อกต่อไปนี้:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

สิ่งนี้จะได้ผล แต่จะทำซ้ำบางรหัสโดยไม่จำเป็น เนื่องจากคลาส Circle มีคอนสตรัคเตอร์ที่จัดการคุณสมบัติแต่ละรายการอยู่แล้ว คุณสามารถเรียกสิ่งนั้นแทนโดยใช้ นี้ คำสำคัญ:

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

นี่เป็นรูปแบบหนึ่งของการสร้าง chaining ที่เรียก constructor ตัวหนึ่งจากตัวอื่น มันใช้โค้ดน้อยกว่าและช่วยรวมศูนย์การดำเนินการแทนที่จะทำซ้ำ

เรียกตัวสร้างผู้ปกครอง

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

super(x, y);

ลองนึกภาพคลาส Shape ที่ทำหน้าที่เป็นพาเรนต์ของ Circle:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

มันจัดการตำแหน่งทั่วไปสำหรับรูปร่างทั้งหมด เนื่องจากเป็นฟังก์ชันที่พวกมันทั้งหมดใช้ร่วมกัน ตอนนี้คลาส Circle สามารถมอบหมายตำแหน่งการจัดการให้กับพาเรนต์:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

การก่อสร้างซูเปอร์คลาสเป็นสิ่งสำคัญมากของ มรดกในภาษาชวา . ภาษาบังคับใช้โดยค่าเริ่มต้นหากคุณไม่ได้เรียก .อย่างชัดเจน สุดยอด ในตัวสร้างของคุณ

เข้าถึงตัวดัดแปลงบนตัวสร้าง

ตัวสร้างสามารถรวมตัวแก้ไขการเข้าถึงในลายเซ็นของพวกเขา เช่นเดียวกับวิธีอื่นๆ สิ่งนี้กำหนดประเภทของผู้เรียกที่สามารถเข้าถึงตัวสร้าง:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

นี่เป็นตัวอย่างที่ซับซ้อนกว่า ดังนั้นโปรดทำความเข้าใจ:

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

ใช้ตัวสร้างใน Java เพื่อสร้างวัตถุ

ตัวสร้างมีความสำคัญต่อการเขียนโปรแกรมเชิงวัตถุ พวกมันช่วยให้คุณสร้างวัตถุซึ่งเป็นสิ่งสำคัญ!

ใน Java ตัวสร้างจะดูเหมือนวิธีการอื่นๆ และทำงานในลักษณะเดียวกันมาก คุณควรจำกฎพิเศษเกี่ยวกับคอนสตรัคเตอร์เริ่มต้น การโอเวอร์โหลด และการโยงคอนสตรัคเตอร์ หากตัวสร้างใหม่สำหรับคุณ คุณอาจต้องการอ่านแนวคิด Java หลักอื่นๆ ที่คุณควรเรียนรู้เมื่อเริ่มต้น

แบ่งปัน แบ่งปัน ทวีต อีเมล 10 แนวคิดหลักของ Java ที่คุณควรเรียนรู้เมื่อเริ่มต้นใช้งาน

ไม่ว่าคุณจะเขียน GUI พัฒนาซอฟต์แวร์ฝั่งเซิร์ฟเวอร์ หรือแอปพลิเคชันมือถือโดยใช้ Android การเรียนรู้ Java จะให้บริการคุณเป็นอย่างดี ต่อไปนี้เป็นแนวคิดหลักของ Java ที่จะช่วยคุณในการเริ่มต้น

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • การเขียนโปรแกรม
  • Java
  • เคล็ดลับการเข้ารหัส
เกี่ยวกับผู้เขียน Bobby Jack(58 บทความเผยแพร่)

Bobby เป็นผู้ที่ชื่นชอบเทคโนโลยีซึ่งทำงานเป็นนักพัฒนาซอฟต์แวร์มาเกือบสองทศวรรษ เขาหลงใหลในการเล่นเกม ทำงานเป็นบรรณาธิการบทวิจารณ์ที่ Switch Player Magazine และหมกมุ่นอยู่กับทุกแง่มุมของการเผยแพร่ออนไลน์และการพัฒนาเว็บ

วิธีทำให้ Chrome ใช้ cpu น้อยลง
เพิ่มเติมจาก Bobby Jack

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก