当前位置: 首页 > article >正文

JavaSE05|数组的定义与使用

文章目录

  • JavaSE05|**数组的定义与使用**
    • 1.数据基本概念
    • **2.** **数组是引用类型**
    • **3.** **数组的应用场景**

JavaSE05|数组的定义与使用

1.数据基本概念

定义:可以看成是相同类型元素的一个集合

1.1数组初始化

动态初始化:在创建数组时,直接指定数组中元素的个数

int[] array = new int[10];

静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = new String[]{"hell", "Java", "!!!"};

注意:

静态初始化可以简写,省去后面的new T[]

如果没有对数组进行初始化,数组中元素有其默认值

在这里插入图片描述

如果数组中存储元素类型为引用类型,默认值为null

1.2数组的使用

数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。

注意:

  1. 数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素
  2. 下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。抛出了 java.lang.ArrayIndexOutOfBoundsException 异常

1.3遍历数组

方式1:循环

int[]array = new int[]{10, 20, 30, 40, 50};
for(int i = 0; i < array.length; i++){ 
    System.out.println(array[i]); 
}

方式2:for-each

int[] array = {1, 2, 3}; 
for (int x : array) { 
    System.out.println(x);
}

for-each 是 for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错.

2. 数组是引用类型

2.1 初始JVM的内存分布

基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;

而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。
在这里插入图片描述

2.3null

null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用.

null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操

作. 一旦尝试读写, 就会抛出 NullPointerException

注意:Java中并没有约定null0号地址的内存有任何关联

3. 数组的应用场景

3.1保存数据

public static void main(String[] args) { 
    int[] array = {1, 2, 3};
    for(int i = 0; i < array.length; ++i)
    { System.out.println(array[i] + " "); 
                                         
    } 
}

3.2作为函数的参数

  1. 参数传基本数据类型
public static void main(String[] args) { 
    int num = 0; 
    func(num); 
    System.out.println("num = " + num);
}
public static void func(int x) {
    x = 10; 
    System.out.println("x = " + x); 
}// 执行结果 x = 10 num = 0

发现在func方法中修改形参 x 的值, 不影响实参的 num 值.

2.参数传数组类型**(引用数据类型)**

public static void main(String[] args) {
    int[] arr = {1, 2, 3}; 
    func(arr); 
    System.out.println("arr[0] = " + arr[0]);
}
public static void func(int[] a) {
    a[0] = 10; 
    System.out.println("a[0] = " + a[0]); 
}// 执行结果 a[0] = 10 arr[0] = 10

发现在func方法内部修改数组的内容, 方法外部的数组内容也发生改变.

因为数组是引用类型,按照引用类型来进行传递,是可以修改其中存放的内容的。

总结: 所谓的 “引用” 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).

3.3 作为函数的返回值

比如:获取斐波那契数列的前N项

public class TestArray {
public static int[] fib(int n){ 
    if(n <= 0){
        return null; 
    }
    int[] array = new int[n];
    array[0] = array[1] = 1;
    for(int i = 2; i < n; ++i){
        array[i] = array[i-1] + array[i-2];
    }
    return array; 
}
public static void main(String[] args) { 
    int[] array = fib(10);
    for (int i = 0; i < array.length; i++) { 
        System.out.println(array[i]);
    } 
}
}

http://www.kler.cn/a/13559.html

相关文章:

  • Spring5学习总结(三)JdbcTemplate实现数据库增删改查操作JdbcTemplate实现批量增删改操作
  • SAPJNet:小样本多序列MRI诊断的序列自适应原型联合网络
  • RB-PEG-MAL,罗丹明-聚乙二醇-马来酰亚胺;Rhodamine PEG Maleimide;RB-PEG2000-MAL
  • SpringBoot中使用redis事务
  • User Diverse Preference Modeling by Multimodal Attentive Metric Learning
  • Cmake使用
  • ChatGPT已死?AutoGPT太强?
  • 学术领域-英文
  • MIMO-OFDM系统中信道估计的快速谐波搜索技术(Matlab代码实现)
  • Python数据结构与算法-RAS算法(p96)
  • Mysql列的类型定义(日期和时间类型)
  • 【LeetCode】102.二叉树的层序遍历
  • 幽灵空白节点
  • Oracle学习笔记
  • ChatGPT | 申请与使用new bing的实用教程
  • java 26
  • Python从入门到精通8天(装饰器的基本使用)
  • FFmpeg命令行解析
  • 最重要的 JVM 参数总结
  • 【软考数据库】第二章 程序语言基础知识