01、函数的概述
函数:
定义在类中,具有特定功能的一段小程序。
格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.....)
{
执行语句;
return返回值;
}
解释:
修饰符:public static
返回值类型:这段程序最终返回的结果的数据类型。
函数名:其实就是函数的名称,方便调用。
参数:
参数类型:其实就是数据类型。
形式参数:就是接收实际参数的变量。
实际参数:实际参与运算的那个变量。
执行语句:
就是按照正常的逻辑完成的功能代码。
返回值:
就是程序的结果。
return 返回值:
将来在哪里调用这个函数,那么,return就把结果返回到哪里。
02、函数的定义和调用
main是主函数,默认被jvm调用了
写一个函数,用于求两个int类型的数的和。
注意:
A:函数与函数是平级关系,不能嵌套定义。
B:函数只有被调用才执行。
函数的调用:具有明确返回值的函数的调用。
A:单独调用。一般是没有意义的。
事例:sum(x,y);
B:输出调用。因为,我可能还需要对结果进行计算。所以,不够好。
事例: System.out.println(sum(x,y));
C:赋值调用。推荐方式。
首先看函数,返回值类型是什么,我们就应该用什么类型接收。
事例: int sum = sum(x,y);
System.out.println(sum);
03、求两个数中的最大值
用函数来做:
A:先用if--else来做。
B:用条件运算符来做。
总结下:
那个是形参,那个是实参。
04、函数的调用过程图解
在函数中定义的变量,和实际传递过来的没有关系。
A:在main函数中,调用方法sum(x,y);。
B:然后走到sum函数中,将实参传递过来。
C:然后执行函数中的语句。
D:将结果return到main函数中调用sum()函数的地方。
05、函数是什么结束的
函数是怎么开始的?
被JVM虚拟机调用,调到main()函数中,从而来被执行。
函数是怎么结束的?
函数其实是有关键字return让他结束的。
注意:
void类型的函数,其实最后一行,默认有一个return;
06、比较两个int类型的数据是否相等
需求:比较两个int类型的数据是否相等
思路:
A:返回值类型:boolean
B:参数列表:int a,int b
Demo:
方式1:用if--else来做
方式2:用条件运算符来做
方式3:直接 return a==b
07、输出一个长方形的函数
需求:根据给定的行数和列数输出一个*组成的长方形。
思路:
返回值类型:void
参数列表:int row,int col
08、函数重载
在很多时候,我们的功能可能是相同的,但是,参数可能不同,
如果起不同的名字,当然是可以的。
但是,又由于函数的名字 -- 见名知意。
所以,很多时候,我们必须用一个有意义的名字。
在这种情况下,Java就提供了一种机制:函数重载。
特点:
函数名相同,参数列表不同(个数,对应的数据类型)。
与返回值类型无关。
注意:
永远建议,写的什么类型的形式参数,你就应该用什么类型的实际参数调用。
如果实际类型是小的,形式类型是大的,可以这样写,程序不报错。反之不行。
09、数组的概述
数据类型:
基本类型:4类8种
引用类型:类,接口,数组
数组:就是存储多个同一种数据类型元素的容器。
好处:
可以自动给数组中的元素从0开始编号(索引),方便操作这些数据。
格式:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
事例: int[] arr = new int[10];
左边:
int:表示数据的类型。
[]:表示这是一个数组。
arr:数组的名字。
右边:
new:申请内存空间。
int:表示数据的类型。
[]:表示这是一个数组。
10:数组的长度。
我要获取第一个元素,怎么办?
通过索引获取,格式:数组名[索引]
10、数组的内存图解
Java中对内存分五块:
栈:变量,或者方法的执行
堆:所有new出来的
方法区:方法,String常量池,静态区(面向对象讲)
本地方法区:跟系统相关的方法。
寄存器:由CPU执行。
堆:new建立的实例都存放在堆内存中
1、每一个new出来的东西都有地址值。
本身是一个十进制,显示的时候是一个16进制的数据。
2、每一个实例中的内存都有默认值。
整数:0,浮点数:0.0;
字符型:'\u000',布尔型:false
3、会在不确定的时间内被垃圾回收器回收。
栈:当数据使用完毕(超出了它的作用域),它就自动从内存中消失。
局部变量:
定义在方法中或者方法声明上的形式参数都叫局部变量。
11、数组的定义方式
方式1:
数据类型[] 变量名 = new 数据类型[个数或者长度];
方式2:
数据类型[] 变量名 = new 数据类型[]{元素1,元素2,元素3....};
方式3:
数据类型[] 变量名 = {元素1,元素2,元素3....};
12、数组的常见问题
先用Demo演示,后画图做讲解。
A:数组越界异常。你访问了不存在的索引。
ArrayIndexOutOfBoundsException
B:空指针异常。一个实例(对象)已经不存在了,你还去访问它的内容。
NullPointerException
把一个null赋值给一个引用类型数据,其实就是让这个引用类型的变量,不再指向堆内存的数据,这样的话,原本指向的内容就是垃圾了。
13、多个数组指向同一个实例
先用Demo演示,后画图做讲解。
两个引用变量指向同一个堆内存空间。
int[] arr = {1,2,3};
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
int[] arr1 = arr;
arr1[1] = 10;
System.out.println(arr[1]); //10
System.out.println(arr1[2]); //3
14、数组操作:遍历
把数据存储起来就是为了使用,而要使用数组中的数据,就必须通过索引。
数组遍历:获取数组中的所有元素。
如果数组太长,我们没办法一个个的去数,为此,Java提供了一个属性:length
格式:
数组名.length
例题:写功能(函数)完成数组的遍历。
15、数组操作:获取最值
获取数组中的最大值。
思路:
1、需要进行比较,并定义变量。记录住每次比较后较大的值。
2、对数组中的元素进行遍历取出,和变量中记录的元素进行比较,
如果遍历到的元素大于变量中记录的元素,就用变量记录住该大的值。
3、遍历结束,该变量记录的就是最大值。
16、数组操作:基本查找
根据给定的值,去找它在数组中的位置(索引)。
17、二维数组概述及内存图
索引的别名:角标,下标,编号。建议叫索引。
二维数组:
每一个元素其实是一个一维数组。
格式:
int[][] arr = new int[3][2];
解释:
定义了名称为arr的二维数组,
二维数组中有3个一维数组,
每一个一维数组中有2个元素,
一维数组的名称为别为:arr[0],arr[1],arr[2]
给第一个一维数组的索引为1的元素赋值,写法是:
arr[0][0] = 10;
18、二维数组的定义格式:
方式1:
int[][] arr = new int[3][2];
规则的矩形。
方式2:
int[][] arr = new int[3][];
非规则的矩形。
解释:
二维数组中有三个一维数组,
每个一维数组都是默认初始化值null,
可以对这三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
方式3:
int[][] arr = {1,4,3},{9,3,7,5},{2,1};
19、二维数组的遍历
思路:
A:二维数组的每一个元素是一维数组
获取到每一个一维数组。
B:一维数组的遍历我们讲过了。
arr.length:获取二维数组的长度,其实也就是一维数组的个数。
arr[x].length:获取的是每一个一维数组的长度。
arr[x][y]:获取的是二维数组的元素。
20、二维数组的应用
某个商场,每个月都有销售额。每个季度也有销售额,年终还得有销售额。
例题:
已知某个商场每月的销售额,求该商场每个季度的销售额以及年终销售额。
|