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

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. 导入50G文件到mysql,然后再倒入sqlserver

    --导入大文件50G文件到mysql1.修改配置innodb_flush_log_at_trx_commit=0 2.导入时的注意事项set autocommit=1;show variables l ...

  2. javascript计算两个时间的差

    function GetDateDiff(startTime, endTime, diffType) { //将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 startTime ...

  3. Python之协程的实现

    1.Python里面一般用gevent实现协程协程, 而协程就是在等待的时候切换去做别的操作,相当于将一个线程分块,充分利用资源 (1)低级版协程的实现 import gevent def test1 ...

  4. [译]如何检查python中的值是否为nan?

    float('nan')是Nan不是一个数字,我该如何判断一个值为nan,有什么简单的方法么? 使用math.isnan()来进行判断 >>> import math >> ...

  5. RQNOJ 明明的随机数

    题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应 ...

  6. Log4j官方文档翻译(六、日志的级别)

    org.apache.log4j.Level 类提供了下面几种日志级别,你也可以通过继承这些类,自定义级别 ALL 所有日志级别都包括 DEBUG 指定信息事件的粒度是DEBUG,在调试应用的时候会有 ...

  7. POJ 3683 Priest John's Busiest Day(2-SAT+方案输出)

    Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10010   Accep ...

  8. BZOJ 4069 [Apio2015]巴厘岛的雕塑 ——贪心

    自己首先想了一种方法$f(i)$表示前$i$个最小值为多少. 然而发现位运算并不满足局部最优性. 然后我们可以从高到低贪心的判断,使得每一组的和在一个特定的范围之内. 还要特判最后一个Subtask, ...

  9. POJ1671 Rhyme Schemes

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1776   Accepted: 984   Special Judge De ...

  10. enum枚举类型

    枚举类型的实例是常量,且它们都用大写字母表示. 简单枚举例子: public enum Spiciness { NOT, MILD, MEDIUM, HOT, FLAMING } public cla ...