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