Java 数组、方法的定义和使用

一、Java 数组,方法学习思维导图

图1

 二、数组

数组是用一个标识符(变量名)和一组下标来代表的一组具有相同数据类型的数据元素的集合。这些数据元素在计算机中存储中占用一片连续的存储空间,其中每个数组元素在数组中的位置是固定的,可以通过下标的编号加以区别,可以通过标识符和下标访问每一个数组元素。

在 Java 中,数组是一个特殊的对象,属于引用类型,数组中元素序号从 0 开始,通过下标操作符引用

1、一维数组

(1)一维数组声明:确定数组名 + 数组维度 + 数组元素数据类型

元素的数据类型:Java 中基本数据类型(如 int、char、double等)、引用数据类型(如类(class)、接口(interface)等)。

一维数组定义格式:数据类型 数组名[ ] ;   或   数据类型[ ] 数组名 ;

int arr[] ;//声明一个名为 arr 的整型数组
double[] dArray ;//声明一个名为 dArray 的浮点型双精度数组

(2)一维数组初始化

数组是引用数据类型,要在使用前先初始化再使用,否则会 NullPointerException (运行时异常 RunTimeException )。Java 数组的初始化可以直接指定初值或者用 new 运算符的方式实现。

动态初始化——声明并且开辟空间

数据类型[ ] 数组名称 = new 数据类型 [长度] ;

  • 数组通过下标索引来取得元素,下标默认从0开始。
  • 数组下标超出数组长度,报数组越界异常(运行时异常)。
  • 数组中每个元素都有默认值,默认值是该数据类型默认值。
  • 数组名称.length -> 取得数组长度。 
int arr = new int[3] ;//用 new 初始化 数组 arr ,数组长度为 3 

 注:Java 数据类型有默认初始值:整型默认值为 0 ;浮点型默认值为 0.0 ;布尔型默认值为 false ;字符型默认值 \u0000 。

静态初始化——直接指定初值

简化格式:数据类型[ ] 数组名称 = {值,值,...}  ;

完整格式(推荐使用,方便使用匿名数组):数据类型[ ] 数组名称 = new 数据类型{值,值,...} ;

  • 在数组定义时直接设置内容,根据值的个数确定数组长度,且长度不可修改。
  • 匿名数组:没有任何栈内存指向的数组。
int[ ]  data = new int{1,2,3,4} ;//静态初始化完整格式

(3)for-each 循环

JDK1.5 提供 for-each 循环。

for-each 循环适用于数组遍历,仅仅限于数组内容的读取,要修改数组内容还是使用常规的 for 循环。

for(int x : data){
    System.out.print(x+" ") ;
} 

2、二维数组

动态初始化:数据类型[ ][ ] 数组名称 = new 数据类型[行个数][列个数] ;

int[ ][ ] data = new int[3][4] ;

静态初始化:数据类型[ ][ ] 对象数组 = new 数据类型[ ][ ]{ {值,值,...}, {值,值,...}, ...} ;

int[][] data = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}} ;

 3、数组实用类 Arrays

在 java.util 包中,有一个用于操作数组的实用类——java.util.Arrays。它提供了一种静态方法完成数组的常用操作。

int binarySearch(type[ ] a, type key):用于查找 key 元素在 a 数组中出现的索引。如果数组中不包含 key 元素值,返回 -1 。调用该方法时,要求数组中元素已经按升序排列。

  • 给数组赋值:通过fill方法。

  • 对数组排序:通过sort方法,按升序。

  • 比较数组:通过equals方法比较数组中元素值是否相等。

  • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

e.g  java.util.Arrays.sort(数组名称) ;  此方法支持所有基本数据类型,内部使用双轴快速排序。

具体使用教程:Arrays

三、方法

1、方法定义及声明

Java中方法的定义(前提:直接在主方法中调用的方法):一段可以被重复调用的代码块。可以与 C语言 中函数类比。

方法声明:

public static 方法返回值 方法名称([参数类型 变量...]){
   
    ...

    方法体代码 ;//方法体包含具体的语句,定义该方法的功能。

    ...

    return 返回值 ;//如果有返回值

}

举例: 

public class Test1{
    public static void main(String[] args){
        System.out.println(add(5,5));
    }
    public static int add(int x,int y){
        return x+y;
    }
}

 一般方法具体教程:Java 方法

2、方法重载

(1)方法重载定义:方法名称相同,参数的个数、顺序、类型不同,与方法返回值无关。

(2)编码规范:重载函数的返回值类型一定保持相同。

public class Test{
    public static void main(String[] args) {
        System.out.println(add(5,5));
        System.out.println(add(5,5,55));
    }
    public static int add(int x,int y){
        return x+y;
    }
    public static int add(int x,int y,int z){
        return x+y+z;
    }
}

根据传递参数的个数调用的方法不同。 

3、方法递归

定义:指的是一个方法自己调用自己的方式。递归方法的特点:

  • 方法必须有递归的结束条件
  •  方法在每次递归处理的时候一定要作出一些变更
public class Test{//递归实现从1到100的叠加
    public static void main(String[] args) {
        System.out.println(sum(100));
    }
    public static int sum(int num){
        if (num == 1) {
        return 1;
        }
        else {
            return num+sum(num-1);
        }
    }
}

四、数组与方法互操作

(1)方法接收数组

public class ArrayDemo{
    public static void main(String[] args) {
        int[] data = new int[] {1,2,3,4,5} ;
        printArray(data) ; // 其效果等价于 int[] temp = data ;
    }
    public static void printArray(int[] temp) {
        for (int i = 0 ; i<temp.length ; i++) {
        System.out.println(temp[i]) ;
        }
    }
}

(2)方法返回数组

public class ArrayDemo{
    public static void main(String[] args) {
        int[] data = init() ;
        printArray(data) ;
    }
    // 定义一个返回数组的方法
    public static int[] init(){
        return new int[] {1,2,3,4,5} ; // 匿名数组
    }
    public static void printArray(int[] temp) {
        for (int i = 0 ; i<temp.length ; i++) {
        System.out.println(temp[i]) ;
        }
    }
}

现在的数组上发生了引用传递,那么就意味着方法在接收数组后也可以修改数组。

(3)方法修改数组

public class ArrayDemo{
    public static void main(String[] args) {
        int[] data = init() ;
        bigger(data) ;
        printArray(data) ;
    }
    // 定义一个返回数组的方法
    public static int[] init(){
        return new int[] {1,2,3,4,5} ; // 匿名数组
    }
    // 将数组中每个元素的值扩大5倍
    public static void bigger(int[] arr){
        for (int i =0 ; i<arr.length ; i++) {
        arr[i]*=5 ; // 每个元素扩大5倍
       }
    }
    public static void printArray(int[] temp) {
        for (int i = 0 ; i<temp.length ; i++) {
        System.out.println(temp[i]) ;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值