对于Java,前面的一些基础概念不是很想写,看了看还是从数组开始写吧(毕竟数组是第一个引用类型,相对复杂一点),我也是学了JAVA不是很久,目前看完了JAVA的基础视频,还有JAVA疯狂讲义这本书的大部分跟基础相关的内容,但是看完之后发现之前学的很多东西都忘记了(太急于求成,动手实践太少),所以想在学习框架之前二刷一遍,把基础知识点在重温一下。顺便写写博客记录我的JAVA学习历程,以及我所理解的知识重点~!

浅谈数组

  数组是我们在学习JAVA过程中遇到的第一个引用类型,它与我们之前所了解的基本类型(int,flout,String)不同,数组存储的数据是在堆内存中存储的,而我们基本类型的数据是在栈内存的存储的(关于堆,栈后面会详细说明)。接下来就开始我们的数组之旅~

数组的概述

  JAVA中,我们要求数组存储的必须是同一个数据类型的数据,因此我们的数组不能同时存储多种数据类型的元素(区别于Javascript)。当我们的数组初始化结束之后,我们数组的长度就被确定下来,数组的长度是固定不变的(与集合的区别:集合的长度是可变的)。数组被清空的时候,它所占的空间依然被保留。

数组的定义

  定义: 数据类型[] 数组名 = new 数据类型[元素个数或数组长度];

  对于数组定义的说明:1)数据类型: 数组中存储元素的数据类型。

            2) [] 表示数组的意思。

            3) 变量名 自定义标识符 。

            4) new 创建容器关键字。

            5)数据类型: 数组中存储元素的数据类型

            6)[] 表示数组的意思。

            7)元素个数,就是数组中,可以存储多少个数据 (恒定, 定长)

  数组是一个容器: 存储到数组中的每个元素,都有自己的自动编号。最小的下标值为0,最大下标值(为数组的长度-1)。访问数组存储的元素,必须依赖于索引:数组名[索引]。

  数组提供了一个属性来求得数组的长度:length属性。因此假设我们的数组名为arr,这个数组的长度就为:arr.length,数组的第一个元素就为arr[0],数组的最后一个元素就为arr[arr.length-1]。

JVM的理解

  JVM虚拟机相当于连接着JAVA与操作系统,通俗的理解为,java是在JVM上进行开发的。

  JVM对自己的内存划分为5个区域:(1).寄存器:内存和CUP之间。(2).本地方法栈: JVM调用了系统中的功能。 (3).方法和数据共享: 运行时期class文件进入的地方。(4).方法栈:所有的方法运行的时候进入内存。 (5). 堆:存储的是容器和对象

              

数组的初始化

  数组的初始化有两种方式:静态初始化和动态初始化。

(1).静态初始化:由程序员显示指定每个数组元素的初始值,由系统决定数组长度。

int[] array = {1,2,3,4,5};

(2).动态初始化:程序员只指定数组长度,由系统为数组元素分配值。

int[] array = new int[5];

  系统所分配的值有几下几种:1).byte,short,int,long类型,数组被赋值成0.

               2).float,double类型,数组被赋值成0.0.

                 3).char类型,数组被赋值成“\u0000”.

               4).boolean类型,数组被赋值成false.

               5).引用类型(类,接口,数组),数组被赋值成null.

增强的for循环---foreach循环

  在Java5之后,Java提供了一种新的循环:foreach循环。foreach循环会自动遍历数组和集合的每个元素。

foreach的语法格式如下:

for(type arrName : array||collection){

    //自动迭代访问的每个元素
}

type:数组元素或者集合元素的类型。arrName:一个形参名。array:要遍历的数组名。collection:要遍历的集合名。

下面举一个例子来使用foreach方法:

public class fun {
public static void main(String[] args) {
String[] array = {"ABC","abc","sdf","gvc","sf"};
for(String arr : array){
System.out.println(arr);
}
}
}
//最终的结果是:
ABC
abc
sdf
gvc
sf

但是值得注意的是:使用foreach循环的时候,不能在循环中对数组元素进行赋值,否则得出的结果是不正确的,这里面不详细说明。

深入了解数组

  上面我们了解了数组的一些基本的功能以及使用方法,但是数组在内存中的运行机制是什么呢?之前提到的基本类型以及引用类型的存储在哪里呢?堆存储和栈存储的区别是什么呢?接下来我一一讲述。

我们首先要明确的一个概念就是:数组是一个引用的数据类型,数组的引用变量只是一个引用,数组元素和数组变量在内存中是分开的。

数组变量其实是一个引用(相当于C语言里面的指针),我们通过这个数组变量指向有效的内存来访问元素。因此我们如果要访问数组里面的变量,我们只能使用数组的引用变量来访问它的元素。

接下来是一个数组的内存图,通过这个图来理解内存中的数组:

                

  首先我们要了解的就是,在JVM中,栈和堆都是存储的容器。每一个方法在执行的时候,该方法都会建立一个自己的内存栈,在这个方法内定义的变量将会逐个的放在这块栈里。随着这个方法的结束,这个栈会自动的销毁,因此,所有方法中的局部变量都是存储在栈内存中的。当程序中创建一个对象的时候,这个对象将被保存在运行时的数据区中,以便可以反复的利用(因为创建对象的成本大),这个运行时的数据区就是堆内存,堆内存中的对象不会因为方法的结束而被销毁,因为即使这个方法结束后,该对象也可能被另一个引用变量引用,只有当一个对象没有任何引用变量引用它的时候,它才会被系统的垃圾回收器在合适的时候销毁。有时候我们会让系统回收一个数组所占的空间,那么我们只需要将数组变量赋值为null,这就切断了数组引用变量和实际数组之间的关系,数组就被回收了。

  如上所示,我们将数组的引用放在栈内存中(arr),将数组的对象放在堆内存中(new int[3]),我们数组的引用实际上是一个指向它的对象的指针,当我们想在数组中取第一个元素的时候,我们只需要将这个指针指向第一个元素,我们便可以获得第一个元素的值:arr[0]。

二维数组

所谓二维数组,通俗的来说就是将一维数组存储到了一维数组中.。我们将二维数组的定义为:

type[][] arrName = new type[][];
或者
type[][] arrName = [[1,2,3],[2,3,4],[3,4,5]];

其中第一个代表行数,第二个代表列数。

二维数组的内存图如下所示(与一维数组差不多,就是在一维数组中存储了一维数组而已):

                  

我们可以把二维数组理解成一维数组。向3维,4维......n维数组,暂且可以不用看,一般二维就已经够了,了解了内存的存储方式,其实也挺好理解的。

为了我们共同进步,我这里有计算机专业的各种视频,

如果想要,关注我的公众号:念流声。私聊我,看到后给你连接(只放了一张图片,视频有很多,需要什么可以私聊问我,有的话就给你)。

Java基础之数组类型的更多相关文章

  1. java基础(十) 数组类型

    1. 数组类简介   在java中,数组也是一种引用类型,即是一种类. 我们来看一个例子,理解一下数组类: public static void main(String[] args) { Class ...

  2. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  3. Java基础之枚举类型Enum的使用

    Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...

  4. java基础04-数据类型扩展及面试题

    java基础04-数据类型扩展及面试题讲解 public class demo02 { public static void main(String[] args){ // 一.整数拓展: 进制 二进 ...

  5. Java基础之 数组详解

    前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...

  6. Java基础之数组详解

    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如 numbers[1 ...

  7. Java基础之数组(一)

    数组的定义 数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照 一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们.数组的三个基本特 ...

  8. Java 基础:数组

    一.数组声明: int[] x; int x[]; 在Java中一般使用前者,机把int[]看做一个类型,C++中只能后者 二.数组初始化: 直接提供值: int[] x = {1, 3, 4}; i ...

  9. java基础(6)--数组和方法

    数组 1. 什么是数组? 数组是相同数据类型的元素组成的集合.这些元素按线性顺序排列.所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素:除最后一个元素外,每一个元素都有唯一的后继元素.(“ ...

随机推荐

  1. 六、Zabbix-自动分组

    一.配置Zabbix server 1.创建主机组 (2)配置—>主机群组—>创建主机群组 (2)Next Step (3)可以看到新添加的主机组 2.添加自动分组动作 配置—>动作 ...

  2. maven指定本地jar包

    来自 https://blog.csdn.net/zhengxiangwen/article/details/50734565 一.怎么添加jar到本地仓库呢?步骤:1.cmd命令进入该jar包所在路 ...

  3. 递归 dfs 记忆化搜索 动态规划

    今天做洛谷P1434 [SHOI2002]滑雪 的时候仔细想了想记忆化搜索 现在总结一下 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态……这种用自已来 ...

  4. “AIIA”杯-国家电网-电力专业领域词汇挖掘

    十一之前一直在做“电力领域的词典构建”任务,今天也去聆听了前五支队伍的报告,现结合这段时间来的项目经历,写一下自己的若干心得. 电力领域的词典构建——方法1(非监督学习) 在电力领域词典构建心得1.0 ...

  5. VS2013启动 外接程序VMDebugger未能加载或导致了异常

    故障现象:打开Visual Studio 2010后弹出错误框,外接程序VMDebugger未能加载或导致了异常,是否希望移除该外接程序,错误号:80004005.系统版本:WIN10 64位专业版, ...

  6. Aliyun-Centos 7 LNMP安装(最新版LNMP)

    linux装软件方式:1.源码安装:下载wget-->解压tar -zxvf -->配置 ./configure --->编译make -->安装 make install 2 ...

  7. Set中如何区分重复元素

    Set接口常用实现类:HashSet和TreeSet HashSet区分重复元素: 先使用hashcode方法判断已经存在HashSet中元素的hashcode值和将要加入元素hashcode值是否相 ...

  8. Qradar SIEM--查询利器 AQL

    对于 SIEM 平台来说,好用的查询方式非常重要.之前有体验基于 ELK 搭建的平台,在 kibana 上面是可以通过一些 filter 来做一些过滤并且是支持 lucene 的语法,包括一些简单的逻 ...

  9. Java JPA设置默认值、Timestamp设置、自动获取时间

    设置默认值 @Column(name="state",columnDefinition="tinyint default 0") private Integer ...

  10. Eclipse Git分支实战

    切换分支 右键工程,创建新分支 命名新分支 点击finish,可以看到项目已经切换到hot_fix 修改代码: Ctrl+#提交到本地仓库,之后提交到远程仓库 Next,Finish 等待一下, 点击 ...