函数
函数是定义在类中的具有特定功能的一小段独立程序,也称为方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2)
{
执行语句;
return返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数,并将返回值返回。
返回值:该值会返回给调用者。
函数的特点:
1.我们定义函数可以将功能代码进行封装,便于对该功能重复调用,函数的出现提高了代码的复用性。
2.函数只有在被调用时才会被执行。
3.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
1.函数中只能调用函数,不可以再在函数内定义函数。
2.我们定义函数时,要考虑将函数的结果返回给调用者,交由调用者去处理。
函数的应用
首先我们要明确将定义的功能最后的结果是什么?
其次要明确在定义该功能的过程中,是否需要未知内容参与运算。
示例:
需求:定义一个功能,可以实现两个整数的加法运算。
分析:
1.该功能的运算结果是什么?两个数的和,也是一个整数(int)
2.在实现该功能的过程中是否有未知内容参与运算?加数和另一个加数是不确定的。(两个参数类型:int,int)
int getSum(int x, int y)
{
return x+y;
}
这样我们便设计了一个加法运算的函数。
函数的重载(overload)
重载是在同一个类中,允许存在一个或者以上的同名函数,只要他们的参数类型或者个数不同即可。
特点:与返回值类型无关,只看参数列表。
好处:方便阅读,优化程序设计。
示例:
int add(int x ,int y ) { return x+y ; }
int add(int x ,int y, int z ) { return x+y+z ; }
double add(double x ,double y) { return x+y ; }
另外,重载不等于重写,重载是对同名函数不同参数类型的复写,而重写是对继承或实现的类中的函数进行重新设计,若自定义的类中继承了一个抽象类或者实现了一个接口,则要重写抽象类或接口的所有抽象方法,否则该类将无法被实例化。
数组
数组是同一种类型数据的集合,其实就是一个容器。
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1:
元素类型[] 数组名= new 元素类型[元素个数或者数组长度];
int[] arr = new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{1,2,3,4};
int[] arr = {1,2,3,7,5};
内存结构:
java程序在运行时,需要在内存中分配空间,而为了提高运算效率,它对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存:用于存储局部变量,当数据使用完,所占空间就会自动释放。
堆内存:用于存储数组和对象,通过new建立的实例都存放在堆内存中。每一个实体都有其内存地址值,实体中的变量都有默认的初始化值。当实体不再被使用时,就会在不确定的时间内被垃圾回收器回收。
另外还有方法区和寄存器。
数组的常见操作
获取最值(最大值,最小值)
public static int getMax(int[] arr) {
int max = arr[0];
for (int i : arr) {
max = (max > i) ? max : i;
}
return max;
}
排序(冒泡排序)
public static void maopao(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
折半查找(二分查找)
public static int binarySearch(int[] arr, int num) {
int max = arr.length - 1, min = 0, mid;
while (min <= max) {
mid = max + min;
if (num > arr[mid])
min = mid + 1;
else if (num < arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
二维数组
格式1:
int[][] arr = new int[3][2];
1.定义了名称为arr的二维数组
2.这个二维数组中有三个一维数组
3.并且每一个一维数组中有两个元素
4.名称分别是arr[0],arr[1],arr[2]
5.我们给第一个一维数组1角标位赋值为78的写法是:arr[0][1] = 78;
格式2:
int[][] arr = new int[3][];
1.这个二维数组中有3个一维数组
2.每个一维数组都是默认初始化值null;
3.可以对这三个一维数组分别进行初始化:
arr[0] = new int[3];
arr[1] = new int[5];
arr[2] = new int[2];
格式3:
int[][] arr = {{3,1,5},{2,7,5},{3,2,6}};
1.定义了一个名称为arr的二维数组
2.二维数组中有三个一维数组
3.每一个一维数组中具体元素都已经初始化。
4.第一个一维数组arr[0] = {3,1,5} 第二个一维数组arr[1] = {2,7,5} 第三个一维数组arr[2] = {3,2,6}
5.取第三个一维数组的长度的表达式为:arr[2].length;
注意特殊写法:
在int[] x,y[]中x是一维数组,y是二维数组。