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


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

    • 一、Java 数组详解
      • 1.1 声明数组
      • 1.2 初始化数组
      • 1.3 访问数组
      • 1.4 遍历数组
      • 1.5 复制数组
      • 1.6 排序数组
    • 二、Java 方法详解
      • 2.1 定义方法
      • 2.2 调用方法
    • 三、小案例
      • 3.1 找出数组的最大值/最小值
      • 3.2 创建一个方法,用于生成十个随机数的数组

一、Java 数组详解

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

1.1 声明数组

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

//声明整型数组a,包含10个元素,每个元素都是int类型,默认值为0int[] a = new int[10];//声明浮点型数组b,包含20个元素,每个元素都是double类型,默认值为0.0double[] b = new double[20];//声明布尔型数组c,包含30个元素,每个元素都是boolean类型,默认值为falseboolean[] 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的第二个元素为100a[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
方法体即业务逻辑的实现,{ } 中的代码

方法的标准格式如下:

//标准格式修饰词 返回值类型 方法名(参数列表){    方法体}//最常见的标准方法就是主方法mainpublic static void main(String[] args) {    ......}

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

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

2.2 调用方法

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

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

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

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

补充:

  • 定义方法时的参数为形参
  • 调用方法时传入的参数为实参
//主方法mainpublic static void main(String[] args) {    Hello("敬 之"); //调用Hello,有参必须传参且参数类型必须匹配}//自定义方法hello(有参无返回值)public static void Hello(String name){ //加入一个String类型的参数name    System.out.println("大家好,我是"+name+"!");}

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

//主方法mainpublic 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 返回的数据类型必须与返回值类型匹配。调用这种方法时需要声明一个对应类型的变量用于接收此方法。

//主方法mainpublic 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给调用方}

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

//主方法mainpublic 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 创建一个方法,用于生成十个随机数的数组

//主方法mainpublic 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;}

程序运行效果如下: