Constructors
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| default constructor/dɪˈfɒlt kənˈstrʌktə/ | hàm khởi tạo mặc định |
Một constructor có tham số không cung cấp một constructor không tham số
- Student chỉ khai báo Student(String n). Tạo new Student("Ada") hoạt động, nhưng new Student() sẽ không có constructor nào tương ứng.
- Java chỉ cung cấp một constructor mặc định ngầm định khi không có constructor nào được khai báo. Để cho phép cả hai cách gọi, hãy viết rõ ràng Student() và Student(String n).
Thiết lập một đối tượng mới
- Một constructor chạy khi một đối tượng được tạo ra với
new, để thiết lập trạng thái ban đầu của nó. Nó có cùng tên với class và không có kiểu trả về (ngay cảvoid). public Student(String n) { name = n; score = 0; }Nhiệm vụ của nó: cung cấp các giá trị khởi đầu hợp lý cho đối tượng mới tinh.
tham số constructor
- Tham số cho phép mỗi đối tượng mới bắt đầu với các giá trị riêng của nó.
new Student("Ada")truyền"Ada"vào tham sốncủa constructor. - Bên trong,
name = n;sao chép đối số vào biến instance. Mỗi biểu thứcnewthành công tạo ra một đối tượng riêng biệt, ngay cả khi các đối số của chúng giống nhau. Các đối số khác nhau không nhất thiết phải tạo ra các giá trị trường khác nhau nếu constructor bỏ qua hoặc chuẩn hóa chúng.
Hai lần thực thi new Student("Ada") trỏ đến cùng một đối tượng vì các tham số bằng nhau.
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Mỗi biểu thức new thành công tạo ra một đối tượng riêng biệt; các tham số bằng nhau không làm cho các tham chiếu trở nên bằng nhau.
Overloading constructors
- Một class có thể có nhiều constructors với danh sách tham số khác nhau — quá tải.
Student(String n)vàStudent(String n, int s)đều hợp lệ. - Java chọn cái mà tham số của nó khớp với các
newđối số của bạn. Điều này mang lại cho người gọi các cách linh hoạt để xây dựng một đối tượng.
Constructors thiết lập trạng thái khởi đầu
Mỗi đối tượng mới được cấu hình bởi các tham số của constructor.
Một constructor có...
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Cùng tên với lớp, không có return type — ngay cả void cũng không.
Khi nào thì một constructor chạy?
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
new kích hoạt constructor để xây dựng đối tượng.
Nếu bạn không viết任何constructor, Java cung cấp một default no-argument constructor.
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Nhưng việc viết bất kỳ constructor nào sẽ loại bỏ mặc định miễn phí đó.
Một khi bạn định nghĩa một constructor có tham số, new Student() vẫn hoạt động tự động.
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Mặc định miễn phí đã mất; hãy viết một no-arg constructor nếu bạn cần một cái.
Viết hai constructors với danh sách tham số khác nhau là ví dụ về...
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Cùng tên, tham số khác = overloading (nạp nặng).
Default constructor
- Nếu bạn không viết bất kỳ constructor nào, Java cung cấp một constructor mặc định ẩn với không tham số. Các trường đầu tiên có các giá trị mặc định (
0,false,null); sau đó các bộ khởi tạo trường rõ ràng có thể đặt các giá trị khởi đầu khác. - Nhưng một khi bạn viết bất kỳ constructor nào, mặc định miễn phí đó biến mất. Vì vậy, nếu bạn cần một constructor không tham số và một constructor có tham số, hãy viết cả hai.
Constructor có tên class và KHÔNG có return type — việc viết void sẽ biến nó thành một method thông thường, không còn là constructor nữa. Và một khi bạn định nghĩa bất kỳ constructor nào, Java sẽ ngừng cung cấp mặc nhiên no-arg default; nếu bạn vẫn muốn new Student(), bạn phải tự viết constructor đó.
Order the steps used to evaluate new Student("Ada").
Độ khó 3/5 · 200 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
The supplied argument selects a matching constructor; declaring it does not also create a no-argument constructor.
Counter có int value = 7 được khai báo riêng tư; và một constructor rõ ràng sau đó gán value = 9;. Giá trị của value ngay sau khi xây dựng là gì?
Độ khó 2/5 · 140 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Trình khởi tạo trường gán 7 trước khi thân constructor gán 9.
Hai constructors cho Student:
public Student(String n) { name = n; score = 0; }public Student(String n, int s) { name = n; score = s; }new Student("Ada")→ score0;new Student("Bo", 75)→ score75.
Mở rộng suy luận sang trường hợp mới
- So sánh
class Counter { private int value = 7; }với một class tương tự hoàn toàn nhưng có constructor rõ ràng gánvalue = 9;. Cái đầu tiên bắt đầu ở 7 sau bộ khởi tạo trường của nó; cái thứ hai kết thúc việc xây dựng tại 9. - Các trường nhận giá trị mặc định trước khi bộ khởi tạo trường và thân constructor chạy. Một constructor không tham số do lập trình viên viết không phải là constructor mặc định do trình biên dịch cung cấp, mặc dù cả hai đều không có tham số.
Một constructor (cùng tên class, không có return type) chạy khi new để thiết lập trạng thái ban đầu của đối tượng, sử dụng parameters cho các giá trị theo từng đối tượng. Một class có thể overload nhiều constructors. Viết không constructor nào và Java sẽ cung cấp một default no-arg — nhưng định nghĩa bất kỳ constructor nào sẽ xóa bỏ mặc nhiên đó.