发布于2021-05-29 23:25 阅读(1210) 评论(0) 点赞(10) 收藏(1)
类是面向对象编程中最基本的单位。
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内存模型)
下面对上面三个内存模型进行特征介绍:
栈:
堆:
方法区:
下面我们来看代码的运行过程:
程序均是将main方法作为程序的入口,执行第二条语句(第一条先忽略)
Person p2 = new Person();
此时会在栈中开辟一个新的栈帧,为main方法栈帧;方法区会加载整个类模板,存储类里面的相关信息;在堆处会产生一个新的类的对象。如图
/*
小插曲:Java使用new关键字来调用构造方法,从而返回该类的实例(对象)。但是这个对象不是完全由构造方法来创建的。创建一个方法分4步:
*/
当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方法执行完后,对象和方法区中的类信息也就会清空。内存就会回到最初的状态。
作者:小光头吃饭不用愁
链接:http://www.javaheidong.com/blog/article/207784/f22c0187097d98aa2a66/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!