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、匿名对象可以当作一个方法的返回值返回。
注意事项:当匿名对象对属性进行赋值或者修改时,匿名对象在执行完毕后会直接被回收,所以修改的操作没有意义