最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java面向对象和内存分析图文代码示例解析
时间:2022-06-29 02:24:32 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下Java面向对象和内存分析图文代码示例解析,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一、Java类
类是面向对象编程中最基本的单位。
Java中的类包含三个内容,分别是:
属性
属性又叫成员变量。
属性用于定义类或类对象的数据(静态特征)。
范围为整个类体。
方法
方法用于定义类或类对象的行为特征(执行动作)(动态)。
方法类似于面向过程中的函数,面向过程中的函数是最基本的单位;
而在面向对象中,最基本单位是类,方法从属于类和对象。
构造方法
构造方法分为无参构造方法;有参构造方法。
构造方法要与类名保持一致。
如果不设置构造方法,则系统自动生成无参构造方法。
属性的定义格式:
[修饰符] 属性类型 属性名 = [默认值]; //若不初始化则系统默认给默认值
方法定义格式:
[修饰符] 方法返回值类型 方法名(形参){
语句
}
有如下代码进行示例分析
public class Person{ public String name; //属性,带有修饰符 int age; public void show(){ //方法 System.out.println("姓名:"+name+",年龄:"+age); } /* Person(){ //构造方法,手动,无参构造方法,一个类里无参构造方法只能有一个 } */ /* Person(String name, int age){ //手动,有参构造方法。 this.name = name; this.age = age; } */ public static void main (String[] args){ Person p1 = new Person("李四",18); //此时调用的是上面手动有参的构造方法 Person p2 = new Person(); //此时调用的是无参构造方法 p2.name = "张三"; //无参构造方法需要以下赋值 p2.age = 18; p2.show(); } }
二、内存分析
上面介绍了类的基本知识,那么我们接下来根据上面的代码来进行内存分析。
JVM内存模型很复杂,为了更好的理解面向对象和面向对象代码,下面进行对模型的简化。(此内存分析并不是为了理解JVM内存模型)
下面对上面三个内存模型进行特征介绍:
栈:
栈描述的是方法执行的内存模型,每个方法被调用时都会创建一个栈帧。
JVM为每个线程创建一个栈。
栈是私有,在线程间不会共享。
栈是一段连续的存储空间。
堆:
堆用于存储创建好的对象。
JVM只有一个堆。
堆被所有线程共享。
堆是不连续的空间,分配灵活。
方法区:
方法区实际也是堆,用来专门存储类、常量(static关键词相关)等相关信息。
JVM只有一个方法区。
可共享。
存储不变的信息。
下面我们来看代码的运行过程:
程序均是将main方法作为程序的入口,执行第二条语句(第一条先忽略)
Person p2 = new Person();
此时会在栈中开辟一个新的栈帧,为main方法栈帧;方法区会加载整个类模板,存储类里面的相关信息;在堆处会产生一个新的类的对象。如图
/*
小插曲:Java使用new关键字来调用构造方法,从而返回该类的实例(对象)。但是这个对象不是完全由构造方法来创建的。创建一个方法分4步:
在堆中分配对象空间,并将对象的成员变量初始化默认值执行显式初始化(比如int i = 3)执行构造方法返回对象地址
*/
当Person()构造方法调用完成后,出栈继续执行main中的下一条语句。如图
下一条语句是
p2.name = "张三"; p2.age = 18;
此时是方法区的张三赋值给name;
我们继续执行下条语句
p2.show();
此时会执行show方法,我们注意到show方法中有age和name。那么它们是谁的name和age呢?我们可以看是p2.show()。p2的地址是0x11,指向的是堆中的0x11对象,所以show方法中的name和age就已知了。
那么当方法执行完后,show方法出栈,同时main方法也执行完毕,也需要出栈,main方法执行完后,对象和方法区中的类信息也就会清空。内存就会回到最初的状态。
相关文章
- 《原神》5.2卡池抽取建议 11-14
- 《原神》5.2版本新怪物介绍 11-14
- 《原神》希诺宁增伤触发方法 11-14
- 《原神》循音觅奇活动入口 11-14
- 《原神》循音觅奇兑换码获取方法 11-14
- 《原神》花羽会活动飞行技巧介绍 11-14