java学习之深入理解数组(一)

              第一门编程语言是c++所以学习Java时对于数组疑惑还是不小的,但是最近自习看了几遍略有了解了所以在这里分享一下。

其实总体来说数组的使用可以分为  定义  初始化;

Java中   定义数组的格式有两种  ①type [] arrayname.②type arrayname [];

对于这两种格式一般推荐使用第一种,貌似我在java程序中也很少见到使用第二种的,但是c++用惯了第二种还是觉得第二种比较顺,,,,,,,,,,,,,

定义数组时其实只是相当于定义了一个引用变量,数组就相当于是一个引用类型的变量,这个引用变量还未指向任何有效的内存因此此时不能指定数组的长度,也就是不能写

int [5] arrayname;类的语句,这是错误的!

由于还未指向任何有效的内存所以这个数组也是不能使用的!只有初始化后才能使用。


Java的数组初始化有两种形式

一:静态初始化

二:动态初始化

先说静态初始化

格式:arrayname = new type[] {element1,element2,element3,,,,,,};

简化的语法格式:

arrayname = {element1,element2,element3,,,,,,};
不过在实际写代码中我想还是没有人会那么闲把定义和初始化分开写,一般都是直接写成这样了:

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

动态初始化:

动态初始化只指定数组的长度,有系统给数组元素指定初始的默认值。

arrayname = new type[length];

不要同时对数组使用静态初始化和动态初始化。

也就是说不要既给数组赋值,又给数组指定长度。(虽然c++中就是这样干的)

-----------------------------华丽丽的分割线-----------------------------------------------------------------

下面要讲解内存中的数组了!,,,不过不知道如何绘图所以尽量上代码力求能讲清楚

数组是一种引用类型,数组引用变量只是一个引用,数组元素和数组变量在内存中是分开存放的。

实际的数组对象时存储在堆内存中的,而如果该数组对象的数组引用是一个局部变量那么他会被存储在栈内存中。

例如:int [] a = {1,2,3,4,5};

a就相当于这个数组变量的引用,而数组变量是指1,2,3,4,5;

也就是a是存储的栈内存中的而1,2,3,4,5是存储在堆内存中的。

在java中只要类型互相兼容就可以让一个数组变量指向另一个数组,其实大家可以把他想象成c++中的指针。

但这样最容易造成的一个错觉就是java的数组长度可变,其实这是错误的,看如下代码:

 public class ArrayInRam
  {
      public static void main(String [] args)
      {
          int [] a = {5,7,20};
          int [] b = new int [4];
          System.out.println("b的数组长度为"+b.length);
          for(int i = 0,len = a.length;i<len;i++)
          {
              System.out.println(a[i]);
          }
          for(int i = 0,len = b.length;i<len;i++)
          {
              System.out.println(b[i]);
          }
          b = a;
          System.out.println("b数组的长度为: "+b.length);
      }
  }

这段程序给你造成的假象就是刚开始时b的长度为4怎么后来变成3了?

是不是数组的长度可变?

NO!    a,b只是相当于一个引用也就是指针,刚开始时b指的那块内存有4个大小的int,后来  b = a;也就是b和a指向同一块内存了,所以此时再输出b的大小,这是指向的具体内容早都变了。

然而如果在c++中用b = a;这句话是会编译错误的。

这里先就讲这么多后面会再继续讲解java数组的深层应用,会讲解多维数组在java内存中的形式。

疯狂源自梦想,技术成就辉煌!-------李刚《疯狂Java讲义》

注解:学习Java时感觉到了美国佬的书和中国人的书的区别,以前总觉得学习计算机要扔了中国人写的书(我要打脸太崇媚洋外了),其实那种观点是自己的无知,现在看的多了才发现其实国产的一些书还是挺好的,当然在计算机教育界我觉得美国还是及其牛逼的,我刚开始卖的是 《java核心编程I》《java核心编程II》 把I看了部分后总觉得讲的理论很好,道理很通但是就是程序方面太过于理论化,于是在图书馆又找到了《疯狂java讲义》这本书还是很实用的很形象的,在接下来的日子里希望自己能够中西合用,既注重理论又注重实战(用老师的话说,程序员是要写大块的程序的,不是光会做一些考试的选择填空题,写不出程序都白搭)给大家呈现一些看起来还凑合的技术文章,

但是个人实力实在太菜,如果有错误或者建议,希望大家不吝赐教!谢谢!一起进步共同成长!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值