Lệnh new trong java

ds = new HOCSINH[sl];
for(int i = 0; i < sl; i++) {
	ds[i] = new HOCSINH();
	ds[i].inputInfo();
}

cho em hỏi lệnh new đầu là để tạo ra 1 mảng có kiểu dữ liệu HOCSINH thì từng phần tử của nó phải có kiểu HOCSINH luôn phải không ạ? vậy tại sao phải có dòng new thứ 2 vậy ạ @@. thiếu dòng new đó thì báo lỗi.
Mong a/c giúp em :3

new đầu tiên chỉ khởi tạo một mảng học sinh với sl là độ dài của mảng
new thứ hai là để gán các object HOCSInH vào các vị trí của mảng ds

5 Likes

====> Đúng

tại sao phải có dòng new thứ 2 vậy ạ @@. thiếu dòng new đó thì báo lỗi.

mã lỗi như nào bạn, nếu không gán giá trị cho phần tử thì bị null thôi. dòng 2 không bắt buộc. VD : sl = 3; thì ds = {null, null, null}

4 Likes

image
lỗi đây ạ

Chỉ có thể là NullPointerException thôi. Như bạn @anon21816065 thể hiện trực quan cho bạn thấy rồi đấy.

6 Likes

Nói thế này cho bạn dễ hiểu.
Dòng này ds = new HOCSINH[sl]; là khởi tạo một mảng.
Dòng này ds[i] = new HOCSINH(); là khởi tạo từng element trong mảng đó. Nếu không có dòng này, element ds [ i ] chưa được khởi tạo, mà đã phải gọi hàm inputInfo() thì rõ ràng là không được

4 Likes

Java ko giống như C++ đâu bạn, khai báo xong object sẽ là null chứ không gọi hàm tạo mặc định đâu.

4 Likes

Vì trong Java, một trường xem như 1 con trỏ, mảng là con trỏ cấp 2. Trừ các kiểu nguyên thủy sẽ tự gán giá trị mặc định là 0 (hoặc tương đương), không cần phải new. Mà muốn new cũng chẳng được (Boxed).

Nếu biết C, bạn cứ tưởng tượng mảng chuỗi là kiểu char** đấy.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?