重庆做网站,上海的加盟网站建设,帝国转wordpress,html5软件下载官网文章目录 前言一个java对象的运行过程jvm内存分布程序的基本运行程序什么是对象#xff1f;对象与类的关系#xff1f;由类创建对象的顺序 前言
一个程序需要运行#xff0c;需要在内存中开辟一块空间类是构建对象的模板#xff0c;只有类加载到内存中才能创建对象
一个j… 文章目录 前言一个java对象的运行过程jvm内存分布程序的基本运行程序什么是对象对象与类的关系由类创建对象的顺序 前言
一个程序需要运行需要在内存中开辟一块空间类是构建对象的模板只有类加载到内存中才能创建对象
一个java对象的运行过程 1、我们自己创建一个Test类功能只有一个System.out.println(“hello world”); 2、然后通过终端运行 javac Test.java会将Test类编译成二进制字节码文件Test.class 3、然后我们继续运行 java Test.class于是会打印出“hello world”。 4、控制着程序的执行流程的是虚拟机栈 打印的过程就是在内存中进行的 jvm内存分布
由上边图可以看到jvm主要分为五个区域。我们可以分为两大类 线程独享程序计数器、本地方法栈、虚拟机栈 线程共享堆、方法区 每个区域主要的职责参看上图就可以了这里不多数 各位读者如果有了解本地方法栈的欢迎留言哦
程序的基本运行程序 在java中万物皆可对象。那么什么是对象呢对象与类又是什么关系呢 什么是对象
对象是堆内的一块内存空间是由类构建出来的
对象与类的关系
类是构建对象的模板类中有什么对象当中有什么。
由类创建对象的顺序 我们先来一个Person类然后再来一个Test类用来测试一起来看一下顺序 代码 public class Person {String name;Integer age;Character sex;public static void breath(){System.out.println(会呼吸);}public void speek(){System.out.println(可以说话);}
}public class Test {public static void main(String[] args) {Person person1 new Person();person1.name Lucy;person1.age 20;person1.sex F;System.out.println(person1.name年龄为person1.age性别是person1.sex);person1.breath(); // 也可以Person.breath();person1.speek();// person2是为了后续的内容讲解此处先不用关注Person person2 new Person();person2.name Lucy;person2.age 20;person2.sex F;person2.breath();person2.speek();}
}备注person2是为了对比下边内容讲解会先忽略这里只看person1 内存图 执行顺序 1、加载Test类信息到方法区中 2、main()方法入栈 3、加载Person类信息到方法区 4、给对象person1的name赋值name为String类型person1对象中name指向的是一个引用地址数据存放在方法区的字符串常量池中 5、给对象person1的age赋值age为Integer类型当age取值为[-128,127]时age指向的是数组中的某一个。如果超出范围会创建新的Integer对象 6、给对象的sex赋值在堆中创建一个对象 7、调用breath()方法 8、调用speek()方法 多说两句以上边的person1和person2来比对 如果age取值在[-128,127]内多个对象指向的是同一内存空间System.out.println(person1.age person2.age);
-------------
true如果age取值不在[-128,127]之间那么不同的对象的age需要在堆中额外创建对象person1.age 200;
person2.age 200;
System.out.println(person1.age person2.age);
--------运行结果---------
false对于Character类只要值相等那么多个对象指向的是同一空间地址System.out.println(person1.sex person2.sex);
--------运行结果---------
true