01/10/2018, 11:46

Hỏi về đối tượng trong Java

mn cho mình hỏi chút : mình có đọc sách thấy có đoạn code:
FileInputStream fin = null;
FileInputStream là một class , vậy “fin” là đối tượng ư, sao lại khai báo đổi tượng kiểu này vậy?

Phạm Vinh viết 13:48 ngày 01/10/2018

fin trog trường hợp này là 1 biến nhưng chưa đc gán giá trị nào cả

Tiến Huy viết 13:57 ngày 01/10/2018

nhưng sao biến lại khai báo kiểu này nhỉ? FileInputStream là một class mà, thấy lạ

Phạm Vinh viết 13:54 ngày 01/10/2018

À, thì có thể trong quá trình gán giá trị vào biến cần các bước kiểm tra, chọn lọc nên phải khai báo biến trước. Còn =null hay không ghi gì phía sau thì compiler tự hiểu là giá trị null. Ghi = null là để code thêm rõ nghĩa

Tiến Huy viết 13:59 ngày 01/10/2018

Hơi khó hiểu nhỉ, vì có đoạn code fin.read() nữa nên mình nghỉ chỉ có object mới dùng kiểu ý chứ

Phạm Vinh viết 13:59 ngày 01/10/2018

Uk, object mới có thể làm v. Bạn chưa hiểu gì mình chưa rõ

Tiến Huy viết 13:55 ngày 01/10/2018

mình mới hk chưa lâu, chỉ thấy khai báo object là : classname object = new classname();
nên thấy lạ khi object lại được khai báo kiểu này?

Phạm Vinh viết 13:55 ngày 01/10/2018

À, bên phía tay trái dấu = là biến. Ta dùng biến để truy cập vào object. Phía bên phải là object thật sự. Bạn có thể coi biến là 1 chiếc hộp còn object là thứ đựng trong hộp.
Đoạn code ở trên : tạo 1 object mới với từ khóa new và bỏ vào hộp dùng để đựng object của classname.
Việc gán cho một chiếc hộp = null có nghĩa là nó chưa đựng object nào cả. Chỉ là cái hộp rỗng

Tiến Huy viết 13:52 ngày 01/10/2018

vậy ak, thế mình hiểu rồi , cảm ơn bạn nhiều nhé

Phan Bá Hải viết 13:47 ngày 01/10/2018

Bình thường một đối tượng được khai báo kiểu này

HocSinh hs = new HocSinh();

Đối tượng này được khởi tạo đầy đủ, không bị dính NullPointerException nếu có truy cập vào đối tượng
còn

HocSinh hs;
// hay
HocSinh hs = null;

Đối tượng này khai báo không có giá trị nào cả (null) nên dễ dính NullPointerException nếu truy cập vào đối tượng

Vậy NullPointerException nó xẩy ra như thế nào?
VD nhé

int a = 5; // Biến a có giá trị bằng 5
System.out.println(a); // 5
int b; // Biến b có giá trị là... Ai biết???
System.out.println(b); // Không biết thằng b giá trị bao nhiêu, quăng NullPointerException
Tiến Huy viết 13:52 ngày 01/10/2018

Cảm ơn bạn nhiều nhé !

Trần Hoàn viết 13:58 ngày 01/10/2018

[details=Gán]Cú pháp của phép gán được thực hiện như sau:

A = B;

trong đó A là biến, B là đối tượng[/details]

[details=Khai báo]Cú pháp của phép khai báo được thực hiện như sau:

Type A;

trong đó Type là lớp, A là đối tượng[/details][details=Khởi tạo]
Phép khởi tạo là một loại phép gán:

A = new Type();//new Type() là một đối tượng, đóng vai trò của B trong phép gán
```[/details]

Dạng thường gặp nhất của một đối tượng trong phép khởi tạo loại này là `new Type()`, tuy nhiên không phải mọi phép khởi tạo đều sử dụng constructor loại này. Và cũng không phải mọi phép gán đều là phép khởi tạo.
rogp10 viết 13:50 ngày 01/10/2018

Như vậy Java hoàn toàn không có primitive phải không?

Hải Duy Nguyễn viết 13:54 ngày 01/10/2018

@Phan Bá Hải
Bạn lấy ví dụ sai rồi nhé. Chỉ kiểu dữ liệu tham chiếu mới có thể có giá trị null
Còn kiểu int ko thể null mà mặc định là 0

Trần Hoàn viết 13:54 ngày 01/10/2018

Trong Java, int ko được gán giá trị mặc định. Cũng giống như Visual C# hay Visual C++, IDE sẽ báo lỗi ngay nếu bạn sử dụng biến mà không khởi tạo.

Bài liên quan
0