这一章节我们来全面了解一下数组。

1.数组在初始化之前。我们不能使用他的引用来做不论什么事情。

package com.ray.ch14;

public class Test {
public static void main(String[] args) {
int[] a;
// System.out.println(a);//error,The local variable a may not have been
// initialized
// a[0]=0;//error,The local variable a may not have been initialized
}
}

上面的错误信息已经说明了观点。

2.数组在初始化的时候,假设是基础类型里面的数值型类型,那么初始化每一个元素为0,假设是char。则是‘空’,假设是boolean。则是false,假设是其它类型(包含不是数值型类型的基础类型)。则初始化每一个元素为null

package com.ray.ch14;

import java.util.Arrays;

public class Test {
public static void main(String[] args) {
int[] a = new int[3];
String[] b = new String[3];
char[] c = new char[3];
boolean[] d = new boolean[3];
MyClass[] myClasses = new MyClass[3];
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(c));
System.out.println(Arrays.toString(d));
System.out.println(Arrays.toString(myClasses));
}
} class MyClass {
}

输出:

[0, 0, 0]
[null, null, null]
[ , ,]

[false, false, false]
[null, null, null]

3.创建数组的两种方式。显式new与隐式new

package com.ray.ch14;

public class Test {
public static void main(String[] args) {
MyClass[] a = new MyClass[3];
MyClass[] b = { new MyClass(), new MyClass(), new MyClass() };
}
} class MyClass {
}

上面两种创建方式是对等的。

4.上面的隐式new事实上就是聚集初始化。可是。他本身有一定的局限性,就是必须在当前位置初始化。我们以下再看看还有一种动态聚集初始化

package com.ray.ch14;

public class Test {
public static void main(String[] args) {
MyClass[] a = new MyClass[] { new MyClass(), new MyClass(),
new MyClass() };
MyClass[] b = { new MyClass(), new MyClass(), new MyClass() };
}
} class MyClass {
}

观察上面的代码。数组a更加的灵活。

5.数组标识符是一个引用。指向堆里面的对象。

package com.ray.ch14;

public class Test {
public static void main(String[] args) {
int[] ints = new int[] { 1, 2, 3 };
System.out.println(ints);
}
}

输出:

[I@1bab50a

上面的输出事实上就是一个内存地址。

6.基础类型数组存储的是基础类型的值。对象数组存储的是对象的引用(内存地址)

package com.ray.ch14;

public class Test {
public static void main(String[] args) {
int[] ints = new int[] { 1, 2, 3 };
for (int i = 0; i < ints.length; i++) {
System.out.println(ints[i]);
}
MyClass[] myClasses = new MyClass[] { new MyClass(), new MyClass(),
new MyClass() };
for (int i = 0; i < myClasses.length; i++) {
System.out.println(myClasses[i]);
}
}
} class MyClass {
}

输出:

1
2
3
com.ray.ch14.MyClass@c3c749
com.ray.ch14.MyClass@150bd4d
com.ray.ch14.MyClass@1bc4459

总结:上面总结了数组的多个方面。以及各个方面都做出来举例。

这一章节就到这里。谢谢。

-----------------------------------

文件夹

从头认识java-14.2 进一步了解数组的更多相关文章

  1. Java 14带来了许多新功能

    本文是作者翻译自java magazine的文章,我也将回持续的关注java的最新消息,即时和大家分享.如有翻译不准确的地方,欢迎大家留言,我将第一时间修改.   Java 14包含比前两个发行版更多 ...

  2. Java IO: 字节和字符数组

    原文链接  作者: Jakob Jenkov   译者:homesick 内容列表 从InputStream或者Reader中读入数组 从OutputStream或者Writer中写数组 在java中 ...

  3. Java 8 到 Java 14,改变了哪些你写代码的方式?

    前几天,JDK 14 正式发布了,这次发布的新版本一共包含了16个新的特性. 其实,从Java8 到 Java14 ,真正的改变了程序员写代码的方式的特性并不多,我们这篇文章就来看一下都有哪些. La ...

  4. Java基础语法Day_05(数组的概念)

    第14节 数组         day05_01_数组的概念 day05_02_数组的定义格式一_动态初始化 day05_03_数组的定义格式二_静态初始化 day05_04_数组的定义格式三_省略的 ...

  5. Java将文件转为字节数组

    Java将文件转为字节数组 关键字:文件,文件流,字节流,字节数组,二进制 摘要:最近工作中碰到的需求是,利用http传输二进制数据到服务器对应接口,需要传输userId, file(加密后)等一系列 ...

  6. Java数据结构和算法之数组与简单排序

    一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...

  7. [改善Java代码]避开基本类型数组转换列表陷阱

    开发中经常用到Arrays和Collections这两个工具类. 在数组和列表之间进行切换.非常方便.但是也会遇到一些问题. 看代码: import java.util.Arrays; import ...

  8. Java中的二维数组

    Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空 ...

  9. java学习之二维数组

    java当中的二维数组,存储一组比较特殊的对象.他存储一个数组,同时存储的数组当中又存储着元素. java二维数组的声明方式一: class Arr2Demo { public static void ...

  10. Java 反射 Array动态创建数组

    Java 反射 Array动态创建数组 @author ixenos 注:java.lang.reflect.Array 是个反射工具包,全是静态方法,创建数组以多维数组为基准,一维数组只是特殊实现 ...

随机推荐

  1. pip更新产生的问题及其解决方法?

    运行 pip3 install --upgrade pip 发生错误: from pip import main ImportError: cannot import name 'main' 将以下代 ...

  2. maven学习(二)——手动创建maven项目

    一.Maven的简单使用 1.Maven项目的目录约定 MavenProjectRoot(项目根目录)   |----src   |     |----main   |     |         | ...

  3. javascript作用域链理解

    执行上下文(Execution context,简称EC)   概念   每当控制器到达ECMAScript可执行代码的时候,就进入了一个执行上下文.   javascript中,EC分为三种:   ...

  4. Ubuntu 硬盘大小扩展

    注:途中所有图均为配置好补的截图,部分来自其它网页. 1.选择硬盘(SCSI) 2.点击扩展,在弹出框填写期望的硬盘大小(不能比原硬盘大小容量小) 3.进入虚拟机,安装GParted. 命令:sudo ...

  5. exit() 与 return() 的区别

    exit()与 return() 的区别为: 1. return返回函数值,是关键字:  exit 是一个函数. 2. return是语言级别的,它表示了调用堆栈的返回:而exit是系统调用级别的,它 ...

  6. C++ 静态成员的类内初始化

    一般来说,关于C++类静态成员的初始化,并不会让人感到难以理解,但是提到C++ 静态成员的"类内初始化"那就容易迷糊了. 我们来看如下代码: //example.h #includ ...

  7. EOJ Monthly 2017.12 A B C D

    // 因为是中文题面就偷一次懒不写题意啦QAQ // 各种大作业然后又要期末还不知道什么时候能补题QAQ A. 唐纳德先生和假骰子 直接模拟 #include <bits/stdc++.h> ...

  8. python 查看帮助和变量的强制转换

    查看帮助 dir() 函数 查看对象都有哪些属性和方法 用法:把要查询的对象写入()括号中即可 print(dir([])) (查看列表的方法) 执行: C:\Python27\python.exe ...

  9. PyCharm 快捷键总结

    运行 Shift+alt+F10 执行程序 调试 Shift+alt+F9 Debug调试 Shift + F9 对当前文件进行Debug F8 调试模式下 跳过 F7 调试模式下 进入 F9 快速调 ...

  10. Codeforces Gym100735 I.Yet another A + B-Java大数 (KTU Programming Camp (Day 1) Lithuania, Birˇstonas, August 19, 2015)

    I.Yet another A + B You are given three numbers. Is there a way to replace variables A, B and C with ...