【Java 基础】Java 数组、方法极致精讲

在这里插入图片描述

Java 零基础入门到精通专栏持续更新中。通过本专栏你将学习到 Java 从入门进阶再到实战的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。


订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java/大数据/Python/低代码/云原生 等全套视频课程,同时共同探讨问题、携手共进~


一、Java 数组详解

数组是一种数据类型(引用型),它是相同数据元素的集合,也就是说每一个数组中的元素的数据类型必须是相同的。在这里我们对数组的 声明初始化访问遍历复制排序 相关操作进行介绍。

1.1 声明数组

声明数组即定义数组变量,数组必须先经过声明后才能在程序中被使用,声明方式如下:

//声明整型数组a,包含10个元素,每个元素都是int类型,默认值为0
int[] a = new int[10];

//声明浮点型数组b,包含20个元素,每个元素都是double类型,默认值为0.0
double[] b = new double[20];

//声明布尔型数组c,包含30个元素,每个元素都是boolean类型,默认值为false
boolean[] c = new boolean[30];

1.2 初始化数组

数组的初始化其实就是为数组赋值。赋值方式有三种情况。

① 正常声明数组后会默认使用 默认值 为该数组赋值,如 int 型数组 a 如果不进行初始化的话默认赋值为 [0,0,0];

int[] a = new int[3]; //[0,0,0]

② 当数据元素比较少的时候,我们可以直接在声明数组的同时为其赋值,在大括号中输入值并用逗号隔开。但注意这种方式必须是声明的同时赋值,不可分开;

int[] a = {
    
    1,2,3}; //[1,2,3]

③ 声明并赋值还有另一种写法是这样的,保留 new 关键字。与 ② 的区别是此写法可以将声明与赋值分开。

int[] b; //声明
b = new int[]{
    
    1,2,3}; //赋值[1,2,3]

1.3 访问数组

访问数组即如何去使用数组中的元素。当数组被声明和初始化之后,数组名.length 可获取数组长度,数组名[下标] 可获取数组中的某一个元素,下标从 0 开始,“数组名[0]”代表该数组的第一个元素,“数组名[2]”代表该数组的第三个元素。

int[] a = new int[3]; //[0,0,0]

System.out.println(a[0]); //输出数组a第一个元素的值
a[1] = 100; //赋值数组a的第二个元素为100
a[2] = 200; //赋值数组a的第三个元素为300
//a[3] = 300; //运行时会发生数组下标越界异常,
System.out.println(a[a.length-1]); //输出数组a最后一个元素的值

1.4 遍历数组

遍历也叫迭代,就是将数组中的所有元素从头到尾挨个走一遍。遍历需要使用到 for 循环。

int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
    
     //遍历arr数组
    arr[i] = 100; //赋值数组的每一个元素为100
    System.out.println(arr[i]); //输出数组每一个元素的值
}

1.5 复制数组

复制数组的第一种方式是使用 arraycopy 关键字,格式为:

System.arraycopy(源数组,源数组的起始下标,目标数组,目标数组起始下标,要复制的元素个数);

如下,将数组 a(第二个元素开始后面的四个元素)复制到数组 b(第一个元素起始)。

public static void main(String[] args) {
    
    
    int[] a = {
    
    1,2,3,4,5};
    int[] b = new int[6]; //[0,0,0,0,0,0]
    //a 源数组
    //1 源数组的起始下标
    //b 目标数组
    //0 目标数组起始下标
    //4 要复制的元素个数
    System.arraycopy(a,1,b,0,4);

    for(int i=0;i<b.length;i++){
    
    
        System.out.println(b[i]); //[2,3,4,5,0,0]
    }
}

复制数组的第二种方式是使用类 Arrays,格式为:

Arrays.copyOf(源数组,目标数组的长度);

在使用 Arrays 之前需要先引入;

在这里插入图片描述
如下将数组 a 复制到数组 b。注意一下如果目标数组的长度大于原数组,那么多出来元素将会以默认值赋值;如果目标数组的长度小于原数组,那么多余复制的元素将会被截掉。

public static void main(String[] args) {
    
    
    int[] a = {
    
    1,2,3,4,5};
    //a 源数组
    //6 目标数组的长度
    int[] b = Arrays.copyOf(a,6);
    for(int i=0;i< b.length;i++){
    
    
        System.out.println(b[i]); //[1,2,3,4,5,0] 第六个元素为多出来的元素,所以默认为0
    }
}

1.6 排序数组

排序可以说是数组中最为常用的算法。使用 Arrays.sort(数组); 可对数组进行升序排列。如下是对一个包含 10 个随机数的数组升序排列。

public static void main(String[] args) {
    
    
    int[] arr = new int[10];
    for(int i=0;i< arr.length;i++){
    
    
        arr[i] = (int)(Math.random()*100);
        System.out.println(arr[i]);
    }
    Arrays.sort(arr); //对数组升序排列
    System.out.println("升序后的数组为:");
    for(int i=0;i< arr.length;i++){
    
    
        System.out.println(arr[i]);
    }
}

二、Java 方法详解

方法也称函数,用于封装一段特定的业务逻辑功能,减少代码的重复,有利于代码维护。通常在设计方法的过程中应尽量独立,也就是说尽量让它 只做一件事情 即可。

方法最明显的特征就是带 (),我们经常使用的 println()、Math.random()、arraycopy()、sort() 等等都是 Java 已经为我们封装好的方法。

2.1 定义方法

方法的定义一共需要包含包含五个要素:

要素 含义
修饰词 public static
返回值类型 方法可以有返回值,也可以无返回值(依业务需求而定)
● 无返回值设计为 void
● 有返回值时设计为特定的数据类型即可
方法名 方法名的命名规则应见名知义,且使用驼峰命名法
参数列表 参数列表位于方法名后的括号中,格式为:方法名(参数列表)
方法可以无参,也可以有参,但有参可以使方法更加灵活
参数的书写方法和定义变量是一样的,如 int a,String b
方法体 即业务逻辑的实现,{ } 中的代码

方法的标准格式如下:

//标准格式
修饰词 返回值类型 方法名(参数列表){
    
    
    方法体
}

//最常见的标准方法就是主方法main
public static void main(String[] args) {
    
    
    ......
}

在方法的定义过程中,要注意每个方法之间都是 并列关系,主方法 main 是一个方法,我们自己定义的方法也是一个方法,所以自定义方法一定不能放到主方法 main{ } 里面。而当调用自定义方法的时候就需要在 main{ } 中调用了,因为“计算机只认主方法”。

//主方法main
public static void main(String[] args) {
    
    
    say(); //自定义方法在此调用
}
//自定义方法say
public static void say(){
    
    
    System.out.println("大家好,我是敬 之!");
}

2.2 调用方法

方法可以被反复多次调用。针对有返回值和无返回值以及有无参数,调用方式稍有区别:

无参无返回值时,直接 方法名(); 调用;

//主方法main
public static void main(String[] args) {
    
    
    say(); //调用say
}

//自定义方法say(无参无返回值)
public static void say(){
    
    
    System.out.println("大家好,我是敬 之!");
}

有参无返回值时,调用时必须传参,方法名(参数值);

补充:

  • 定义方法时的参数为形参
  • 调用方法时传入的参数为实参
//主方法main
public static void main(String[] args) {
    
    
    Hello("敬 之"); //调用Hello,有参必须传参且参数类型必须匹配
}

//自定义方法hello(有参无返回值)
public static void Hello(String name){
    
     //加入一个String类型的参数name
    System.out.println("大家好,我是"+name+"!");
}

有参无返回值,且多个参数时,方法名(参数值1,参数值2);

//主方法main
public static void main(String[] args) {
    
    
    Hello("敬 之",23); //调用Hello,有参必须传参且参数类型必须匹配,传两个参
}

//自定义方法hello(有参无返回值)
public static void Hello(String name,int age){
    
     //加入一个String类型的参数name和一个int类型的参数age
    System.out.println("大家好,我是"+name+",今年"+age+"岁!");
}

当无参有返回值的时候,方法中必须通过关键字 return 来返回一个数据,而且 return 返回的数据类型必须与返回值类型匹配。调用这种方法时需要声明一个对应类型的变量用于接收此方法。

//主方法main
public static void main(String[] args) {
    
    
    double a = getNum(); //声明一个double型变量来接收
    System.out.println(a); //3.1415
}

//自定义方法getNum(有返回值,返回值数据类型为double)
public static double getNum(){
    
    
    return 3.1415; //return返回一个double型数据。此语句的含义为结束此方法的同时返回3.1415给调用方
}

有参有返回值时调用如下;

//主方法main
public static void main(String[] args) {
    
    
    int add = plus(4,5); //声明一个int型变量来接收
    System.out.println(add); //9
}

//自定义方法plus(有参有返回值)
public static int plus(int a,int b){
    
     //加入两个int型数据a和b
    int num = a+b;
    return num;
}

三、小案例

3.1 找出数组的最大值/最小值

首先声明一个包含 10 个元素的数组,将它们赋值为 0~99 的随机数。我们假设第一个元素为最大值 max,接下来遍历除第一个元素之外的剩余元素,让剩余元素一个一个的与当前设定的最大值 max 进行比较,如果大于 max,则将这个较大的值赋给 max,以此类推,知道将剩余元素全部比较完,最后输出的 max 就是整个数组的最大值。

public static void main(String[] args) {
    
    
    int[] arr = new int[10]; //声明数组arr
    for(int i=0;i<arr.length;i++){
    
     //遍历数组arr
        arr[i] = (int)(Math.random()*100); //为每个元素赋值0-99的随机数
        System.out.println(arr[i]); //输出每个元素的值
    }
    int max = arr[0]; //假设第一个元素为最大值
    for(int i=1;i<arr.length;i++){
    
     //遍历除第一个元素之外的剩余元素
        if(arr[i]>max){
    
     //若剩余元素大于当前的max
            max = arr[i]; //则修改max为那个较大的值
        }
    }
    System.out.println("该数组中的最大值为"+max);
}

程序运行效果如下:

在这里插入图片描述

找最小值同理,相反操作即可。

3.2 创建一个方法,用于生成十个随机数的数组

//主方法main
public static void main(String[] args) {
    
    
    int[] arr1 = testArray(); //定义同类型的新数组arr1用于接收testArray方法传回来的数组
    System.out.println(arr1.length); //输出数组的长度
    System.out.println(arr1[2]); //输出数组的第三个元素
}

//自定义方法testArray(无参有返回值)
public static int[] testArray(){
    
     //返回值类型为int数组
    int[] arr = new int[10];
    for(int i=0;i<arr.length;i++){
    
    
        arr[i] = (int)(Math.random()*100);
    }
    return arr;
}

程序运行效果如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53072519/article/details/129876277