数组概述
- 数组就是一个容器,用来存储一批同种类型的数据
数组的定义和访问
静态初始化数组
数组的静态初始化的写法和特点什么样的?
1
2
3
4
5
6
7数据类型[] 数组名 = {元素1, 元素2, 元素3,……};
int[] ages = {12, 24, 36, 68};
double[] scores = {89.9, 79.8, 69.1};
// 完整格式
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3,……};
int[] ages = new int[]{12, 24, 36, 68};注意:
- 什么类型的数组必须存放什么类型的数据。
- “数据类型[] 数组名” 也可以写成 “数据类型 数组名[]”
- 数组是引用数据类型,数组变量名中存储的是数组在内存中的地址信息
数组的访问
- 访问数组的元素:
数组名称[索引] - 访问数组的长度:
数组名称.length - 数组的最大索引:
数组名.length - 1 - 如果访问数组时,使用的索引超过了数组长度执行程序时会出bug,出现一个索引越界的异常提示。
- 访问数组的元素:
数组的遍历
遍历:一个一个的访问一遍容器中的数据。
如何遍历数组:
1
2
3
4int[] ages = {20, 30, 40, 50};
for (int i = 0; i < ages.length; i++){
System.out.println(ages[i]);
}
动态初始化数组
动态初始化数组的写法时什么样的?有什么特点?
1
2数据类型[] 数组名 = new 数据类型[长度];
int[] ages = new int[4];动态初始化数组后元素的默认值:
数据类型 默认值 byte、short、char、int、 long 0 float、double 0.0 boolean false 类、接口、数组、String null 两种数组定义的方法各自适合什么业务场景?
- 动态初始化:适合开始不确定具体元素值,只知道元素个数的业务场景
- 静态初始化:适合一开始就知道要存入那些元素值的业务场景
数组在计算机中的执行原理
- 运行一个Java程序,主要看JVM中包含的哪几部分内存区域?
- 方法区:字节码文件先加载到这里
- 栈内存:方法运行时所进入的内存,变量也是在这里
- 堆内存:new出来的东西会在这块内存中开辟空间并产生地址
int a=20;和int[] arr = new int[3];这两行代码的执行原理?- a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
new int[3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数。- arr是变量,在栈中,arr中存储的数组对象在堆内存中的地址值。
- 多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?
- 多个数组变量中存储的是同一个数组对象的地址。
- 多个变量修改的都是同一数组对象中的数据。
- 如果某个数组变量中存储的null,代表什么意思?需要注意什么?
- 代表这个数组变量没有指向数组对象。
- 可以输出这个变量,但不能用这个数组变量去访问数据或者数组长度。会报空指针异常:NullPointerException。
方法概述
方法:方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用,提高开发效率,使程序逻辑更清晰。
方法的完整结构:
1
2
3
4修饰符 返回值类型 方法名(形参列表){
方法体代码(需要执行的功能代码);
return 返回值;
}如果方法不需要接收数据处理,不需要返回数据,应该怎么办,要注意什么?
- 方法不需要接收数据,则形参列表可以不写;方法不需要返回值,则申明返回值类型为void。
- 方法没有申明返回值类型(void),内部不能使用return返回数据。
- 方法如果没有形参列表,调用的时候则不能传入数值,否则报错。
方法使用时的常见问题
- 方法在类中的位置放前放后无所谓,但一个方法不能定义在另一个方法里面。
- 方法的返回值类型写void时,方法内不能使用return返回数据。如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。
- return语句的下面,不能编写代码,属于无效代码,执行不到这儿。
- 方法不调用就不会执行,调用方法时,传给方法的数据,必须严格匹配方法的参数情况。
- 调用有返回值的方法,有3种方法:
- 可以定义变量接收结果
- 直接输出
- 直接调用
- 调用无返回值的方法:直接调用
方法在计算机中的执行原理
- 方法的运行区域:栈内存
- 栈有什么特点?方法为什么要在栈中运行自己?
- 先进后出
- 保证一个方法调用完另一个方法后,可以回来
Java的参数传递
- Java的参数传递机制是什么样的?
- 值传递。传输的是实参存储的值的副本
- 实参:在方法内部定义的变量
- 形参:以方法为例,就是方法定义时的变量
- 基本类型和引用类型的参数在传递的时候有什么不同?
- 都是值传递
- 基本数据类型的参数传输存储的数据值
- 引用类型的参数传递存储的地址值
方法重载 & return关键字
什么是方法重载?
一个类中,多个方法的名称相同,但他们形参列表不同
方法重载需要注意什么?
- 一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法的重载了,其他的都不管(如:修饰符,返回值类型是否一样都无所谓)。
- 形式列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。
方法重载有啥应用场景?
开发中我们经常需要为处理一类业务,提供多种解决方案,此时用方法重载来设计是很专业的。
在无返回值的方法中。如果要直接跳出并结束当前方法的执行,怎么解决?
- return;跳出并立即结束所在方法的执行
- break;跳出并结束当前所在循环的执行
- continue;结束当前所在循环的当次继续,进入下一次执行