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?
Hỏi về đối tượng trong Java
fin trog trường hợp này là 1 biến nhưng chưa đc gán giá trị nào cả
nhưng sao biến lại khai báo kiểu này nhỉ? FileInputStream là một class mà, thấy lạ
À, 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
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ứ
Uk, object mới có thể làm v. Bạn chưa hiểu gì mình chưa rõ
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?
À, 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
vậy ak, thế mình hiểu rồi , cảm ơn bạn nhiều nhé
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
Cảm ơn bạn nhiều nhé !
[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.
Như vậy Java hoàn toàn không có primitive phải không?
@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
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.