01/10/2018, 14:58
Vùng nhớ và khởi tạo đối tượng
import java.util.*;
import java.io.*;
//đây là class hs
class hs {
private int ms;//ngoài class hs (a.ms = 5) là gán giá trị
private String ten;
private float dtb;
public void nhap_info() {
Scanner nhap=new Scanner(System.in);//biến tên nhập
ms=nhap.nextInt();
nhap.nextLine();//cách để ignore bộ đệm
ten=nhap.nextLine();
dtb=nhap.nextFloat();
}
public void xuat_info() {
System.out.println("mssv " + ms);
System.out.println("hoten " + ten);
System.out.println("dtb " + dtb);
}
public void rank() {
if(dtb<4)
System.out.println("diem F");
else if(dtb<5)
System.out.println("diem D");
else if(dtb<6.5)
System.out.println("diem C");
else if(dtb<8)
System.out.println("diem B");
else if(dtb<8.75)
System.out.println("diem A");
else
System.out.println("diem A+");
}
}
//private -> bạn chỉ có thể sử dụng trong class của nó thôi(trong class hs)
//public -> các class khác đều sử dụng đc
public class info_hs {
public static void main(String[] args) {
hs a = new hs();//a chỉ là tên định danh của class đó
a.nhap_info();//từ class hs lấy ra hàm nhập
a.xuat_info();
a.rank();
}
}
khi ta tạo biến hs a thì ở bộ nhớ stack có 1 vùng nhớ có kích thước tương đương với class hs vậy tại sao trong java phải khởi tạo 1 đối tượng sao ko khai báo rồi dùng luôn như struct và viêc khởi tạo như vậy thì tác động đến vùng nhớ như thế nào ? hay đó chỉ là giao thức phải có khi tạo 1 class ko riêng class mà mảng cũng thế đó có phải là cấp phát động ? và nếu đó là cấp phát động thì tại sao ko nó lại ko cần giải phóng khi ra khỏi hàm.
Bài liên quan
Hi Nguyễn Phú Thành.
Vì stack có kích thước nhỏ hơn help nhiều. Tạo nhiều trên stack có nguy cơ tèo.
đúng thế nhưng tại sao lại ko giải phóng khi ra khỏi hàm việc cấp phát động mà ko thu hồi rất dễ bị memory leak
Bạn cần xem bạn đang làm việc với ngôn ngữ nào…
Java đâu cần phải giải phóng, có GC rồi mà.
GC nó làm heap giống với stack à ? tự động thu hồi khi ra khỏi khối lệnh or hàm ?
Cái này tùy vào thiết kế. Đối với mỗi ngôn ngữ một khác.
stackoverflow.com
Với Java thì xem tại đây:
Java stack and heap memory management
code mình đã ghi chú rất rõ ràng cái nào ra cái đó bạn lười đọc thì có mà mình viết tắt chỗ nào thế ?
a là local variable được lưu trên stack, nhưng hs là kiểu object, trong java object sẽ được lưu trên heap,
sẽ tạo 1 object hs ở trên heap.
GC của JVM sẽ làm nhiệm vụ này, Còn khi nào GC làm nhiệm vụ này thì bạn đọc thêm ở đây:
https://daynhauhoc.com/t/java-memory-model-garbage-collection/33986