Java基础之方法和数组
Opened this issue · 0 comments
方法
方法,也叫函数,它是完成特定功能的代码块。一个方法就是一个功能、一个动作或一种行为。
当一些代码被反复使用时,可以把它们提取出来,放到一个方法中,以方法的形式来使用这些代码,大大提高代码的复用性。
方法的格式如下:
修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2...) {
// 方法体语句;
return 返回值;
}
那么如何来定义一个方法呢?
- 确定方法名
- 确定返回值类型
- 确定参数列表
public class MethodDemo {
public static void main(String[] args) {
}
/**
求两个整数和的方法
*/
public static sum(int a, int b) {
// 方法体语句
int c = a + b;
return c;
}
}
方法定义完成后就要调用它,直接通过方法名就可以调用方法,除此之外,还需要根据形式参数列表将实际参数传递给方法
- 形式参数: 在定义方法时需要明确方法参数的形式,比如参数的类型和个数
- 实际参数: 调用方法时传递给方法的数据,必须符合形式参数的个数和对应位置的数据类型
public class MethodDemo {
public static void main(String[] args) {
/**
在main函数中调用方法
*/
int result = sum(10, 20);
System.out.println(result);
}
/**
求两个整数和的方法
*/
public static sum(int a, int b) {
// 方法体语句
int c = a + b;
return c;
}
}
方法定义需要注意以下几点要求:
- 方法必须定义在类中
- 方法之间是平级关系,不能嵌套
- 如果方法没有返回值,其返回值类型必须写成
void
- 当方法返回值类型为
void
时,可以省略return
语句 return
语句后的数据类型必须和返回值类型匹配return
语句之后不能再放置其他语句
下面来看看在Java
中非常重要的方法重载
方法重载是指在同一个类中的多个方法,它们的方法名相同,参数列表不同,且方法重载与返回值类型无关。
- 参数列表不同
参数个数不同,对应位置的参数类型不同 - 方法签名
方法名 + 参数列表
那为什么我们需要方法重载呢? 当实现的功能相同,但具体的实现方式不同时,我们可以通过定义名称相同、参数(条件)不同的方法,来更好的识别和管理类中的方法。
public static int sum(int a, int b) {
return a + b;
}
public static long sum(long a, long b) {
return a + b;
}
public static double sum(double a, float b, int c) {
return a + b + c;
}
数组
数组就是用来存储同一种数据类型的多个元素的容器,这里的数据类型可以是基本类型,也可以是引用类型
在Java
中,定义数组的格式有三种:
-
数据类型[] 数组名 = new 数据类型[长度]
数据类型即数组中存储元素的数据类型,可以是基本类型或引用类型
[]
表示是数组new
创建数组的关键字,通过new
开辟内存空间长度表示数组中最多能存储元素的个数,注意:数组长度在定义时指定,以后不可更改
int[] arr = new int(3);
-
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
这种定义数组的格式,在定义时元素是确定的,避免了内存空间的浪费
int[] arr2 = new int[]{1, 2, 3};
-
数据类型[] 数组名 = {元素1, 元素2, 元素3, ...};
这是上一种形式的一个简写
int[] arr3 = {1, 2, 3};
那么我们如何访问数据中的元素呢?
一般我们通过数组的索引来访问数组的元素,索引,也叫下标,或者脚标,是数组元素起始位置的偏移量,第一个元素的偏移量为0,所以数组的索引是从0开始的。
取值:数组名[索引]
赋值:数组名[索引] = 值
int[] arr = {11, 22, 33};
arr[0] = 10; // 10 通过索引操作数组中的元素值
数组最常见的操作就是遍历数组元素,遍历数组需要知道以下知识点:
- 数组的长度可以通过:
数组名.length
来获取 - 数组的最大索引为数组长度 - 1
- 数组中未手动赋值的元素,如果定义为
int
,则默认值0 - 若直接输出数组变量名,得到的是数组在内存中的地址值
下面来看下数组的相关知识点:
数组的初始化:它其实就是在内存中为数组开辟连续空间并为每个元素赋值的过程,连续空间就是数组元素在内存空间中的存放位置是连续的。
在Java
中,数组的初始化分为两种,一种是动态初始化,也就是指定数据长度,由系统给出默认值
- 整型数组:默认值为0
- 浮点型数组:默认值为0.0
- 字符型数组:默认值为
\u0000
(空字符) - 布尔型数组:默认值为
false
- 引用类型:默认值为
null
另外一种就是静态初始化,由开发者给出初始化值,系统决定数组长度。
Java的内存分配
Java
的内存分配分为以下几个区域:
- 方法区:它用来存储可运行的
class
文件,包含方法、静态成员、常量等。 - 栈:方法运行时使用的内存,特点是"先进后出",即最先入栈的方法最后出栈。
- 堆:存储
new
出来的数组或对象 - 本地方法栈:
JVM
在调用操作系统功能时使用,与开发无关 - 寄存器:CPU使用,与开发无关
数组类型:变量arr
存储的是数组在堆空间中的地址值,而不是数组元素的值,变量arr
通过内存地址引用堆内存中的数组,所以数组是引用类型。
数组的常见操作
先来看下数组使用中两个常见的问题
-
数组索引越界异常:
ArrayIndexOutOfBoundsException
当访问了不存在的索引时会触发上面的异常
-
空指针异常:
NullPointerException
数组引用存储的值为
null
而非数组的地址值时