先举出一个面向对象的实例:
public class start1 {
public static void main(String[] args){
class Cat{
String name;//名字
int age;
String colour;
}
Cat cat1=new Cat();
cat1.name="小白";
cat1.age=12;
cat1.colour="白色";
Cat cat2=new Cat();
cat2.name="小花";
cat2.age=100;
cat2.colour="花色";
System.out.println("第一只猫信息:"+cat1.name+" "+cat1.age+" "+cat1.colour+" "+cat1.weight);
System.out.println("第二只猫信息:"+cat2.name+" "+cat2.age+" "+cat2.colour+" "+cat2.weight);
}
}
下面是我在Processon官网上解释JVM的对象存在形式的图片:
https://www.processon.com/diagraming/621044937d9c0807ec98907f
下面对所做的图进行解释:
Cat cat1=new Cat();
cat1.name="小白";
cat1.age=12;
cat1.colour="白色";
由代码可知,new的一个cat1一共3个特征:name,age,colour,根据数据类型的不同分别来存放数据。name、colour的数据类型是string,即字符串,字符串的本质是一个引用类型,所以按照JVM的规则,它们会被放到方法区中常量池的空间。既然它们有了空间,那么它们对应的地址也应在常量池中,从堆到方法区的箭头就形成了;age的数据类型是int,即整型,int类型会直接存放在堆中,不进入方法区。
除此之外,在JVM处理这行代码时,
Cat cat1=new Cat();
JVM会把类的信息加载到方法区的常量池中,主要是两个部分:
1.类的属性信息
2.类的行为(方法)信息