由于Java数组涵盖的内容比较多,这里从个人的角度对主要的内容进行相关的讲解。

如有不足,欢迎批评指正~

1)Java数组是动态还是静态的啊?

    Java语言是典型的静态语言,由此推断Java数组也是静态。何为静态,就是说Java数组在初始化的时候必须确定在内存中分配的空间的大小。

具体实现方式就是在初始化数组的时候(注意不是声明数组的时候,这两个概念别搞混了)指定数组的长度,或者指定初始化数组的内容哦。

同时需要明白数组变量并不是数组本身,数组变量是存储在栈中的,对应的数组对象是存储在堆中的。栈中的数组变量指向堆中的数组对象。

例如:

  1. package com.yonyou.test;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Iterator;
  5. import java.util.Set;
  6.  
  7. /**
  8. * 测试类
  9. * @author 小浩
  10. * @创建日期 2015-3-2
  11. */
  12.  
  13. public class Test{
  14. public static void main(String[] args) {
  15. int[] array=new int[10];//初始化数组的时候指定类数组的长度
  16. int[] array_new=new int[]{1,2,3};//初始化数组的时候指定了对应的相关元素
  17. //需要注意的是这里不能再指定对应的长度了哦
  18. //否则的话会报错的哦。
  19. System.out.println("数组一的长度为:"+array.length);
  20. System.out.println("数组二的长度为:"+array_new.length);
  21.  
  22. }
  23. }

  2)Java数组的默认初始化值

       a.基本数据类型byte,short,int,long,默认的初始化值为0;

b.基本数据类型float,double的默认初始值为0.0

c.基本数据类型char的默认初始值为:\0000

d.基本引用类型的默认初始值为null

  1. package com.yonyou.test;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Iterator;
  5. import java.util.Set;
  6.  
  7. /**
  8. * 测试类
  9. * @author 小浩
  10. * @创建日期 2015-3-2
  11. */
  12.  
  13. public class Test{
  14. public static void main(String[] args) {
  15. short[] array_0=new short[10];
  16. int[] array_1=new int[10];
  17. long[] array_2=new long[10];
  18. byte[] array_3=new byte[10];
  19. char[] array_4=new char[10];
  20. boolean[] array_5=new boolean[10];
  21. float[] array_6=new float[10];
  22. double[] array_7=new double[10];
  23. Car[] array_8=new Car[10];
  24. System.out.println("short:"+array_0[5]);
  25. System.out.println("int: "+array_1[5]);
  26. System.out.println("long: "+array_2[5]);
  27. System.out.println("byte: "+array_3[5]);
  28. System.out.println("char的默认值是否为\\u0000:"+(array_4[5]=='\u0000'));//无法直接显示字符的内容
  29. //间接的显示
  30. System.out.println("boolean: "+array_5[5]);
  31. System.out.println("float : "+array_6[5]);
  32. System.out.println("double: "+array_7[5]);
  33.  
  34. System.out.println("引用类变量初始化值为:: "+array_8[5]);
  35.  
  36. }
  37.  
  38. /**
  39. * 创建一个测试对象
  40. * @author 小浩
  41. * @创建日期 2015-3-19
  42. */
  43. class Car{
  44.  
  45. }
  46. }

  3)Java数组一定要初始化吗?

         不是的。对于具体的反例,请看下面的内容:

  1. package com.yonyou.test;
  2.  
  3. /**
  4. * 测试类
  5. * @author 小浩
  6. * @创建日期 2015-3-2
  7. */
  8.  
  9. public class Test{
  10. public static void main(String[] args) {
  11. Car[] car1=new Car[10];
  12. Car[] car2;
  13. car2=car1;
  14. System.out.println(car2.length);
  15.  
  16. }
  17.  
  18. /**
  19. * 创建一个测试对象
  20. * @author 小浩
  21. * @创建日期 2015-3-19
  22. */
  23. class Car{
  24.  
  25. }
  26. }

  4)Java数组初始化的几种方式?

         数组的初始化一般分为两种:

一种为静态初始化:

在创建数组的时候就指定了数组的长度,如下面的内容:

int[] array_static=new int[]{1,2,3};

第二种为动态初始化:

在创建数组的时候仅仅指定数组的长度

int[] array_dynamic=new int[10];

具体应用实例如下:

  1. package com.yonyou.test;
  2.  
  3. /**
  4. * 测试类
  5. * @author 小浩
  6. * @创建日期 2015-3-2
  7. */
  8.  
  9. public class Test{
  10. public static void main(String[] args) {
  11. //静态初始化
  12. int[] array_static=new int[]{1,2,3};
  13. //动态初始化
  14. int[] array_dynamic=new int[10];
  15.  
  16. }

  4)Java中的多维数组是怎么回事?

说句到家的话,java中没有多维数组的概念。java中的多维数组可以当成一维数组来处理。初始化多维数组的时候可以转换成对应的一维数组。

只不过这时一维数组中存储的不在是具体的元素值,而是对应的数组的引用地址。具体的也不多说了,请看下面的例子:

  1. package com.yonyou.test;
  2.  
  3. /**
  4. * 测试类
  5. * @author 小浩
  6. * @创建日期 2015-3-2
  7. */
  8.  
  9. public class Test{
  10. public static void main(String[] args) {
  11. Object[] obj1=new Object[4];
  12. obj1[2]=new Object[2];
  13. Object[] obj2=(Object[]) obj1[2];
  14. obj2[1]=new Object[3];
  15. Object[] obj3=(Object[]) obj2[1];
  16. obj3[2]=new int[5];
  17. int[] obj4=(int[]) obj3[2];
  18. obj4[3]=100;
  19. System.out.println(obj4);
  20. System.out.println( ((int[])((Object[])((Object[])obj1[2])[1])[2]) );
  21. System.out.println(obj4[3]);
  22. System.out.println(((int[])((Object[])((Object[])obj1[2])[1])[2])[3]);
  23. }
  24.  
  25. }

  多维数组的内存模型图如下:

好吧,就先到这里吧。

Java数组的基本讲解的更多相关文章

  1. 第二十三节:Java语言基础-详细讲解函数与数组

    函数 函数在Java中称为方法,在其他语言中可能称为函数,函数,方法就是定义在类中具有特定功能的程序.函数,在Java中可称为方法. 函数的格式: 修饰符 返回值类型 函数名(参数类型 参数1, 参数 ...

  2. 简单的例子 关于Java内存管理的讲解

    我想做的是,逐行读取文件,然后用该行的电影名去获取电影信息.因为源文件较大,readlines()不能完全读取所有电影名,所以我们逐行读取. 就这段代码,我想要在位置二处使用base64,然后结果呢? ...

  3. java集合框架的讲解

    下面要开始java中相关集合框架的学习啦. Are you ready?Let's go~~ 今天要讲解的Java中的集合框架. 1) 首先查看jdk中Collection类的源码后会发现如下内容: ...

  4. Java-杂项:Java数组Array和集合List、Set、Map

    ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...

  5. Java 数组

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

  6. 第5章 Java数组

    1.什么是数组 数组可以想象成一个巨大的盒子,这个盒子里面存放的是同一个数据类型的数据 例如:int[] scores = {78,68,94,93}; 2.如何使用Java中的数组 2.1申明数组 ...

  7. Java 数组基础

    数组 数组(Array):相同类型数据的集合. 定义数组 方式1(推荐,更能表明数组类型) type[] 变量名 = new type[数组中元素的个数]; 比如: int[] a = new int ...

  8. Java数组及其内存分配

    几乎所有的程序设计语言都支持数组.Java也不例外.当我们需要多个类型相同的变量的时候,就考虑定义一个数组.在Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静 ...

  9. [转载]Java数组扩容算法及Java对它的应用

    原文链接:http://www.cnblogs.com/gw811/archive/2012/10/07/2714252.html Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组 ...

随机推荐

  1. Linux根目录下重要文件夹

    bin存放系统命令的目录,普通用户和超级用户都可以执行,不过放在这里的命令在单用户模式下也可以执行 sbin保存和系统环境设置相关的命令,只有超级用户可以使用这些命令进行系统环境的设置,但有些命令可以 ...

  2. python网络爬虫之scrapy 调试以及爬取网页

    Shell调试: 进入项目所在目录,scrapy shell “网址” 如下例中的: scrapy shell http://www.w3school.com.cn/xml/xml_syntax.as ...

  3. WORD表格数据运算技巧

    我们经常会用WORD制作表格,有时表内的数据要运算的,WORD表格数据运算能力无法与EXCEL相比.但常见的乘除加减.相邻数据累加,将金额数字自动转成大写,WORD都能在表格内自动完成.下面以一个简单 ...

  4. Android Studio support 26.0.0-alpha1 Failed to resolve: com.android.support:appcompat-v7:27.+ 报错解决方法

    AS下如何生成自定义的.jks签名文件, 以及如何生成数字签名 链接:http://www.cnblogs.com/smyhvae/p/4456420.html 链接:http://blog.csdn ...

  5. ARDUINO解析GPS数据,读取出来GPRMC帧数据

    测试板子使用ARDUINO MEGA2560 #include <TimerOne.h> #define GPSSerial Serial1 #define DebugSerial Ser ...

  6. 读paper:image caption with global-local attention…

    最近的图片caption真的越来越火了,CVPR ICCV ECCV AAAI很多顶级会议都有此类的文章,今天我来讲一篇发表在AAAI的文章,因为我看了大量的论文,最近感觉AAAI越来越水了.所以这篇 ...

  7. 读paper:Deep Convolutional Neural Network using Triplets of Faces, Deep Ensemble, andScore-level Fusion for Face Recognition

    今天给大家带来一篇来自CVPR 2017关于人脸识别的文章. 文章题目:Deep Convolutional Neural Network using Triplets of Faces, Deep ...

  8. 转 开启“大数据”时代--大数据挑战与NoSQL数据库技术 iteye

    一直觉得“大数据”这个名词离我很近,却又很遥远.最近不管是微博上,还是各种技术博客.论坛,碎碎念大数据概念的不胜枚举. 在我的理解里,从概念理解上来讲,大数据的目的在于更好的数据分析,否则如此大数据的 ...

  9. php 实现简单抽奖

    首先有一组数据,里面有中奖的物品和概率 $base_data = [ ['name'=>'特等奖','num'=>1], ['name'=>'一等奖','num'=>5], [ ...

  10. POJ 1068 Parencodings (类似括号的处理问题)

                                                                                                    Pare ...