Java 方法
Java中,方法(Method)是用于封装一组执行特定任务的代码块的结构。方法允许您将代码分成更小的、可重用的单元,以提高代码的可维护性和可读性。
**方法的定义:**方法的定义可以包含修饰符(可选),方法名、返回类型和参数列表。方法名是方法的唯一标识符,返回类型指定方法执行后返回的数据类型,参数列表包含方法接收的输入参数。
修饰符 返回类型 方法名(参数列表){
//方法体,包含要执行的代码
// 可以执行各种操作
}
- 修饰符:包括访问修饰符(public、protected、default、private)和非访问修饰符(static、final)
- **返回类型:**指定方法返回的数据类型。如果方法不返回任何值,可以使用
void
- **方法名:**指定方法的名称,用于调用该方法。
- **参数列表:**定义方法接收的参数,可以是零个或多个参数
**方法的类型:**Java中,方法(Method)可以根据其功能和用途划分多种类型,以下是一些常见的Java方法类型:
-
**实例方法(Instance Methods):**实例方法时属于类的实例(对象)的方法。它们可以访问和操作实例变量,并且必须通过对象来调用。大多数方法都属于这个类型。
public class MyClass{ public void printInfo(){ // 实例方法的实现 } public static void main(Sting[] args){ MyClass obj = new MyClass(); obj.printInfo(); //调用实例方法 } }
-
静态方法(Static Methods): 静态方法时属于类本身的方法,不依赖于类的实例。它们可以通过类名直接调用,无需创建类的实例。
public class MyClassOne{ public static void staticMethod() { // 静态方法的实现 } public static void main(String[] args){ staticMethod(); // 类内部调用 } } public class MyClassTwo{ public static void staticMethod() { // 静态方法的实现 } public static void main(String[] args){ MyClassOne.staticMethod(); // 其他类调用,直接使用类名.方法名() } }
-
**构造方法(Constructor):**构造方法是一种特殊类型的方法,用于初始化类的实例。它们与类同名,并且没有返回值。在创建类的实例时,构造方法被自动调用。
public class MyClass{ public MyClass(){ // 构造方法的实现 } MyClass obj = new MyClass(); // 创建类的实例时调用构造方法 }
-
**抽象方法(Abstract Methods):**抽象方法时一种没有实现体的方法,通常声明在抽象类或接口中。子类必须提供具体的实现。
public abstract void abstractMethod(); // 抽象方法的声明
-
**final方法(Final Methods):**final方法是不允许子类重写的方法。它们被视为最终实现,不能被修改。
public final void finalMethod() { // final 方法的实现 }
-
**同步方法(Synchronized Methods):**同步方法使用
synchronized
关键字修饰,用于实现多线程同步。只能一个线程访问同步方法的代码块。public synchronized void synchronizedMethod() { // 同步方法的实现 }
-
泛型方法(Generic Methods): 泛型方法允许您在方法中使用泛型类型。这使得方法更加灵活,能够处理不同类型的数据 。
public <T> T genericMethod(T value) { // 泛型方法的实现 return value; }
-
**可变参数方法(Varags Methods):**可变参数方法允许方法接收可变数量的参数,这些参数被封装成数组。
public void varargssMethod(String... values){ // 可变参数方法的实现 }
**方法的返回值:**方法可以返回一个值,也可以不返回任何值(使用void
关键字)。如果方法有返回值,必须使用return
语句将结果返回。
int add(int num1, int num2) {
return num1 + num2
}
void printMessage() {
System.out.println("Hello,Word!")
}
在上午示例中,add
方法返回整数值,而printMessage
方法没有返回值。
方法的重载(Overloadding): java允许在同一个类中定义多个方法具有相同的名称,但参数列表不同的方法,这被称为方法的重载。重载使您可以根据参数的不同来调用哪个方法。
int add(int num1, int num2) {
return num1 + num2
}
double add(double num1, double num2) {
return num1 + num2
}
上述示例中定义了两个名为add
的方法,一个接收整数参数,另一个接收双精度浮点类型参数
**方法的参数传递方式:**Java中,方法的参数传递方式是值传递(Pass-by-Value),这意味着将参数的副本传递给方法,而不是原始参数本身。这个概念可能会导致一些混淆,因为在方法内部对参数的修改不会影响到原始参数的值。
- **值传递(Pass-by-Value):**当您调用方法时,将实际参数的副本传递给方法。这意味着在方法内部对参数的任何更改都不会影响到原始参数的值。这是因为参数的副本在栈内存中分配,而不是直接操作原始数据在堆内存中的位置
- **基本类型数据参数传递:**当您将基本数据类型(如整数、浮点数、字符等)作为参数传递给方法时,传递的是值的副本。任何对参数的修改都不会影响原始变量的值。
- **引用数据类型的参数传递:**当您将引用数据类型(如对象、数组等)作为参数传递给方法时,传递的是引用的副本,而不是对象本身。这意味着在方法内部,您可以修改对象的属性,但不能修复对象引用指向的实际对象。
Java 数组
Java中,数组是一种用于存储多个相同类型数据的数据结构。
**数组的声明和创建:**在Java中,数组的声明包括指定数组的数据类型和数组的名称,但不分配内存。要分配内存并创建数组,需要使用new
运算符。
// 声明一个整数数组
int[] numbers;
// 创建一个包含5个整数的数组
numbers = new int[5];
// 将声明和创建并在一起
int [] numbers = new int[5];
**数组的初始化:**数组可以在声明的同时进行初始化,也可以在之后初始化。初始化可以是静态的,也可以是动态的。
// 静态初始化
int [] numbers = {1,2,3,4,5} // 创建并初始化一个整数数组
// 动态初始化
int [] numbers = new int[5]; // 创建一个整数数组
numbers[0] = 1; // 初始化数组元素
numbers[1] = 2;
**数据组的类型:**Java中,有多种类的数组,可以根据不同的需求和数据类型选择适当数组类型。
-
**一维数组(One-Dimensional Array):**一维数组是最简单的数组类型,包含单一维度的元素。例如,
int [] numbers
表示一个整数类型的一维数组。 -
**多维数组(Multi-Dimensional Array):**多维数组是包含多个维度的数组,通常表示为数组的数组。例如,
int[][] matrix
表示一个整数类型的二维数组,int[][][] cube
表示一个整数类型的三位数组。 -
**动态数组(Dynamic Array):**Java中的动态数组是通过
java.util.ArrayList
或java.util.LinkedList
等类实现的。这些数据结构允许在运行时动态添加和删除元素,而不需要预先指定数组的大小。ArrayList<Integer> dynamicArray = new ArrayList<Integer>(); dynamicArray.add(1); // 添加元素 dynamicArray.remove(0); // 移除元素
-
**字符串数组(String Array):**字符串数组是用于存储字符串的数组。例如,
String[] names
表示一个字符串类型的数组。 -
**对象数组(Object Array):**对象数组用于存储任意类型的对象。例如
Object[] objects
可以存储任何类型的对象。 -
**泛型数组(Generic Array):**使用泛型类创建具有泛型类型的数组。例如,
ArrayList<String>[] arrayOfLists
表示一个包含字符串列表的数组。 -
**字符数组(Character Array):**字符数组用于存储字符类型的数据。例如,
char [] chars
表示一个字符类型的数组。 -
**布尔数组(Boolean Array):**布尔数组用于存储布尔值(
true
或false
)。例如,boolean[] flags
表示一个布尔类型的数组。 -
**字节数组(Byte Array):**字节数组用于存储字节数据。例如,
byte[] data
表示一个字节数组。 -
**短整数数组(Short Array)、整数数组(Integer Array)、长整数数组(Long Array)和浮点数数组(Float Array):**这些数组用于存储不同类型的数字数据。
**访问数组元素:**数组元素的访问使用索引来实现,索引从0开始,直到数组长度减1.
int firstNumber = numbers[0]; // 访问第一个元素
int thirdNumber = numbers[2]; // 访问第三个元素
**数组的长度:**可以使用数组的length
属性来获取数组的长度。
int [] numbers = {1,2,3,4,5};
int length = numbers.length; // 获取数组长度,结果为5
**多维数组:**Java支持多维数组,例如二维数组、三维数组等。多维数组是数组的数组。
int[][] matrix = new int[3][3]; // 声明并创建一个3*3的二维数组
matrix[0][0] = 1; // 设置元素的值
**数组的遍历:**使用循环结构(例如for
循环)可以遍历数组的所有元素。
int [] numbers = {1,2,3,4,5};
for (int i = 0; i < numbers.length; i++){
System.out.printLn(numbers[i])
}
**数组的复制和拷贝:**可以使用System.arraycopu()
方法或数组复制语法来复制数组,或者使用Arrays.copyOf()
方法来创建数组的副本。
int [] source = {1,2,3}
int [] target = new int[source.length]
System.arraycopy(source, 0, target, 0, source.length)
**数组的排序:**Java提供了排序算法,可以对数组进行排序。常见的排序方法包括快速排序、归并排序和Arrays类的sort()
方法。
int[] numbers = {5,2,9,1,5}
Arrays.sort(numbers); // 对数组进行排序
Arrays工具类:java.util.Arrays
类是java标准库的一个工具类,用于提供有关数组的各种方法,包括数组的排序、查找、比较等操作。Arrays
类中方法都是静态方法,因此不需要创建Arrays
类的实例,可以直接通过类名调用这些方法。
- 排序方法:
sort(array)
:对数组进行升序排序。sort(array, comparator)
:使用指定的比较器对数组进行排序。parallelSort(array)
:并行排序数组,可提高排序性能。
- 搜索方法:
binarySearch(array, key)
:在已排序的数组中使用二分查找来查找指定的元素。binarySearch(array, key, comparator)
:在已排序的数组中使用指定的比较器进行二分查找。
- 数组填充方法:
fill(array,value)
:将数组的所有元素设置为指定的值。fill(array, fromIndex, toIndex, value)
:将数组的指定范围内的元素配置为指定的值。
- 数组复制方法:
copyOf(array, length)
:将数组的一部分复制到一个新数组中,并指定新数组的长度。copyOfRange(array, fromIndex, toIndex)
:将数组的指定范围复制到一个新数组中
- 数组比较方法:
equals(array1, array2)
:比较两个数组是否相等(元素相等且顺序相同)。deepEquals(array1, array2)
:深度比较两个多维数组是否相等(递归比较元素)。
- 数组转换方法:
toString(array)
:将数组转换为字符串形式。asList(array)
:将数组转换为List集合
- 数据范围查找方法:
indexOf(array, key)
:在数组查找指定元素的第一个出现位置。lastIndexOf(array, key)
:在数组中查找指定元素的最后一个出现位置。
- 其他方法:
hashCode(array)
:计算数组的哈希码。stream(array)
:将数组转换为流以支持流式操作。