3.1 数组概述
在编程世界中,我们往往需要处理多个相同类型的数据。例如,我们可能需要处理一整个班级的学生的分数,或者一个集团公司所有员工的工资。在这种情况下,使用单独的变量会很麻烦,因为我们需要为每个学生或员工创建一个变量。为了解决这个问题,我们可以使用数组。
数组是一种存储多个相同类型数据的集合。在Java语言中,数组是一种特殊的对象,可以存储固定数量的同类型的元素。
3.2 一维数组
3.2.1 一维数组的声明
一维数组的声明和其他变量的声明类似,我们需要指定数组的数据类型,后面跟上数组的名称,然后是一对方括号。例如,我们可以声明一个整数数组如下:
int[] scores;
在上面这个例子中,int
是数组元素的数据类型,scores
是数组的名称。
3.2.2 一维数组的创建
在Java中,我们使用new
关键字创建数组。以下是创建并初始化一个整数数组的示例:
int[] scores = new int[30];
在上面的代码中,我们不仅声明了一个名为scores
的整数数组,而且使用new
运算符创建了一个能够存储30个整数的数组。这个数组的所有元素都被初始化为0。
3.2.3 一维数组的使用
我们可以使用数组下标来访问数组的元素,数组下标是从0开始的。以下是一些使用一维数组的例子:
// 创建一个有5个元素的整数数组
int[] numbers = new int[5];
// 给数组的第一个元素赋值为10
numbers[0] = 10;
// 读取数组的第一个元素的值
int firstNumber = numbers[0];
// 获取数组的长度
int length = numbers.length;
3.2.4 一维数组的内存分配
在Java中,一维数组被分配在堆内存中。当我们使用new
关键字创建数组时,Java虚拟机会在堆内存中找到足够的空间来存储数组的所有元素,并将这块空间的地址赋给数组变量。因此,数组可以被认为是引用类型。
3.3 多维数组
3.3.1 多维数组的声明
多维数组的声明规则和一维数组类似,只是在数组名后面的方括号中写两个或多个方括号表示多维度。以下是一个二维数组的声明:
int[][] matrix;
在上面的声明中,matrix
是一个二维数组的名称,int
是数组元素的数据类型。
3.3.2 多维数组的创建
我们可以使用new
关键字创建多维数组。以下是一个3行4列的二维数组的创建例子:
int[][] matrix = new int[3][4];
3.3.3 多维数组的使用
我们可以使用数组下标来访问和修改多维数组的元素。以下是使用二维数组的一些示例:
// 创建一个3行4列的二维数组
int[][] matrix = new int[3][4];
// 给第一行第一列的元素赋值为10
matrix[0][0] = 10;
// 读取第一行第一列的元素的值
int firstElement = matrix[0][0];
// 获取数组的行数
int rowCount = matrix.length;
// 获取第一行的列数
int columnCount = matrix[0].length;
3.3.4 多维数组的内存分配
针对二维数组,Java会在堆内存中为数组的每一行单独分配空间,并将每行的地址存储在数组的对应元素中。因此,二维数组实际上是一个"数组的数组"。
3.4不规则数组
Java支持不规则数组,也就是每行的列数可以不同。具体来说,当我们创建二维数组时,只需要指定数组的行数,然后对于每一行自由决定其列数。以下是一个不规则数组的示例:
int[][] irregularArray = new int[3][];
irregularArray[0] = new int[3];
irregularArray[1] = new int[2];
irregularArray[2] = new int[5];
在上面的示例中,我们创建了一个不规则的二维数组,该数组的第一行有3列,第二行有2列,第三行有5列。
4.1 面向对象程序设计概述
面向对象程序设计(OOP)是一种编程范式,其中程序被结构化为互相交互的对象。每个对象都是类(class)的实例,具有一组属性(fields)和一组操作这些属性的方法(methods)。面向对象编程提供了一种更自然的方式来理解和组织复杂的代码。
4.2 类
4.2.1 属性概述
属性是类的一部分,用于描述类的状态。比如,可以定义一个“汽车”类,其属性可能包括品牌、颜色、型号等。
4.2.2 方法概述
方法是类定义中的函数,用于操作类的属性。对于汽车类,可能会有一个驾驶的方法,这个方法可能会改变汽车的位置属性。
4.2.3 创建类
在Java中,定义一个类的基本语法如下:
public class Car {
// 属性
String brand;
String color;
// 方法
void drive() {
//...
}
}
4.2.4 类图
类图是一种图形化表示类及其之间关系的工具。类图中,每个类由一个包含类名、属性和方法的矩形表示。
4.3 对象
4.3.1 对象的创建
对象是类的实例。在Java中,我们使用new
关键字和构造函数创建一个对象:
Car myCar = new Car();
4.3.2 对象的使用
我们可以通过“点”操作符访问对象的属性和方法:
// 访问属性
String brand = myCar.brand;
// 调用方法
myCar.drive();
4.3.3 构造方法
构造方法是一种特殊的方法,用于初始化新创建的对象。它的名称必须与类名相同:
public class Car {
// 属性
String brand;
// 构造方法
public Car(String brand) {
this.brand = brand;
}
}
4.3.4 对象的内存分配
在Java中,所有对象都在堆内存空间分配。当对象不再被引用时,它将被Java的垃圾收集器回收。
4.4 变量
4.4.1 局部变量
局部变量是在方法内部定义的变量,只在该方法的内部可见。
4.4.2 实例变量
实例变量是在类内部但在方法外部定义的变量,对类的所有实例都可见。
4.4.3 类变量
类变量也称为静态变量,使用static
关键字定义,无论类有多少实例,这些实例共享相同的类变量。
4.5 方法
4.5.1 实例方法和‘this’
实例方法是在类定义中的方法,它们操作的是实例的状态。在实例方法里,我们可以使用this
关键字引用当前实例。
4.5.2 类方法
类方法也称为静态方法,使用static
关键字定义,它们只能访问静态变量和调用静态方法。
4.5.3 传递参数
方法可以接受参数,这些参数可以被看作是在方法内部定义的局部变量。
4.5.4 方法重载
方法重载是Java中的一种特性,允许在同一类中定义多个有相同名字但参数列表不同的方法。
4.5.5 方法的返回
方法可能会返回一个值。return
语句用于从方法返回并指定返回值。
4.6 匿名代码块
匿名代码块是在类中定义的没有名字的代码块,它在实例被创建时执行,属于初始化的一部分。匿名代码块可以访问类的所有元素,在类的构造方法被调用之前执行。