Java方法与数组学习整理

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.ArrayListjava.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):**布尔数组用于存储布尔值(truefalse)。例如,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类的实例,可以直接通过类名调用这些方法。

  • 排序方法:
    1. sort(array):对数组进行升序排序。
    2. sort(array, comparator):使用指定的比较器对数组进行排序。
    3. parallelSort(array):并行排序数组,可提高排序性能。
  • 搜索方法:
    1. binarySearch(array, key):在已排序的数组中使用二分查找来查找指定的元素。
    2. binarySearch(array, key, comparator):在已排序的数组中使用指定的比较器进行二分查找。
  • 数组填充方法:
    1. fill(array,value):将数组的所有元素设置为指定的值。
    2. fill(array, fromIndex, toIndex, value):将数组的指定范围内的元素配置为指定的值。
  • 数组复制方法:
    1. copyOf(array, length):将数组的一部分复制到一个新数组中,并指定新数组的长度。
    2. copyOfRange(array, fromIndex, toIndex):将数组的指定范围复制到一个新数组中
  • 数组比较方法:
    1. equals(array1, array2):比较两个数组是否相等(元素相等且顺序相同)。
    2. deepEquals(array1, array2):深度比较两个多维数组是否相等(递归比较元素)。
  • 数组转换方法:
    1. toString(array):将数组转换为字符串形式。
    2. asList(array):将数组转换为List集合
  • 数据范围查找方法:
    1. indexOf(array, key):在数组查找指定元素的第一个出现位置。
    2. lastIndexOf(array, key):在数组中查找指定元素的最后一个出现位置。
  • 其他方法:
    1. hashCode(array):计算数组的哈希码。
    2. stream(array):将数组转换为流以支持流式操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值