1. 函数概述
定义: 定义在类中的一小段具有特定功能的程序.
可以提高代码的复用性和维护性。
格式:
修饰符 返回值类型(没有写void) 方法名(参数类型1 形式参数1, 参数类型2 形式参数2,...)
{
// 方法体
// return 语句
}
特点:
1) 函数是平级关系.不能嵌套.
2) 函数只有被调用才会执行.
调用方法:
1) 单独调用.
如果有返回值.一般情况直接调用是没有意义的.
如果没有返回值呢? 那就只能单独调用了.
2) 输出调用.
3) 赋值调用.
方法是什么类型返回值就用什么类型接收.(不要忽略隐式转换的问题)
定义方法是明确思路:
1) 明确返回值类型
2) 明确参数列表
练习:两个int数中的最大值
结束方式:
关键字return让方法结束的.
返回值类型是void 的方法, return语句可以省略.
练习:
请编写一个函数完成比较两个int类型数据是否相等的功能
明确返回值类型 : boolean
明确参数列表 : int a, int b
注意事项:
测试的时候,每种可能都要测到,并且要考虑非法数据的情况.
函数重载:
是在一个类中,方法名相同,但参数列表不同(包括个数或者类型), 与返回值类型无关.
2 . 数组
定义: 存储多个同一种数据类型的元素的容器.
好处: 元素会具备索引,方便操作.
特点:
1) 可以存储基本数据类型, 也可以存储引用数据类型.
2) 一个只能存放同一种数据类型.
3) 数组的长度固定.
格式:
元素类型[] 数组名 = new 元素类型[长度];
直接打印数组: 看到数组在内存中的地址值的十六进制表示形式.
获取元素格式:
数组名[索引]
3. 内存
栈:
局部变量
特点:使用完毕自动消失.
堆:
new 建立的实例
都有默认值:
整形 : 0
浮点型 : 0.0
字符型 : '\u0000' (空字符'')
boolean : false
引用数据类型 : null
会在变成垃圾后(没用引用指向),被垃圾回收器不定时的回收.
4. 数组的定义方式
以int数组为例:
int[] arr1 = new int[5];
int[] arr2 = {1,5,8,9,7};
int[] arr3 = new int[]{1,2,3,4};
左边[]位置不同的方式,理解:
int arr[] = new int[5];
数组操作的常见问题:
A:数组越界异常。你访问了不存在的索引。
ArrayIndexOutOfBoundsException
B:空指针异常。一个实例(对象)已经不存在了,你还去访问它的内容。
NullPointerException
5. 数组常见操作
1) 遍历
for (int x = 0; x < arr.length; x++)
{
System.out.println(arr[x]);
}
2) 数组操作之获取最值
思路:
1) 定义变量,记录每次比较后较大的值.
2) 遍历数组,拿到每个元素,与变量记录的值进行比较,如果发现遍历到的值更大,就把这个值赋给变量.
3) 遍历结束,变量就是记录的最大值.
public static int getMax(int[] arr)
{
int maxValue = arr[0];
for (int x = 1; x < arr.length; x++)
{
if (arr[x] > maxValue)
{
maxValue = arr[x];
}
}
return maxValue;
}
补充:
1) 数组长度可以为0.
例如: int[] arr = new int[0]; // 这样定义是可以的.
2) 数组是引用数据类型,所以其默认值是null.
由此引出,上述查找最值的方法其实是存在问题的.(程序的健壮性)
1) 如果传递一个长度为0的数组进去,会在拿第一个值时,出现索引越界.
2) int[] arr = null; 将此数组传递进去,会出现空指针异常.
此问题将来学习了异常处理机制可以解决.
目前,如果想避免,请保证传递非空数组的参数.
或者换一种思考问题的方式: 我不找数组的最值了, 我找数组最值的索引. 能找到索引了, 最值不就也找到了吗.
那么此时对传递的非法参数,就可以返回-1来处理了.
函数如下:
public static int getMaxIndex(int[] arr)
{
// 为了程序的健壮性, 先对参数进行判断
if (arr == null || arr.length == 0) // 如果数组为null 或者 数组长度为0
{
// 返回-1
return -1;
}
// 数组参数没问题,我再进行遍历查找
int maxIndex = 0; // 定义变量记录最大值的索引.
for (int x = 1; x < arr.length; x++)
{
if (arr[x] > arr[maxIndex]) // 找到比记录的索引上的值更大的元素
{
// 将最大值索引记录成找到的
maxIndex = x;
}
}
// 遍历结束, maxIndex记录的就是最大的值的索引,返回该索引
return maxIndex;
}
对于此函数的调用,就可以对结果进行判断,而且方法不再报出异常.
3) 基本查找
思路:
1)变量数组,拿每一个元素与想找的值进行比较,一旦匹配,返回该值索引.
2)遍历结束,如果没有,返回-1.
6. 二维数组
定义格式1: 数据类型[][] 变量名 = new 数据类型[n][m];
定义格式2: 数据类型[][] 变量名 = new 数据类型[n][];
再对每一个一维数组进行初始化
定义格式3: 数据类型[][] 变量名 = { {1,2},{3,4,5} ,{6,7,8,9} ,{0} };
遍历二维数组的思路:
外循环遍历二维数组,得到每一个一维数组,内循环遍历一维数组.
注意事项:
数组的长度不要数.通过数组的length属性获取.
重点:
1 函数的定义和调用掌握
2 函数的概述,执行流程,结束条件等理解即可.
3 函数的重载(面试题)
4 数组概述,内存图解理解
5 数组的定义和使用(遍历,求最值,普通查找) 掌握.
6 二维数组所有理解即可.
|
|