接下来,以java程序执行时内存里数据指向为主线,来复习一下相关的知识。
1、java中除了基本数据类型,只有引用类型。且所有的引用类型变量都是占有四四个字节。
2、当new一个对象后,且为默认构造函数,属性的初值判断如下
六种数值类型:小数0.0,其余为0。char类型为/000,boolean类型为false;对于
引用数据类型比如String 初值为null。
3、对象都是通过引用来完成调用的。
掌握了上面的开始内存分析了。
1、栈:存放局部变量
堆:存放new出来的实例对象
方法区:类的信息,static变量,常量池。
可以看到:1、栈区是连续的,堆区不是连续的。
2、执行Student s1,发现方法区目前为空,变到class文件里找有没有Student这个类,有便把类的信息,属性,常量,方法等加载到方法区。如果没有,就抛出class没有找到的异常(ClassNotFoundException)。 类当再次有引用数据Student s2便会直接使用方法区的类信息,而不需要再吃从class文件加载
class Student{
String name;
int id;
int age;
String gender;
float weight;
public void study(){
Syso(name+"正在学习");
}
public void sayHello(String name){
Syso(this.name+"对+"name"+说,你好");
}
}
class TestMemory{
Student s1=new Student();
s1.name="小钱";
s1.study();
s1.sayHello("小李");
Student s2=new Student();
s2.name="小马";
s2.age=77;
}