数组操作的内存变化和面向对象

1、将一个引用数据类型的值赋值给了另一个引用数据类型,相当于将地址值给了另外一个;2、对一个数据的操作会影响到另外一个数组

数组的操作:

两个数组的内存图:

两个数组指向相同的引用

数组的遍历

概述:数组通过索引来操作其中的元素,索引又是连续的数字,所以我们可以通过循环来操作数组。

索引值是从0开始的数字,循环的起点应该是0,循环的终点是最后一个元素的索引,获取数组的长度

本质上获取数组中元素的个数

格式:数组名.length;当前数组的长度,所以循环的终点是length-1

获取数组中元素的最大值:核心思想就是用打擂的思想去获取最大值

数组的反转:就是将数组中的元素倒置

(如何确保数组对称,需要定义两个变量,一个变量往左走,一个变量往右走;2、交换元素的逻辑,定义一个中间变量;3、交换的边界:当两个变量的值相等,或者左边的变量大于右边的变量

获取数组中元素的位置:就是获取数组中某个元素对应的索引

要求:返回对应的索引值,如果没有找到就提示不存在这个元素

面向对象思想

面向对象:是一种思维的方式,是处理问题的一种方式

面向过程:更加注重事物实现的过程(C语言),更加强调的是解决问题的方法,面向过程的特点:自顶向下,不断分解。

面向对象:更加注重事物实现的结果,更加强调是解决问题的数据或者是人。自底向上,不断拼装。

好处:1、就是将数据源准备完毕,使用时直接调用;2、更加符合我们人的行为逻辑,遇到事情先去找,可能用到的工具或者人

类和对象的关系

类:类是一个抽象概念就是指的一个类型

类和对象的关系:类是对象中的特征给抽取出来,进行封装。抽象:抽取出相似的,相同的部分。

类中存储了对象应该具有的属性和行为。

属性:在Java中我们把属性叫做成员变量,都是一个可以量化值

成员变量需要定义在类中方法外,跟之前定义的变量功能相同。一般是名词。

行为:行为就是类中提取出来的具有相似的行为,也就是可以实现的功能。行为在Java中我们叫做成员方法。跟之前方法功能一致,定义时需要修改,不需要static关键字的修饰。一般是动词或者动宾结构。

对象:对象就是对类的具体的实现。

对象的定义:

定义的格式:

数据类型 对象名 = new 数据类型();

说明:

数据类型:就是声明这个对象的类型(就是类名,class后面那个

对象名:就是在内存中一段空间,用来指向这个对象的引用。

new:在堆内存中开辟空间用来存储对象中的数据

数据类型():这个类型的方法指向了创建对象的构造方法;

对象的使用:

获取对象中的属性:对象名.属性名;

修改对象中的属性:对象名.属性名="属性值";

调用对象中的方法:对象名.方法名();

创建对象的内存图:

main方法进栈,main中创建一个p1的空间,new--去堆中开辟空间-Person,给他一个地址值,通过地址值,可以找到堆内存中的空间,

person加载到方法区中,,,,堆中存放数据,划掉初始值,默认值name=null,age=0;调用eat(),eat()方法进栈

说明:1、主类的类字节码文件需要被加载进方法区;2、主类中main函数需要进栈执行;3、main方法中需要开辟一个储存地址的空间等待被赋值;4、new关键字去堆内存中开辟空间,并且给当前控件的地址,非陪给我们栈内存中的空间;5、当堆内存中需要使用或者需要操作数据时 方法区也有一个隐藏空间用来储存字节码的信息;6、堆内存会通过这个字节码的信息去找到类的加载信息,然后使用或者操作。7、当方法被调用时也会先去方法区中加载类信息了

注意事项:

1、方法区的信息当类被创建时就需要去加载

2、第一次创建对象,需要去方法区中加载信息

3、第二次以后就不需要再去方法区中加载类的信息了

两个对象创建的内存图:

相同对象引用的内存图:

成员变量和局部变量的区别

成员变量:就是类的属性

局部变量:普通变量

定义方式:

定义的位置不同:成员变量在类中方法外;局部变量在方法中或者方法的形参中

在内存的空间:

成员变量:随着对象的创建被储存在堆中;局部变量:会去储存在栈内存的方法的栈帧中

在内存的时间:(生命周期不同)成员变量随着对象的创建被创建,随着方法的使用结束(p1=null)被当作垃圾回收;局部变量随着方法的使用被创建,随着方法的出栈被回收

初始值的不同:局部变量没有初始值,没有默认值需要我们自己定义默认值,如果不赋值就无法使用;成员变量有初始值,即使不赋值也可以直接使用。

成员变量的默认值:整数类型:0;浮点类型:0.0;char:'\u0000';布尔类型:false;引用数据类型:null

作用域方面:成员变量的作用范围,根据它的访问权限来决定可以用访问权限修饰符来修饰,最小的范围就是在本类中可以使用;局部变量:作用范围就是在声明它的方法中

匿名对象:

含义:就是没有名称的对象

创建对象的语法:类名称 对象名 = new 类名称();前半段是在栈中存储变量名,后半段使用new开辟的堆空间存储对象内容,若是只有"new 类名称();"这部分的话,那就是只是在堆中开辟了一个空间来保存对象信息,没有栈去指向它。也就是这个空间是没有名字的。所以简单来说,没有栈中引用指向的对象就叫做匿名对象

格式:new 数据类型();

应用场景:1、当创建一个对象并且只需要调用一次这个对象的方法时,对象就可以被回收;2、匿名对象可以当作一个方法的实际参数进行传参;3、匿名对象可以当作一个方法的返回值返回。

注意事项:当匿名对象对属性进行赋值或者修改时,匿名对象在执行完毕后会直接被回收,所以修改的操作没有意义

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值