Java SE :方法与数组
一、方法
1.方法的定义
定义在类中的一段具有特定功能的程序,是类或对象行为特征的抽象,用来完成某个功能操作
- 方法也称作函数或过程
- 将功能封装为方法的目的是,可以实现代码重用,简化代码
- Java里的方法一定要定义在类中
//方法的格式
修饰符 返回值类型 方法名(参数类型 形式参数1, 参数类型 形式参数2, ...)
{
执行语句;
return 返回值;
}
返回值类型为void时,可省略return语句,如果使用,仅用来结束方法
2.方法的特点
- 封装性:定义方法可以将功能代码进行封装
- 便于对该功能多次使用,即提高了代码的复用性
- 方法只有被调用才会执行
- 方法没有具体返回值,返回值类型用关键字void表示,return语句如果在最后一行可以省略
- 方法中只能调用方法,不能再定义一个方法
在构建一个方法时,要明确
在构建一个方法时,要明确最后返回的结果和是否需要未知参数进行运算
3.方法的重载
重载:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或参数类型不同即可重载
- 两个同名方法定义的功能相同
- 重载和返回值类型无关
- 重载只看参数列表,参数列表必须不同(参数个数或参数类型不同)
- 调用时,根据方法参数列表的不同来区别
//两数求和
int add(int x, int y)
{
return x+y;
}
//三数求和,参数列表不同,因此是重载
int add(int x, int y, int z)
{
return x+y+z;
}
4.可变个数的形参
Java SE 5.0中提供了Varargs(variable number of arguments)机制,允许直接定义能和多个实参相匹配的形参,来简便的传递个数可变的实参
//两数求和
int add(int x, int y)
//可变个数形参
int add(int...a)
- 格式:方法名(参数类型…形参名)
- 可变个数形参指形参个数可以是:0,1,或多个
- 可变个数形参的方法与同名方法之间构成重载
- 可变个数形参方法的使用与方法参数部分使用数组是一致的
- 可变个数形参必须放在形参声明的最后
- 一个方法最多只能声明一个可变个数形参
5.方法参数值传递机制
方法参数分为两种
- 形参:方法声明时的参数
- 实参:方法调用时实际传递给形参的参数值
Java的方法参数传递方式为:值传递 - 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
形参变化与实参无关 - 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
形参变化则实参也变化,因为指向的是同一个地址值
二、数组
数组是一种数据结构,存储同一种类型数据的集合
- 数组名,也就是数组的引用位于内存的栈中,这个引用储存的是数组在堆中的地址值
- 数组本体位于内存的堆中
1.一维数组
//格式1
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
//数组名是一个引用数据类型:数组类型
//格式2
元素类型[] 数组名 = new 元素类型[]{元素,元素,…};
元素类型[] 数组名 = {元素,元素,…};
- 使用格式1创建一个数组时,所有的元素被默认初始化
- 数组中第一个元素的角标为0,最后一个元素的角标为数组长度减一
- 获取数组长度/数组中元素个数:数组名.length; //这是数组的一个属性而不是方法
- 数组一创建则长度确定,无法更改(要扩展数组长度的话需要另一种数据结构–数组列表)
- 一个数组可以有多个引用
- java的main函数(public static void main (String[] args) )中定义了一个String类型的数组args
1.1 for each循环
增强for循环:定义了一个变量用于暂存集合中的每一个元素
for(数据类型 元素: 集合名)
执行语句;
这里的集合必须是一个数组或实现Iterable接口的类对象
使用此循环可以很方便地遍历整个集合
以数组为例,代码如下
int[] a = new int{1, 2, 3}
for(int element : a)
System.out.println(element);
1.2 和数组有关的方法
-
Arrays类中的toString方法可以更加简单地打印数组中的所有值,并用中括号和逗号分隔:[1 , 2, 3]
-
Arrays类中的copyOf方法可以将一个数组中的值拷贝至另一个数组
int[] 新数组名 = Arrays.copyOf(需要拷贝的数组名,新数组长度) -
Arrays类中的sort方法可以快速对数值型数组进行排序,使用的是优化的快速排序算法
1.3 数组常见异常
- 数组脚标越界异常(ArrayIndexOutOfBoundsException):访问到数组中不存在的角标时发生
- 空指针异常(NullPointerException):arr引用没有指向实际的一个数组,却在操作数组中的元素时发生
1.4 数组常见操作
- 获取最大值、最小值
- 排序
- 查找(折半查找)
1.5 Arrays工具类
此类为操作数组的工具类,包含了用来操作数组的各种静态方法
- public static boolean equals(int [] a, int[] b) 判断两个数组是否相等
- public static String toString(int[] a)将数组以字符串形式输出
- public void fill(int[] a, int val)将指定值填充到数组中
- public void sort(int[] a)对数组进行排序(快速排序)
- public static int binarySearch(int[] a, int key)对排序后的数组进行二分查找
2.多维数组
多维数组称作“数组的数组”,可以使数组的每一行有不同的长度
//第一种格式:
int[][] arr = new int[3][4];
- 定义了名为arr的二维数组
- 这个二维数组中有3个一维数组
- 每个一维数组中有4个元素
- 一维数组的名称分别是arr[0], arr[1], arr[2]
- 给第2个一维数组1角标位赋值的写法是:arr[1][1] = 3
//第二种格式
int[][] arr = new int[3][];
- 定义了名为arr的二维数组
- 这个二维数组中有3个一维数组
- 每个一维数组默认初始化null
- 可以对这三个一维数组分别初始化:arr[0] = new int [3]; arr[1] = new int [4]; arr[2] = new int [5];
//第三种格式
int[][] arr = {{ 1, 2, 3},{ 4, 5},{ 6, 7}}
arr是一个二维数组的地址
arr[0]是一个一维数组的地址,储存的是指向该一维数组的地址