Java——数组的定义与使用「建议收藏」

Java——数组的定义与使用「建议收藏」目录1.数组2.数组初始化2.1动态初始化(声明并开辟数组)2.2引用传递的内存分析2.3静态初始化(开辟同时赋值)3.二维数组4.数组与方法互操作5.Java对数组的支持5.1排序:5.2拷贝6.对象数组6.1动态初始化1.数组一组相关类型的变量集合缺点:长度固定,存在越界问题2.数组初始化 2.1动态初始化…

大家好,又见面了,我是你们的朋友全栈君。

目录

1.数组

2.数组初始化

2.1 动态初始化(声明并开辟数组)

2.2 引用传递的内存分析

2.3 静态初始化(开辟同时赋值)

3.二维数组

4.数组与方法互操作

5.Java对数组的支持 

5.1 排序:

5.2 拷贝

6.对象数组

6.1动态初始化


 

1.数组

一组相关类型的变量集合

  • 缺点:长度固定,存在越界问题

2.数组初始化

  • 2.1 动态初始化(声明并开辟数组)

 数据类型[] 数组名称 = new 数据类型 [长度] ;
  1. 数组下标(从0开始)超出数组长度,数组越界异常(运行时异常)
  2. 数组中每个元素都有默认值,默认值是该数据类型默认值
  3. 数组名称.length(属性):取得数组长度
  • 数组的默认值:
/**
 * 数组动态初始化
 * Author: qqy
 */
public class Test {
    public static void main(String[] args) {
        //基本类型实例化后,在该内存空间的值就是默认值
        int[] data = new int[5];
        print(data);

        //编译通过,运行发生空指针异常——NPE
        int[] b=null;
        print(b);

        //引用类型默认值为null
        String[] a=new String[9];
        print(a);
    }

    public static void print(String[] i){
        //i.length——length是属性
        for(int j=0;j<i.length;j++){
            System.out.println(i[j]);
        }
    }
}

Java——数组的定义与使用「建议收藏」

  • 2.2 引用传递的内存分析

同一块堆内存空间可以被不同的栈内存所指向

  • 2.2.1 数组的空间开辟
public class Test1 {
    public static void main(String[] args) {
        int[] x = null;
        x = new int[3];
        x[0] = 10;
        x[1] = 20;
        x[2] = 30;
        x = null;
    }
}

Java——数组的定义与使用「建议收藏」

  • 2.2.2 引用传递

public class Test1 {
    public static void main(String[] args) {
        int[] x = null;
        x = new int[3];
        x[0] = 10;
        x[1] = 20;
        x[2] = 30;
        //引用传递
        int[] y=x;
        y[1]=25;
    }
}

Java——数组的定义与使用「建议收藏」

  • 2.3 静态初始化(开辟同时赋值)

//简化格式
数据类型[] 数组名称 = {值,值,....} 
//完整格式
数据类型[] 数组名称 = new 数据类型[] {值,值,....}
  • 匿名数组:在栈内存中没有任何引用,只在堆内存开辟空间,存放数据
public class ArrayTest{
	public static void main(String [] args){
		System.out.println(new int[]{1,2,3}.length);
	}

练习(数组的拼接):

public class ArrayTest {
    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3};
        int[] b = new int[]{4, 5, 6, 7, 8};
        //动态初始化
        int[] c = new int[a.length + b.length];
        for (int i = 0; i < a.length; i++) {
            c[i] = a[i];
        }
        for (int i = a.length; i < c.length; i++) {
            c[i] = b[i - a.length];
        }
        for (int i = 0; i < c.length; i++) {
            System.out.print(c[i] + " ");
        }
    }
}

Java——数组的定义与使用「建议收藏」

3.二维数组

数组的数组

  • 二维数组中,a.length表示行数,a[i].length表示第i行的列数
  • 动态初始化时,多维数组的行数不可省略,列数可省略
/**
 * 二维数组动态初始化
 * Author: qqy
 */
public class Test3{
    public static void main(String[] args) {
        int[][] arr=new int[3][];  //-> arr=int[3][]{null,null,null}
        //如果没有下面三行,则会出现空指针异常
        arr[0]=new int[6];  //int[6]={0,0,0,0,0,0}  -> arr=int[3][]{int[6]{0,0,0,0,0,0},null,null}
        arr[1]=new int[6];
        arr[2]=new int[6];
        arr[0][1]=2;        //arr=int[3][]{int[6]{0,2,0,0,0,0},null,null}  (假设没有第12.13行)
        arr[1][3]=5;
        arr[2][5]=8;
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                System.out.print(arr[i][j]+"  ");
            }
            System.out.println();
        }
    }
}
  • 动态初始化:
public class ArrayTest {
    public static void main(String[] args) {
        //动态初始化
        int[][] a = new int[2][3];
        a[0][0] = 2;
        a[1][2] = 5;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

Java——数组的定义与使用「建议收藏」

  • 静态初始化:
public class ArrayTest {
    public static void main(String[] args) {
        int[][] a = new int[][]{
  
  {1, 2}, {3, 5, 6, 4, 1}, {8, 9, 7}};
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

Java——数组的定义与使用「建议收藏」

疑问:

为什么动态初始化会出现默认值0,而静态初始化不会???

解答:

动态初始化:建立相应的空间,并附上默认值,再赋值时,是将默认值更改为新赋的值。

静态初始化:建立空间同时赋值,赋多少值,开辟多少空间。

4.数组与方法互操作

给一个方法中传入数组类型,在引用传递的情况下,如果新数组对值进行改变,则原数组的值也随之改变。

  • 扩展数组值:
public class ArrayExpend {
    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3, 4};
        System.out.println("数组a:");
        arrayPrint(a);

        int[] result1 = arrayExpend(a);
        System.out.println("扩展结果:");
        arrayPrint(result1);
        System.out.println("after数组a:");
        arrayPrint(a);

        int[] result2 = arrayExpend2(a);
        System.out.println("扩展结果:");
        arrayPrint(result2);
        System.out.println("after数组a:");
        arrayPrint(a);
    }

    public static int[] arrayExpend(int[] a) {
        if (a == null) {
            return new int[]{};
        }
        //数组引用传递
        int[] temp = a;
        for (int i = 0; i < a.length; i++) {
            temp[i] = temp[i] * 5;
        }
        return temp;
    }

    public static int[] arrayExpend2(int[] a) {
        if (a == null) {
            return new int[]{};
        }
        //空间重新分配
        int[] temp = new int[a.length];
        for (int i = 0; i < a.length; i++) {
            temp[i] = a[i] * 4;
        }
        return temp;
    }

    public static void arrayPrint(int[] c) {
        if (c == null) {
            return;
        }
        for (int j = 0; j < c.length; j++) {
            System.out.print(c[j] + " ");
        }
        System.out.println();
    }
}

Java——数组的定义与使用「建议收藏」

5.Java对数组的支持 

  • 5.1 排序:

    • 数字升序排序
java.util.Arrays.sort(arrayName) ;
import java.util.Arrays;

public class ArrayUtil {
    public static void main(String[] args) {
        int[] a = new int[]{1, 33, 5, 44, 76};//1,5,33,44,76
        System.out.println("排序之前:");
        arrayPrint(a);
        Arrays.sort(a);
        System.out.println("排序之后:");
        //改变原数组
        arrayPrint(a);
    }

    public static void arrayPrint(int[] c) {
        if (c == null) {
            return;
        }
        for (int j = 0; j < c.length; j++) {
            System.out.print(c[j] + " ");
        }
        System.out.println();
    }
}

Java——数组的定义与使用「建议收藏」

  • 5.2 拷贝

方法一:将指定源数组中的数组从指定位置复制到目标数组的指定位置。

java.lang.System.arraycopy(Object src,int srcPos,Object dest, int destPos,int length);
public class ArrayUtil {
    //拷贝
    public static void main(String[] args) {
        int[] src = new int[]{1, 2, 3, 4, 5, 6, 7, 8};
        int[] dest = new int[3];
        arrayPrint(src);
        arrayPrint(dest);
        //方法一
        // for(int i=2;i<5;i++){
        // dest[i-2]=src[i];
        // }
        //方法二
        System.arraycopy(src, 2, dest, 0, 3);
        arrayPrint(src);
        arrayPrint(dest);
    }

    public static void arrayPrint(int[] c) {
        if (c == null) {
            return;
        }
        for (int j = 0; j < c.length; j++) {
            System.out.print(c[j] + " ");
        }
        System.out.println();
    }
}

Java——数组的定义与使用「建议收藏」

方法二:复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度。

java.util.Arrays.copyOf(源数组名称,新数组长度)
import java.util.Arrays;

public class ArrayUtil {
    public static void main(String[] args) {
        int[] src = new int[]{1, 2, 3, 4, 5, 6, 7, 8};
        arrayPrint(src);
        int[] dest1 = Arrays.copyOf(src, 7);
        //Arrays.copyOf不改变原数组
        arrayPrint(src);
        arrayPrint(dest1);
        int[] dest2 = Arrays.copyOf(src, 10);
        arrayPrint(dest2);
    }

    public static void arrayPrint(int[] c) {
        if (c == null) {
            return;
        }
        for (int j = 0; j < c.length; j++) {
            System.out.print(c[j] + " ");
        }
        System.out.println();
    }
}

Java——数组的定义与使用「建议收藏」

6.对象数组

对象数组往往是以引用数据类型为主的定义,例如:类、接口。 

存放引用数据类型——通过类来创建的对象

  • 6.1初始化

//动态初始化
类名称[] 对象数组名称 = new 类名称[长度];

//静态初始化
类名称[] 对象数组名称 = new 类名称[] {};
public class ArrayOfObjects {
    //类方法
    public static void printArray(Person[] persons) {
        for (int i = 0; i < persons.length; i++) {
            System.out.println(persons[i]);
        }
    }

    public static void main(String[] args) {
        Person person = new Person(1, "唐僧");//email=null; phone=null;
        System.out.println(person);//person.toString(); ——继承自Object

        String s = "Bonjour";  //引用类型
        System.out.println(s);  //s.toString(); ——继承

        //动态初始化
        Person[] persons = new Person[3];
        persons[0] = new Person(1, "Jack");
        persons[1] = new Person(2, "Tom", "tom@gmail.com");
        persons[2] = new Person(3, "Alice", "alice@gmail.com", "15265478955");
        ArrayOfObjects.printArray(persons);

        //静态初始化
        Person[] persons2 = new Person[]{
                new Person(4, "Tony")
        };
        ArrayOfObjects.printArray(persons2);
    }
}

class Person {
    private int id;
    private String name;
    private String email;
    private String phone;

    //构造方法
    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public Person(int id, String name, String email) {
        this(id, name);
        this.email = email;
    }

    public Person(int id, String name, String email, String phone) {
        this(id, name, email);
        this.phone = phone;
    }

    //getter方法
    public int getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }

    public String getEmail() {
        return this.email;
    }

    public String getPhone() {
        return this.phone;
    }

    //setter方法
    public void setEmail(String email) {
        this.email = email;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String toString() {
        return " 编号:" + this.id + " 姓名:" + this.name + " 邮箱:" + this.email + " 电话:" + this.phone;
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142781.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月22日 下午11:40
下一篇 2022年5月23日 上午6:00


相关推荐

  • 在Vs Code中搭建JSP开发环境

    在Vs Code中搭建JSP开发环境如何在 VisualStudio 中搭建 JSP 网页的开发环境准备 VisualStudio 和 Java 开发环境 VsCode 的安装不再赘述首先需要在 vscode 中搭建好 Java 的开发环境 安装 java 环境的扩展插件下载 jdk 建议使用 jdk11 若有梯子可以上官网下载 没有的话建议去清华大学的镜像站下载下载好之后将 JDK 的环境变量配置好 配置 JDK 的环境变量网上已经有大量资料 不再赘述 特别提醒系统变量中必须要有一个叫 JAVA

    2026年3月26日
    2
  • MBUS协议_协议解析

    MBUS协议_协议解析来自于我的163博客,一篇好好的技术文章,在163上居然提示不能显示,我2014年6月25日就翻译出来了,当时很多其他博客都是直接拷贝我的文章都能在网上发布。看了许多关于MBus协议的资料,感觉说的不具体、不完整、也不系统,本人准备结合一个具体的产品实现,从理论和实现上对MBus协议做一个详细的论述,如有不当之处,欢迎讨论。1介绍MBus(MeterB…

    2022年10月16日
    4
  • python自动化运维脚本范例

    python自动化运维脚本范例

    2021年6月9日
    98
  • 车载以太网拓扑分析

    车载以太网拓扑分析车载以太网系统 拓扑分析车载以太网成本分析的一个很重要的层面就是拓扑结构 拓扑结构的不同则会大大影响着我们现阶段的硬件设备的设计包括 线束布线 收发器芯片 连接器 交换机 以及滤波器等 也会影响到软件 SW 的复杂程度 交换机是网络优化的主要因素 交换机增添了组建网络拓扑的灵活性 因此需要仔细考虑交换机在网络中所处的位置 基于车载以太网的 P2P 的交换网络 全双工的工作模式 常规通信 CAN 的总

    2026年3月16日
    2
  • java后台发送及接收json数据

    java后台发送及接收json数据本篇博客试用于编写 java 后台接口以及两个项目之间的接口对接功能 具体的内容如下 1 java 后台给指定接口发送 json 数据 packagecom utils importjava io BufferedRead importjava io InputStreamR importjava io OutputStream importjava

    2026年3月16日
    3
  • Pyqt5界面设计之pycharm配置QtDesigner

    Pyqt5界面设计之pycharm配置QtDesigner安装 pyqt5 的时候 pycharm 已经安装好了 qtDesigner 但是默认的配置往往无法启动成功 第一步 复制 designer exe 路径 第二步 配置 designer 路径第三步 复制 pyuic5 exe 路径第四部 配置 pyuic5 exe 路径第五步 复制 pyrcc5 exe 路径第六步 配置 pyrcc5 路径

    2026年3月27日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号