引用
注意:这里的stu只是变量而已,并不是对象,stu只是用来访问new Student这个对象的。这里的引用和c++中是不同的,c++中的引用是别名,但是这里的引用stu其实就是一个变量,通过变量,访问对象。
1、Java引用
String是一个JAVA类,String s,之后s就可以访问一个字符串了,但是注意,这个时候还没有对象(这里与c++中不同),JAVA这句话执行之后,只生成一个引用,或者只生成一个对象变量而已,在内存中,它所指向的值是NULL。
注意:即使会默认赋值,但是如果打印的时候会出错,因为没有赋初值;
(2)生成新的字符串对象之后,s就会指向这个对象,或者是说把这个对象的操作权赋值给s了。
JAVA里面所有的对象是new出来的(这个也是与c++中很大的不同点),new出来的东西都放在堆内存中,JAVA里面的所有对象都是动态分配内存的
注意:这个字符串,这个地址不是物理地址,这个地址是jvm算法算出来的
一定要区分对象变量和对象本身,它们两个是不同的。通过对象变量,通过引用,可以访问对象。
2、对象创建和使用
注意:System是一个对象,而out则是一个方法;
3、内存空间分配
一个方法执行的时候都会创建自己的栈内存。
方法执行结束的时候,栈内存也将自然销毁。
堆内存中的对象不会随着方法的结束而销毁。
4、JVM内存分配
堆、栈、数据区、代码区
5、总结
方法仅有一份是因为(代码区只有一份),在调用代码的时候,调用一份即可
6、JAVA对象的生成对象
(1)创建:创建的时候用new来创建对象,这个时候使用的是构造方法,这和c++中类似,构造方法转门用来创建对象。
(2)使用对象:是通过引用,通过对象变量来使用对象。
(3)清理:JAVA自动回收,不像c++中需要用析构。
是JRE负责回收不再使用的内存,这种机制被称为垃圾回收
7、垃圾回收
垃圾回收自动释放的是不再被程序引用的对象。
System是对象,gc()是方法,同时gc()还是静态方法,因为被类直接使用,普通的方法是不能被类直接使用的。
Runtime.getRuntime().gc()其中gc()是getRuntime()返回对象的方法
gc()之后不一定接着回收。
注意:
(1)finalize方法是JAVA里面所有类中都有的功能,功能是,当垃圾回收器要回收这个对象的时候,会自动调用finalize方法。
(2)垃圾回收是依靠一种算法,程序员是无法精确地控制进行控制。