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]是一个一维数组的地址,储存的是指向该一维数组的地址

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值