返回顶部
首页 > 资讯 > 后端开发 > Python >Java基础之不简单的数组
  • 137
分享到

Java基础之不简单的数组

2024-04-02 19:04:59 137人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录引言数组也是一种类型数组特点数组的声明和初始化1.静态初始化2.动态初始化数组和内存总结引言 相信有过编程基础的小伙伴都知道数组这个数据结构,它应该也是我们第一个接触的数据结构,

引言

相信有过编程基础的小伙伴都知道数组这个数据结构,它应该也是我们第一个接触的数据结构,学过C或者c++的应该知道数组和指针紧密相关,那么在java里没有了指针,java里的数组又有哪些不同的特点呢?下面就来介绍一下java里的数组;

数组也是一种类型

数组里面的数组元素都是唯一的,这个大家应该都知道,但是因为java是面向对象语言,类与类之间又有继承关系(C++中同样拥有),所以有时候会出现一个数组里面出现多种数据类型的情况,其实归根结底,数组元素的类型就是一个,就是那个父类;

在java中,其实数组也是一种数据类型,数组的父类是Object,数组本身是一种引用类型(基本类型如int,char ,double等)

就比如在java里定义数组的一种方式 :int[] ,这是定义了一个整型的数组,不能把它分开来看,就把int[] 当成一种数据类型,这样我们用该类型创建的对象就是数组,所以int[] 是一种引用类型;

在下面的数组学习中一定要把数组当成引用类型来看,更有助于理解,不要带着C或者C++的数组来思考;

数组特点

下面就简单规整一些数组的几个特点:

  1. 数组是一组数据的集合
  2. 数组作为一种引用类型
  3. 数组元素的类型可以是基本类型(基本类型数组),也可以是引用类型(引用类型数组),但同一个数组只能是同一种类型
  4. 数组作为对象,数组中的元素作为对象的属性,而且数组包括一个成员属性 length,length 表示数组的长度
  5. 数组的长度在数组对象创建后就确定了,就无法再修改
  6. 数组元素是有下标的,下标从 0 开始,也就是第一个元素的下标为 0,依次类推最后一个元素的下标为 n-1,我们可以通过数组的下标来访问数组的元素

数组的声明和初始化

java其实支持两种语法声明数组:


type[] myArray;
type myArray[];

对于这两种方法,这里就不多介绍了,只是让大家了解一下,但是,我们需要记住并且使用的只用一种方法,就是第一种,不管是可读性还是对数组的理解,第一种都是完胜第二种的,可能刚学过C或者C++的都会看第二种更亲切些,从现在开始,就不要再想第二种了;(C#已经不支持第二种语法,并且越来越多语言不再支持该语法);

数组是一种引用类型的变量,所以当它声名一个变量时,就只是定义了一个引用变量(也就是指针),学过C或者C++的小伙伴一定知道,当一个指针定义出来时并没有指向任何有效的内存空间,这里也是一样,这个引用变量也是没有指向任何有效空间,所以这时候的数组不能使用,需要进行初始化操作;
ps:学过C或者C++的话可以将引用变量和指针相互联系思考,学起来会更加轻松;

下面看看数组初始化操作,初始化其实就是给数组的元素分配内存空间(类似C、C++中的动态内存分配),并且为每个数组元素赋值;
数组初始化有两种方式:

1.静态初始化

初始化时由你自己来显式的指定每个数组元素的初始值,由系统来决定数组长度;

格式如下:


type[] myArray;
myArray = new type[] {element1, element2, element3, element4};

或者


type[] myArray = {element1, element2, element3, element4};

测试代码:


public class MyArrayTest02 {
    public static void main (String[] args) {
        //静态初始化数组01
        int[] arr;
        arr = new int[] {0, 1, 2, 3, 4};
        //foreach循环
        for (int i : arr) {
            System.out.println(i);
        }

        //静态初始化数组02
        Object[] objarr;
        objarr = new String[] {"I", " love", " coding!"};
        //foreach循环
        for (Object str : objarr) {
            System.out.print(str);
        }
        System.out.print("\n");
    }
}

public class MyArrayTest03 {
    public static void main (String[] args) {
        //静态初始化数组简化版01
        int[] arr = {0, 1, 2, 3, 4};
        //foreach循环
        for (int i : arr) {
            System.out.println(i);
        }

        //静态初始化数组02
        Object[] objarr = {"I", " love", " coding!"};
        //foreach循环
        for (Object str : objarr) {
            System.out.print(str);
        }
        System.out.print("\n");
    }
}

这两种哪一种都是可以的,第二种相对第一种简化一些,但是我感觉第一种更好有利于对数组内存空间的理解;

2.动态初始化

初始化时你只需要指定数组长度,系统会自动分配初始值;

格式如下:


type myArray = new type[length];

这里提一下系统自动分配的初始值:

  1. byte,shoet,int,long 初始值是0
  2. float, double初始值是0.0
  3. char 初始值是'\0000'
  4. boolean初始值是false
  5. 所有引用类型初始值是null

测试代码:


public class MyArrayTest02 {
    public static void main (String[] args) {
        //动态初始化数组
        int[] arr = new int[5];
        for (int i = 0; i < arr.length; ++i) {
            arr[i] = i;
        }
        //foreach循环
        for (var i : arr) {
            System.out.println(i);
        }
     }
}    

数组和内存

java里面虽然没有了指针,但是java引入了引用的概念,同样是对内存的操作,所以理解好底层的机制对代码的编写和理解尤为重要;
下面的内容就是有一些小小的难度了,但是如果提前接触过指针的概念,对于下面的内容,你会发现许多相似之处;

数组引用变量是一个引用,只由引用变量指向了有效内存,才能通过数组变量访问数组元素;
同样,只有通过了数组的引用变量,才能访问到数组中的元素,即数组对象本身;

重点!!!
数组对象存储在堆中,引用变量存储在栈中(引用变量是局部变量的情况)
{ 这一点可以类比C语言指针动态分配内存,当一个指针动态分配了一块内存后,这一块内存存放在堆中,而这个指针变量存放在栈中,只有通过这个指针变量才能访问到分配的动态内存 }

画个图更好理解:

在这里插入图片描述

给大家来个案例看看,通过代码会更好理解:


public class PointTest {
    public static void main (String[] args) {
        int a[] = {1, 2, 3, 4, 5};
        //注意:此时的b的长度为6
        int[] b = new int[6];

        for (int i : a) System.out.print(i + " ");
        System.out.println();
        for (int i : b) System.out.print(i + " ");
        System.out.println();

        //b指向a所指向的内存
        b = a;

        //当b指向a所指向的内存空间时,b的长度就是a的长度
        System.out.println("b的长度为:" + b.length);
        //此时b指向的内存数据为
        for (int i : b) System.out.print(i + " ");
        System.out.println();
        //当a的第一个数据改变时,输出b的第一个数据看看是否改变
        a[0] = 100;
        System.out.println(b[0]);
    }
}

这里解释一下:
开始定义了两个引用变量:a和b,然后系统内存就产生了四个内存区,a和b就在栈区,而a和b所指向的数组本身在堆区;
a引用的数组对象里面有{1, 2, 3, 4, 5}五个元素,而b引用的数据对象则是系统初始化的,为{0, 0, 0, 0, 0, 0}六个元素,而当b指向a时,此时的b的数据对象就处于没有任何引用变量引用的情况,而a的数据对象此时被a和b两个引用变量所引用,此时b的长度就是a的长度5,所以当a的第一个数据改变时,相当于b的第一个数据改变;

总结一下:
我们看待一个数组时,要把数组看成两部分,一部分是数组的引用,即代码中定义的数组引用变量(存储在栈中),另一部分是实际的数组对象(存储在堆中);所以需要用过引用变量来访问数组对象;

总结

在这里我只是简单的介绍了一下java中的数组,不要以为掌握了这些就算真正学会了数组了,这些只能算作java数组的一个入门,你也许能够学会使用数组,但是数组在内存中的运行机制还有很多难以理解的地方,强烈建议提前学习一下C语言指针的相关内容,还有指针数组也最好掌握理解,这些将会帮助你更好的理解数组在内存中的存储和初始化,理解了这些,你将会对你的程序运行机制有着更准确的把握!

ps:内容如果有问题欢迎交流!!

到此这篇关于Java基础之不简单的数组的文章就介绍到这了,更多相关Java 数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java基础之不简单的数组

本文链接: https://lsjlt.com/news/136309.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java基础之不简单的数组
    目录引言数组也是一种类型数组特点数组的声明和初始化1.静态初始化2.动态初始化数组和内存总结引言 相信有过编程基础的小伙伴都知道数组这个数据结构,它应该也是我们第一个接触的数据结构,...
    99+
    2024-04-02
  • Java基础之Thymeleaf的简单使用
    Java代码 package com.zzx.controller; import com.zzx.model.User; import org.springframework...
    99+
    2024-04-02
  • Java基础之简单的图片处理
    目录一、前言二、依赖三、封装数据类四、常量类五、图像处理类六、效果图一、前言 先使用一个模板图片,在图片上添加图片或者文字都可以。 二、依赖 <dependency>...
    99+
    2024-04-02
  • Java基础之简单介绍一下Maven
    目录一、Maven是什么?二、Maven的作用三、Maven能干的事情四、Maven的好处五、Maven的仓库分类以及简单的说明六、Maven定义jar包的各个字段的描述七、Mave...
    99+
    2024-04-02
  • Java基础之数组详解
    目录前言二.创建数组三.数组的使用四.数组的遍历五.数组作为方法的参数六.数组相关方法Arrays前言 我们了解数组这个概念之前,我们先思考下面几个问题。 如果我们需要两个数据,那么...
    99+
    2024-04-02
  • Python基础学习之简单理解函数
    目录一、什么是函数二、无参函数三、有参函数四、实例五、return的使用六、结语一、什么是函数 注意不要和数学中的函数搞混了 那么到底什么是函数呢? 函数其实就是当我们在程序中需要大...
    99+
    2024-04-02
  • Java基础语法之二维数组详解
    目录一、二维数组二、二维数组的声明与初始化2.1 声明2.2 初始化2.2.1 静态初始化2.2.2 动态初始化三、二维数组的遍历四、二维数组的内存图分析五、数组操作的常见异常六、总...
    99+
    2024-04-02
  • Java基础之数组模拟循环队列
    目录一、队列简介二、数组模拟队列三、数组模拟循环队列四、代码实现五、运行结果一、队列简介 队列是一个有序列表,遵循“先入先出”的原则,即先存入队列的数据要先取出,后存入的数据后取出。...
    99+
    2024-04-02
  • python基础练习之几个简单的游戏
    文档介绍 利用python写“猜数字”,“猜词语”,“谁是卧底”这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列表/元组/字典/流程控制/库函数等等。 环境参数 linux平台,...
    99+
    2022-06-04
    几个 简单 基础
  • Python基础之简单的用户交互程序
    我们经常使用的程序都会有与用户交互的程序,比如网页的登录,需要输入自己的账号,密码这类的用户交互功能。 我们来写个简单的用户输入和输出的程序代码: user1 = input("账号:")  #申明变量user1 储存获取用户输入的账号 ...
    99+
    2023-01-30
    简单 基础 程序
  • [零基础学Python]赋值,简单也不
    变量命名 在《初识永远强大的函数》一文中,有一节专门讨论“取名字的学问”,就是有关变量名称的问题,本温故而知新的原则,这里要复习: 名称格式:(下划线或者字母)+(任意数目的字母,数字或下划线) 注意: 区分大小写 禁止使用保留字 遵守...
    99+
    2023-01-31
    也不 赋值 简单
  • java数组基础详解
    目录数组一. 数组概述二. 数组声明和创建三. 内存分析1.JAVA内存有:堆,栈,方法区····2.静态初始化:创建+赋值3.动态初始化:前面其实就是动态初始化,是分开写的。没有赋...
    99+
    2024-04-02
  • 从基础学java--数组
    目录Java数组1、数组的定义1.1、数组的声明创建1.2、内存分析1.3、数组的三种初始化1.4、 数组的基本特点1.5、数组边界2、数组的使用2.1、For-Each循环2.2、...
    99+
    2024-04-02
  • SQL 基础之组函数(九)
    组函数:– 类型和语法– 使用 AVG, SUM, MIN, MAX, COUNT– 组函数使用 DISTINCT 关键字– 组函数中NULL 值分组函数:作用于一组数据,并对一组数据返回一个值组函数类型A...
    99+
    2024-04-02
  • Java基础教程之数组的定义与使用
    目录一.数组的基本概念二.数组的声明三.数组的创建及初始化1.数组的创建2.数组的初始化四.访问数组元素 五.for each 循环 六.数组的拷贝 七.数组排序 八.二维数组 总结...
    99+
    2024-04-02
  • Java基础之数组超详细知识总结
    目录一、一维数组二、二维数组三、总结一、一维数组 1、Java语言中的数组是一种 引用数据类型。不属于基本数据类型。数组的父类是 Object。 2、数组实际上是一个容器,可以同时容...
    99+
    2024-04-02
  • Android基础入门之dataBinding的简单使用教程
    目录前言1.前期准备1.1打开dataBinding1.2修改布局文件1.3修改Activity方法2.DataBinding的使用2.1属性更新2.2<data>标签2...
    99+
    2024-04-02
  • SQL 基础之单行函数(七)
    单行 SQL 函数有如下几个分类:字符函数数字函数使用日期日期函数函数的使用原来说白了就是在函数使用过程中加入符合定义的参数,然后执行函数就能输出结果值了。单行函数和多行函数的区别:单行函数每行输出为一个结...
    99+
    2024-04-02
  • Java零基础入门数组
    目录认识数组数组的初始化默认初始化静态初始化动态初始化数组有关的问题数组的遍历求最值问题查询子元素Arrays工具类二维数组二维数组初始方式二维数组的遍历认识数组 数组的定义 数组是...
    99+
    2024-04-02
  • java数组基础的示例分析
    这篇文章主要介绍java数组基础的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数组数组(Array):相同类型数据的集合。Java 数组初始化的两种方法: 静态初始化: 程序员在初始化数组时为数组每个元素赋...
    99+
    2023-05-30
    java 数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作