7.1-全栈Java笔记:数组的概念和初始化

数组概述和特点

数组的定义:

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

1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

2. 其元素必须是相同类型,不允许出现混合类型。

3. 数组类型可以是任何数据类型,包括基本类型和引用类型。


老鸟经验

数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

创建数组和初始化

数组声明(一维数组的声明方式有两种)


type[]     arr_name; //(推荐使用这中方式)

type   arr_name[]; 


注意事项

1. 声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。

2. 声明一个数组的时候并没有数组被真正的创建。

3. 构造一个数组,必须指定长度。

【示例1】创建基本类型一维数组


public class Test {

public static void main(String args[]) {

int[] s = null; // 1处

s = new int[10]; // 2处

for (int i = 0; i < 10; i++) {

s[i] = 2 * i + 1;

System.out.println(s[i]);

} // 3处

}

}

示例1 内存分析图

【示例2】创建引用类型一维数组


class Man{

private int age;

private int id;

public Man(int id,int age) {

super();

this.age = age;

this.id = id;

}

}

public class AppMain {

public static void main(String[] args) {

Man[] mans;

mans = new Man[10];    //1处

Man m1 = new Man(1,11);

Man m2 = new Man(2,22);  //2处

mans[0]=m1;

mans[1]=m2;  //3处

}

}

示例2 内存分析图

初始化

一、静态初始化

除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。

【示例3】静态初始化数组


int[] a = {1,2,3};

Man[] mans = {

new Man(1,1),

new Man(2,2)

};

二、动态初始化

数组定义与为数组元素分配空间并赋值的操作分开进行。

【示例4】动态初始化数组


int[] a = new int[2];

a[0]=1;

a[1]=2;

三、数组的默认初始化

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

【示例5】数组的默认初始化


int a[] = new int[2];  //0,0

boolean [] b = new   boolean[2];  //false,false

String[] s = new   String[2];     //null, null



「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

C-手刃移动前端和Web前端

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop

时间: 2024-10-07 17:29:34

7.1-全栈Java笔记:数组的概念和初始化的相关文章

7.2-全栈Java笔记:数组常见的操作

数组常见操作 数组的遍历 数组元素下标的合法区间:[0, length-1].我们可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值. [示例1] 使用循环遍历初始化和读取数组 public class   Test { public static void   main(String[] args) { int[]   a = new int[4]; //初始化数组元素的值 for(int   i=0;i<a.length;i++){ a[i] = 100*i; } //读

10.2-全栈Java笔记:最全面的IO技术(二)

上节我们聊到「IO技术概念及入门」这节我们继续聊一下IO技术的分类. Java中流的概念细分 按流的方向分类: 输入流:数据流向是数据源到程序(InputStream.Reader结尾的流) 输出流:数据流向是程序到目的地(OutPutStream.Writer结尾的流) 按处理的数据单元: 字节流:按照字节读取数据(InputStream.OutputStream)命名上以stream结尾的流一般是字节流. 字符流:按照字符读取数据(Reader.Writer).命名上以Reader/Writ

10.1-全栈Java笔记:最全面的IO技术(一)

IO技术 对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能.程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备等等. 外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象.屏蔽外部的差异,从而实现更加便捷的编程. 输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是"读",读取外部数据).常见的应用: 1) 读取硬盘上的文件内容到程序.例如:播放器打开一个视频文件.word打

4.1-全栈Java笔记:对象的进化史

面向对象和面向过程的区别 面向过程编程思想思考问题时,我们首先思考"怎么按步骤实现?"并将步骤对应成方法,一步一步,最终完成. 这个适合简单任务,不需要过多协作的情况下.比如,如何开车?我们很容易就列出实现步骤: 1. 发动车 2. 挂挡 3.踩油门 4. 走,你 面向过程适合简单.不需要协作的事务. 如果,我们需要思考"如何造车?",你就会发现列出1234这样的步骤,是不可能的.那是因为,造车太复杂,需要很多协作才能完成. 面向对象(Object)编程,更契合人的

4.3-全栈Java笔记:面向对象的内存分析

面向对象的内存分析 为了让大家对于面向对象编程有更深入的了解,我们要对程序的执行过程中,内存到底发生了什么变化,进行剖析,让大家做到"心中有数",通过更加形象的方式理解程序的执行方式. 老鸟建议:       本节是为了让初学者更深入了解程序底层执行情况,为了完整的体现内存分析流程,会有些新的名词,比如:线程.Class对象.大家暂时可以不求甚解的了解,后期学了这两个概念再回头来看我们这篇内存分析,肯定收获会更大. Java虚拟机的内存可以分为三个区域:栈stack.堆heap.方法区

10.10-全栈Java笔记:Apache IOUtils和FileUtils的使用

JDK中提供的文件操作相关的类,功能非常基础,进行复杂操作时需要做大量编程工作.实际开发中,往往需要你自己动手编写相关的,尤其在遍历目录文件时,经常用到递归,非常繁琐. Apache-commons工具包中提供了FileUtils,可以让我们非常方便的对文件和目录进行操作. 本文就是让大家对FileUtils类有一个全面的认识,便于大家以后开发文件和目录相关功能. Apache IOUtils和FileUtils类库为我们提供了更加简单.功能更加强大的文件操作和IO流操作功能.非常值得大家学习和

6.2-全栈Java笔记:异常处理机制的分类

异常分类 JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例.如果内置的异常类不能够满足需要,还可以创建自己的异常类. 图1 异常的分类  Error Error类层次描述了Java运行时系统内部错误和资源耗尽错误.这类错误是我们无法控制的,同时也是非常罕见的错误.所以在编程中,不去处理这类错误. Error表明系统JVM已经处于不可恢复的崩溃状态中.我们不需要管他. 图2 java.lang包中Error的类 Error与E

9.3-全栈Java笔记:List接口常用实现类的特点和底层实现

上节我们讲到「List接口的特点和常用方法」,本节接着上节的内容继续深入学习. 课前回顾:  List接口常用的实现类有3个:ArrayList.LinkedList.Vector. 那么它们的特点和底层实现有哪些呢? ArrayList特点和底层实现 ArrayList底层是用数组实现的存储. 特点:查询效率高,增删效率低,线程不安全.我们一般使用它. 查看源码,我们可以看出ArrayList底层使用Object数组来存储元素数据.所有的方法,都围绕这个核心的Object数组来开展. Arra

9.4-全栈Java笔记:Map接口和实现类

现实生活中,我们经常需要成对存储某些信息.比如,我们使用的微信,一个手机号只能对应一个微信账户.这就是一种成对存储的关系. Map就是用来存储"键(key)-值(value) 对".  Map类中存储的"键值对"通过键来标识,所以"键对象"不能重复. Map 接口的实现类有: HashMap.TreeMap.HashTable.Properties等. 常用的方法: 方法 说明 Object   put(Object key, Object va