----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
函数和数组
1、函数
* 定义:函数就是定义在类中的具有特定功能的一段独立小程序;
如果一段代码在多个地方使用, 可以将代码定义为函数.使用名字调用函数即可,提高了代码的复用性;
函数也称为方法。
格式:修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...){
执行语句;
return 返回值;
}
返回值类型:函数运行后的结果的数据类型;
参数类型:是形式参数的数据类型;
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数;
实际参数:传递给形式参数的具体数值;
return:用于结束函数;
返回值:该函数运算后的结果,该结果会返回给调用者;
* 特点:定义函数可以将功能代码进行封装;
便于对该功能进行复用;
函数只有被调用才会被执行;
函数的出现提高了代码的复用性;
函数无返回值,返回值类型用关键字void表示,函数中的return语句,
可以省略不写,但是加上return表示结束当前函数;如果在return
之后还有语句就执行不到,java虚拟机也会报错;
* 注意:函数中只能调用函数,不可以在函数内部定义函数;
定义函数时,函数的结果应该返回给调用者,交由调用者处理;
函数只为实现他所需功能,不要实现不需要的功能;
输出语句只能对有返回值类型的函数调用后打印,不能对没有返回值类
型的函数(void)进行打印;
学习了函数后,再写代码,就不要将代码都放在main函数里,main函数的作
用,用于调用你定义的函数,并测试该功能是否可用;
2、函数的重载
* 概念
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
* 特点:
与返回值类型无关,只看参数列表。参数个数和参数类型
* 好处:
方便于阅读,优化了程序设计。
3.数组
* 概念
同一种类型数据的集合。其实数组就是一个容器。
* 好处
可以自动给数组中的元素从0开始编号,对数据进行存储,方便我们遍历这个数组,和使用其中任意一个元素
* 格式1:
元素类型[] 数组名= new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];其中所有元素默认值都为0;
这种格式叫动态初始化:只指定数组长度,由系统为数组元素分配初始值;
格式2:
元素类型[] 数组名= new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};可以在任何情况使用;
int[] arr = {3,5,1,7}; (可以看成上面的简写形式)这种方式只能在给数组类型变量赋值时使用;
这种格式叫静态初始化:显式指定每个数组元素的初始值,由系统决定数组长度;
* 使用数组(示例):
1,声明数组 int[] arr;
2,分配空间 arr = new int[5];
3,赋值 arr[0] = 5;
4,处理数据 arr[0] = arr[0]*10;
* 内存结构
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,又对空间进行了不同
区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式;
栈内存:(stack)
用于存储局部变量,当数据使用完,所占空间会自动释放;
堆内存:(heap)
数组和对象,通过new建立的实例都存放在堆内存中;
每一个实体都有内存地址值;
实体中的变量都有默认初始化值;
int--->0; double--->0.0; boolean--->false; char----->'\u0000';
实体不在被使用,会在不确定的时间内被垃圾回收器回收,释放堆内存;
* 数组知识点:
数组只有一个名称,即标识符
数组中每一个元素都能通过下标来访问
数组角标:从0开始
数组长度:变量名.length,数组的长度是固定的,因为它的底层是public和final修饰
数组最大角标值:length-1 数组长度固定,避免角标越界
数组动态初始化:int[] arr = new int[5];
数组静态初始化:int[] arr = {1,2,3,4};
数组定义的注意事项:
1,数组定义时,必须明确元素的类型。
2,数组定义时,必须明确元素的个数。
* 什么时候使用数组?
当要操作的同种数据类型的变量较多时,需要将这些数据进行存储,这时就需要用到容器,
而数组就是容器中的一种.
如何使用数组?
存在数组中的数据是有索引的,从0开始递增,我们通过数组名和索引就可以操作其中每一个元素。
System.out.println(arr[0]); // 打印数组中索引为0的元素
arr[1] = 100; // 给数组中索引为1的元素赋值为100
数组的长度:数组可以使用length属性获取其长度;
遍历数组:由于数组可以通过索引获取每一个元素,又可以通过length获取长度,那么我们就可以定
义循环来遍历数组中的每一个元素;
* 常见错误:
1、int[] arr = new int[]; //没有注明数组大小
2、int[] arr = new int[5];
System.out.println(arr[5]); //ArrayIndexOutOfBoundsException数组下标越界
访问到了数组中不存在的角标。但是编译可以通过。因为,new运行的时候,
只是在运行的时候才建立数组,编译时只进行语法检查,编译只能检查出语法错误
new只有在运行的时候才在堆内存开辟一块内存空间,并分配0,1,2,3,4,这5个角标,
换个角度说编译的时候就这个数组已经把堆内存的空间占用,如果不运行会造成空间的浪费
3、int[] arr; //创建数组并赋值的方式,必须在一条语句中完成。
arr = {1,2,3,4};
4、int[] arr = null; //arr不指向任何实体
System.out.println(arr[0]); //NullPointerException 空指针异常
4、数组中的数组(二维数组[][])
* 格式1:int[][] arr = new int[3][2];
定义二维数组arr,二维数组中有3个一维数组
每一个一维数组中有2个元素,一维数组的名称分别为arr[0], arr[1], arr[2]
给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
* 格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组,每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
* 格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
定义二维数组arr,其中有三个一维数组,每一个一维数组中元素都已初始化
其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.
* 格式4:int[][] arr = new int[][] {{3,8,2},{2,7},{9,0,1,6}};
定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.
5、与数组操作相关函数:
Arrays.toString() 查找帮助文档Arrays类,学习使用此方法将字符串转为字符串形式。
将一个数组转为字符串表示形式
System.arraycopy() 查找帮助文档System类,学习使用此方法拷贝数组中元素。
将一个数组中的某些元素拷贝到另一个数组的指定位置