Cách triển khai mã lệnh riêng trong Java

Bài viết này sẽ cung cấp cho bạn kiến ​​thức chi tiết và toàn diện về Private Constructor trong Java và cách sử dụng nó với các ví dụ.

Người xây dựng được sử dụng để khởi tạo trạng thái của đối tượng. Tương tự như các phương thức, một hàm tạo cũng có thể chứa một tập hợp các câu lệnh, không thể gọi là gì ngoài các lệnh. Trong bài viết này, chúng ta sẽ thảo luận về Hàm tạo riêng trong Theo thứ tự sau:

Giới thiệu về Constructor trong Java

Các hàm tạo được thực thi tại thời điểm tạo đối tượng. Để hiểu rõ hơn về hàm tạo và các ứng dụng của nó, chỉ cần coi một hộp như một lớp. Một lớp Box được giả định có một số biến lớp (tức là chiều dài, chiều rộng và chiều cao). Tuy nhiên, tại thời điểm tạo đối tượng của nó (tức là hộp tồn tại trong bộ nhớ của máy tính), do đó, một hộp có thể tồn tại mà không có giá trị được xác định cho số lượng chiều của nó.





Rõ ràng là không.

Do đó, một hàm tạo được đưa vào để gán giá trị cho các biến lớp khi tạo đối tượng. Điều này có thể được thực hiện một cách rõ ràng bởi lập trình viên hoặc bởi chính Java. Khi được thực hiện bởi chính Java, nó được gọi là một hàm tạo mặc định.



Cần phải hiểu rằng bất kỳ phương thức nào, sở hữu mã xác định truy cập do người lập trình cung cấp cho phương thức khởi tạo, được đặt ở chế độ riêng tư, chỉ có thể được truy cập bên trong chính lớp đó.

Hàm tạo riêng trong Java

Lớp Singleton

Từ tên của chính nó, chúng ta có thể gọi một lớp là một singleton nếu nó hạn chế số lượng đối tượng của lớp đó là một. Một lớp không thể có nhiều hơn một đối tượng trong những trường hợp như vậy. Các lớp singleton được sử dụng triệt để trong các khái niệm như mạng và kết nối cơ sở dữ liệu. Lớp Singleton là một Lớp tư nhân .



Phải có một cách khác để trích xuất thể hiện của lớp và một phương thức trả về để lấy lại kết quả. Dưới đây là một minh họa apt của tương tự. Hình đầu tiên mô tả kết quả có thể xảy ra trong đó giá trị của “a.x” bằng 20 và giá trị của “b.x” cũng cho kết quả là 20. Trong đoạn mã, trong khi chúng ta định nghĩa lớp private singleton, các hàm tạo của nó không thể được truy cập bên ngoài lớp.

Giá trị của a.x = 20

Giá trị của b.x = 20

// Chương trình Java để chứng minh việc thực thi mẫu // Singleton bằng cách sử dụng các hàm tạo riêng. import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // private constructor không thể truy cập bên ngoài class private MySingleton () {} // Phương thức Factory để cung cấp cho người dùng các trường hợp static public MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // Lớp Driver Class Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ('Giá trị của ax =' + ax) System.out.println ('Giá trị của bx =' + bx)}}

Tác động của hàm tạo riêng trong Java

Các hàm tạo riêng không thể truy cập các lớp dẫn xuất từ ​​một lớp khác. Do đó, chúng ta phải cung cấp một hàm public, nó gọi hàm tạo riêng. Trong trường hợp, đối tượng không được khởi tạo, hoặc chúng ta phải gửi lại một thể hiện cho đối tượng nếu nó đã được khởi tạo. Điều này đặc biệt rất hữu ích cho các đối tượng không thể khởi tạo. Một hàm tạo riêng được sử dụng trong các trường hợp sau:

  • Các lớp tương ứng, chỉ có các phương thức và thành viên tĩnh.
  • Các lớp cụ thể, chỉ có các thành viên cuối cùng tĩnh (hằng số) được sử dụng rộng rãi.
  • Để kết hợp các singleton.
  • Để kết hợp các phương pháp nhà máy.

Để sử dụng các bảng liệt kê, là kiểu an toàn.

Chuỗi xây dựng bên trong

Chuỗi khởi tạo bên trong là khi một hàm tạo gọi một hàm tạo khác của cùng một lớp thì nó có thể được gọi là chuỗi khởi tạo. Nhiệm vụ của chúng ta là sử dụng từ khóa này để gọi một hàm tạo khác của lớp. Trong một số trường hợp, nó được sử dụng để xác định một số giá trị mặc định của các biến lớp. Cũng xin lưu ý rằng một lệnh gọi hàm tạo khác phải là câu lệnh đầu tiên trong khối mã.

Ngoài ra, không nên có các cuộc gọi đệ quy, điều này sẽ tạo ra một vòng lặp vô hạn. Bây giờ chúng ta hãy xem một ví dụ về một chuỗi khởi tạo trong chương trình java.

package com.journaldev.constructor public class Employee {private int id private String name public Employee () {this ('John Doe', 999) System.out.println ('Default Employee Created')} public Employee (int i) { this ('John Doe', i) System.out.println ('Nhân viên được tạo với tên mặc định')} public Employee (String s, int i) {this.id = i this.name = s System.out.println ( 'Employee Created')} public static void main (String [] args) {Employee emp = new Employee () System.out.println (emp) Employee emp1 = new Employee (10) System.out.println (emp1) Employee emp2 = new Employee ('Pankaj', 20) System.out.println (emp2)} @Override public String toString () {return 'ID =' + id + ', Name =' + name} public int getId () {return id } public void setId (int id) {this.id = id} public String getName () {return name} public void setName (String name) {this.name = name}}

Mẫu thiết kế lớp Singleton

bằng thạc sĩ là bằng sau đại học
  • Thành viên cấp lớp (Phương pháp khởi tạo háo hức):

  1. Đầu tiên, tạo một trường hợp tĩnh không đổi riêng tư của một lớp singleton.

  2. Sau đó, viết một phương thức tĩnh, phương thức này trả về đối tượng của một lớp singleton mà chúng ta đã tạo dưới dạng một cá thể thành viên của lớp.

  3. Có thể đánh dấu một thành viên tĩnh là công khai để truy cập trực tiếp cá thể tĩnh hằng số.

  4. Lớp singleton khác với lớp Java bình thường về khả năng khởi tạo. Trong một lớp bình thường, một hàm tạo được sử dụng nhưng đối với lớp singleton, chúng ta sử dụng phương thức get Instance ().

  • Thành viên cấp lớp (Phương pháp Khởi tạo Lười biếng):

  1. Đầu tiên, khởi tạo một phương thức khởi tạo là private.

  2. Sau đó, tạo một cá thể tĩnh riêng của lớp singleton này. Hãy ghi nhớ để KHÔNG khởi tạo nó.

  3. Sau đó, viết một phương thức static, phương thức này sẽ kiểm tra thành phần static instance có null hay không và khởi tạo instance. Cuối cùng, nó trả về một đối tượng của lớp singleton.

  • Thành viên cấp lớp (Khởi tạo lười biếng với phương pháp khóa kép):

Hãy xem xét hai luồng đang chạy mà cả hai đều truy cập đồng thời vào bên trong câu lệnh “if” trong khi cá thể là rỗng. Trong đó, một luồng đi vào một khối được đồng bộ hóa để tạo một thể hiện, trong khi luồng kia bị chặn. Vì luồng đầu tiên nằm trong khối được đồng bộ hóa, luồng trong hàng đợi sẽ tạo ra một đối tượng singleton khác. Xin lưu ý rằng khi luồng thứ hai đi vào một khối được đồng bộ hóa, nó không thể kiểm tra xem phiên bản có phải là không.

  • Sử dụng lớp bên trong lồng nhau (phương thức Lazy Load):

Ở đây, nó dựa trên Đặc tả ngôn ngữ Java (JLS). Máy ảo Java chỉ tải các thành viên dữ liệu tĩnh theo yêu cầu. Do đó, lớp Singleton tải đầu tiên bởi JVM. Do đó, không có thành viên dữ liệu tĩnh nào trong một lớp

Người giữ lớp Singleton không tải SINGLE_INSTANCE. Khi chúng ta gọi phương thức getIntance, chỉ điều này xảy ra. JLS đảm bảo việc thực thi quá trình khởi tạo của lớp. Một điều khoản để đồng bộ hóa rõ ràng trên phương thức getInstance () tĩnh để tải và khởi tạo. Khi quá trình khởi tạo tạo biến tĩnh SINGLE_INSTANCE theo cách tuần tự, tất cả các lệnh gọi đồng thời của getInstance () sẽ trở lại như cũ mà không cần đồng bộ hóa.

Không phải tất cả các cách tiếp cận trên đều là giải pháp hoàn chỉnh trong mọi trường hợp. Có thể tạo nhiều trường hợp triển khai ở trên bằng cách sử dụng phản chiếu. Trong cả hai trường hợp, chúng ta có thể bỏ qua phương thức khởi tạo riêng và tạo nhiều trường hợp. Do đó, một cách tiếp cận mới là tạo một lớp singleton bằng cách sử dụng các enum. Vì các trường enum là hằng số thời gian được biên dịch, chúng là các thể hiện của kiểu enum. Chúng được xây dựng khi kiểu enum được tham chiếu lần đầu tiên.

Với điều này, chúng ta đến với phần cuối của Private Constructor trong bài viết Java. Tôi hy vọng bạn đã hiểu về các cấu trúc riêng và cách chúng có thể được sử dụng trong Java.

Kiểm tra của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo và cấp chứng chỉ về Java J2EE và SOA của Edureka được thiết kế cho sinh viên và các chuyên gia muốn trở thành Nhà phát triển Java. Khóa học được thiết kế để cung cấp cho bạn khởi đầu về lập trình Java và đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog “Hướng dẫn Java” này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.