java之类与对象

Posted scanner小霸王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之类与对象相关的知识,希望对你有一定的参考价值。

1.当使用现有的技术定义一个事物时候:
a)现有技术:
ii)单独定义多个变量(定义多个事物时候,变量定义过分)
ii)使用数组解决(目标不明确)
缺点:不利于数据管理,效率低
2,类:(属性+行为)构成;
而对象是类的具体的一个实例,类和对象的关系是一对多的关系
3.对象内存布局
以Cat cat = new Cat();为例子
cat的引用放在栈中,对象在堆中开辟一个空间,
因为name是String类型,是一个引用类型,会把相对应的数据放在常量池中,而age是基本数据类型直接放在堆中。
除此之外,cat的属性和行为也会放在方法区当中。
在这里插入图片描述

4.分析一段代码
在这里插入图片描述

a)Person p1 = new Person();
ii)加载person类信息(属性、方法到方法区)
ii)在堆内存中开辟一个空间(有地址,有存在数据的地方,但是现在只有默认值)
ii)创建成功,会存在一个地址在栈中
在这里插入图片描述

b)p1.age = 10;
ii)在堆中找到age的空间进行赋值
c)p1.name = “小明”;
name是字符串常量(引用类型),地址会指向方法区中的常量池中
d)Person p2 = p1;
ii)p2也指向p1的空间

在这里插入图片描述
5类与对象的内存分配机制
在这里插入图片描述
6.方法的调用机制
分析以下代码
在这里插入图片描述在这里插入图片描述
a)主方法会在栈中开辟一个空间
b)当执行到getSum方法时候,会另外在栈中开辟一个独立的空间,直到返回值或者指向完毕时候后,才将方法在栈中的空间进行销毁。

7堆与栈
堆中存什么?栈中存什么?

堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用。一个对象的大小是不可估计的,或者说是可
以动态变化的,但是在栈中,一个对象只对应了一个4btye的引用(堆栈分离的好处:))。
为什么不把基本类型放堆中呢?因为其占用的空间一般是1~8个字节——需要空间比较少,而且因为是基本
类型,所以不会出现动态增长的情况——长度固定,因此栈中存储就够了,如果把他存在堆中是没有什么意义
的(还会浪费空间,后面说明)。可以这么说,基本类型和对象的引用都是存放在栈中,而且都是几个字节的
一个数,因此在程序运行时,他们的处理方式是统一的。但是基本类型、对象引用和对象本身就有所区别了,
因为一个是栈中的数据一个是堆中的数据。最常见的一个问题就是,Java中参数传递时的问题。
参考文章: https://www.cnblogs.com/lemon-flm/p/10185855.html
8.分析下面一段代码
在这里插入图片描述在这里插入图片描述
a)test200 方法内 将
p = null,主方法输出是10
原因:当调用方法的时候,方法栈内的p指向person在堆中的地址,当p = null时候,方法的p指向null,并不影响主方法p的引用,所以输出还是10
b)test200f方法内 p = new Peson();
方法内new person()在堆中开辟一个空间,方法的p指向改地址,改变这个值,并不影响原先主方法的·p的值

以上是关于java之类与对象的主要内容,如果未能解决你的问题,请参考以下文章

java之类和对象

3-1:类与对象之上篇之类的引入和类的定义以及访问限定符和封装还有对面向对象的理解

Php内核学习之类与对象详解

C++入门篇之类和对象上

Java-类与对象-多态

Java面向对象-类与对象