+ Anh cho em hỏi là các dữ liệu như thuộc tính của đối tượng hình vuông khi được khởi tạo sẽ được lưu ở đâu ạ ? + Biến hinhvuong trỏ đến đối tượng HinhVuông thì giá trị của nó là gì và địa chỉ của nó có liên quan gì đến đối tượng HinhVuong không ạ ?
+các thuộc tính của đối tượng (biến thực thể ) được lưu ở bộ nhớ heap kèm theo cái đối tượng chủ của nó +cái biến tham chiếu hinhVuong đó được lưu ở bộ nhớ Stack giá trị chuỗi bit chỉ để lưu cách thức truy cập đến đối tượng p/s : ý kiến cá nhân
Hi em, Em xem thêm bài 31 và 32 ở đây để hiểu về class và đối tượng: ruclips.net/video/yFQumeu2U-A/видео.html - static thuộc về class chung, đối tượng tạo nên từ class, chỉ khác dữ liệu. - non-static thuộc về đối tượng là một thực thể độc lập trong bộ nhớ heap. Mỗi đối tượng có 1 hàm và biến instance riêng của nó. Lý do 1: Nếu class gọi được hàm non-static, thì theo em nghĩ nó sẽ gọi hàm cua đối tượng nào? Lý do 2: Bảo mật ko đảm bảo. Tương tự cuộc sống, em và anh là 2 đối tượng. Anh không thể sử dụng trái tim em cho anh. và ngược lại. Tuy vậy a và em đều có đậc tính của người từ class người được kế thừa.
vậy có nghĩa là khi nào tạo ra 1 đối tượng , thì các static variable trong các đối tượng sẽ cùng tham chiếu đến 1 vùng dữ liệu chung phải không ạ , vậy cho em hỏi là có phải cái static variable sẽ không bị thu hồi bởi bộ dọn rác còn vùng dữ liệu mà nó tham chiếu đến thì có thể bị thu hồi bởi bộ dọn rác hay không ạ
Câu hỏi của em không rõ ràng lắm. + static variable nằm trong đối tượng thì dùng chung dữ liệu. có giá trị là loại cơ bản hoặc đối tượng. Cái này em đang nói về dữ liệu nào. + class và giá trị static variable được lưu riêng trong 1 vùng bộ nhớ của java Permanent Generation. không bao gồm trong bài học này. + nếu static variable trỏ đến một đối tượng khác, thì đối tượng đó nằm trong heap, chứ ko thuộc Perm.
đối tượng String trong bộ nhớ Heap=> Cái này mình không hiểu lắm. Tại sao String đó lại là 1 đối tượng? Ngoài ra nếu bạn muốn giải thích phần này, thì nên đặt tên khác nhau: hinhVuong1, hinhVuong2... Thêm 1 câu hỏi: các phần trước bạn khai báo : Book b1 = new Book(); // trường hợp này bạn nói rằng tạo 1 đối tượng b1. Nhưng trong phần này, bạn nói rằng b1 là biến tham chiếu đến đối tượng. Nhờ bạn giải thích giúp. Thanks!
String là một lớp nhé k phải kiểu cơ bản bộ nhớ heap lưu đối tượng String là lưu các giá trị của đối tượng đó + b1 nói đúng hơn là biến tham chiếu . nó thám chiếu đến đối tượng book thông qua phép gán =
@@nhattrung1515 "+ b1 nói đúng hơn là biến tham chiếu . nó thám chiếu đến đối tượng book thông qua phép gán =" và nó nằm bên trong heap, khởi tạo thêm 1 biến tham chiếu b2 nữa thì đối tượng đc tạo cũng nằm trong heap, biến tham chiếu b2 nằm trong stack, theo cách giải thích trong video thì chỉ có 1 đối tượng HinhVuong nằm trong heap thôi
Khi dùng từ khóa new -> thì đồng thời sẽ cấp phát vùng nhớ để lưu trữ đối tượng trong Heap. vd HinhVuong hv1 = new HinhVuong(); HinhVuong hv2 = new HinhVuong(); thì trong Heap sẽ cấp phát vùng nhớ cho 2 đối tượng hv1 và hv2 (giả sử là gọi là HV1 và HV2). Thì ta có 2 biến tham chiếu nằm trên stack đó là hv1 và hv2 lần lượt trỏ đến 2 vùng nhớ trên Heap là HV1 và HV2. Đối với vd trong video có 1 HinhVuong trong Heap là do: Đối với parameter của hàm sẽ được sao chép ra (chỉ sao chép biến tham chiếu) nên 2 biến tham chiếu cùng trỏ về 1 vùng nhớ HinhVuong tren Heap. giống như trong C thì con trỏ p1 = con trỏ p2 = địa chỉ vùng nhớ của HinhVuong
Thầy ơi, nếu trong hình vuông lại có các member như hàm, field primitive thì member đó được lưu ở đâu
cái đó của (instance) lưu trong heap cùng với instance đó em à.
thằng Js nó có giống cơ chế stack, heap này không thầy
em thắc mắc là tại sao khi khai báo s thì đối tượng string được khởi tạo trong heap còn khi khai báo x thì ko có khởi tạo int?
int là loại cơ bản. String là loại đối tượng em.
em cảm ơn ạ
thầy ơi ví dú thêm về 1 số biến đối tượng đi ạ, ngoài string thì còn gì nữa k thầy
+ Anh cho em hỏi là các dữ liệu như thuộc tính của đối tượng hình vuông khi được khởi tạo sẽ được lưu ở đâu ạ ?
+ Biến hinhvuong trỏ đến đối tượng HinhVuông thì giá trị của nó là gì và địa chỉ của nó có liên quan gì đến đối tượng HinhVuong không ạ ?
+các thuộc tính của đối tượng (biến thực thể ) được lưu ở bộ nhớ heap kèm theo cái đối tượng chủ của nó
+cái biến tham chiếu hinhVuong đó được lưu ở bộ nhớ Stack giá trị chuỗi bit chỉ để lưu cách thức truy cập đến đối tượng
p/s : ý kiến cá nhân
cho em hỏi vì sao static method không thể truy cập đến non-static variable và method , nhưng ngược lại thì được ạ..??
Hi em,
Em xem thêm bài 31 và 32 ở đây để hiểu về class và đối tượng: ruclips.net/video/yFQumeu2U-A/видео.html
- static thuộc về class chung, đối tượng tạo nên từ class, chỉ khác dữ liệu.
- non-static thuộc về đối tượng là một thực thể độc lập trong bộ nhớ heap. Mỗi đối tượng có 1 hàm và biến instance riêng của nó.
Lý do 1: Nếu class gọi được hàm non-static, thì theo em nghĩ nó sẽ gọi hàm cua đối tượng nào?
Lý do 2: Bảo mật ko đảm bảo.
Tương tự cuộc sống, em và anh là 2 đối tượng. Anh không thể sử dụng trái tim em cho anh. và ngược lại. Tuy vậy a và em đều có đậc tính của người từ class người được kế thừa.
vậy có nghĩa là khi nào tạo ra 1 đối tượng , thì các static variable trong các đối tượng sẽ cùng tham chiếu đến 1 vùng dữ liệu chung phải không ạ , vậy cho em hỏi là có phải cái static variable sẽ không bị thu hồi bởi bộ dọn rác còn vùng dữ liệu mà nó tham chiếu đến thì có thể bị thu hồi bởi bộ dọn rác hay không ạ
Câu hỏi của em không rõ ràng lắm.
+ static variable nằm trong đối tượng thì dùng chung dữ liệu. có giá trị là loại cơ bản hoặc đối tượng. Cái này em đang nói về dữ liệu nào.
+ class và giá trị static variable được lưu riêng trong 1 vùng bộ nhớ của java Permanent Generation. không bao gồm trong bài học này.
+ nếu static variable trỏ đến một đối tượng khác, thì đối tượng đó nằm trong heap, chứ ko thuộc Perm.
vâng cảm ơn thầy em đã hiểu rồi...:D
Chỉ biết nói : Nice video
thật sự là vô cùng cảm ơn
đối tượng String trong bộ nhớ Heap=> Cái này mình không hiểu lắm.
Tại sao String đó lại là 1 đối tượng?
Ngoài ra nếu bạn muốn giải thích phần này, thì nên đặt tên khác nhau: hinhVuong1, hinhVuong2...
Thêm 1 câu hỏi: các phần trước bạn khai báo : Book b1 = new Book(); // trường hợp này bạn nói rằng tạo 1 đối tượng b1.
Nhưng trong phần này, bạn nói rằng b1 là biến tham chiếu đến đối tượng.
Nhờ bạn giải thích giúp. Thanks!
String là một lớp nhé k phải kiểu cơ bản
bộ nhớ heap lưu đối tượng String là lưu các giá trị của đối tượng đó
+ b1 nói đúng hơn là biến tham chiếu . nó thám chiếu đến đối tượng book thông qua phép gán =
@@nhattrung1515 "+ b1 nói đúng hơn là biến tham chiếu . nó thám chiếu đến đối tượng book thông qua phép gán =" và nó nằm bên trong heap, khởi tạo thêm 1 biến tham chiếu b2 nữa thì đối tượng đc tạo cũng nằm trong heap, biến tham chiếu b2 nằm trong stack, theo cách giải thích trong video thì chỉ có 1 đối tượng HinhVuong nằm trong heap thôi
Khi dùng từ khóa new -> thì đồng thời sẽ cấp phát vùng nhớ để lưu trữ đối tượng trong Heap. vd HinhVuong hv1 = new HinhVuong(); HinhVuong hv2 = new HinhVuong(); thì trong Heap sẽ cấp phát vùng nhớ cho 2 đối tượng hv1 và hv2 (giả sử là gọi là HV1 và HV2). Thì ta có 2 biến tham chiếu nằm trên stack đó là hv1 và hv2 lần lượt trỏ đến 2 vùng nhớ trên Heap là HV1 và HV2. Đối với vd trong video có 1 HinhVuong trong Heap là do: Đối với parameter của hàm sẽ được sao chép ra (chỉ sao chép biến tham chiếu) nên 2 biến tham chiếu cùng trỏ về 1 vùng nhớ HinhVuong tren Heap. giống như trong C thì con trỏ p1 = con trỏ p2 = địa chỉ vùng nhớ của HinhVuong
mấy chú chưa học C/C++ nên chạy qua Java học khó lắm
a có dạy khóa học offline không vậy ạ.
Hi em, có em nhé. Em xem chi tiết tại trang trungtamjava.com nhé. Học online + support đầy đủ thì ở learn.trungtamjava.com
kênh hay mà ít subscribe quá
great too !
ez