A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

杨明明

初级黑马

  • 黑马币:0

  • 帖子:10

  • 精华:0

© 杨明明 初级黑马   /  2013-2-27 08:46  /  1958 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. //定义Cat类
  2. public class Cat {
  3.         double weight;
  4.         int age;
  5.         public Cat(double weight,int age)
  6.         {
  7.                 this.weight=weight;
  8.                 this.age=age;
  9.         }
  10. }


  11. public class ArrayTest {
  12. public static void main(String[] args){
  13.         //定义并动态初始化一个int[]数组
  14.         int[] pos=new int[5];
  15.         //采用循环为每个数组元素赋值
  16.         for (int i=0;i<pos.length;i++){
  17.                 pos[i]=(i+1)*2;
  18.         }
  19.         //对于pos数组的元素来说,用起来完全等同于普通变量
  20.         //下面即可将数组元素赋给int变量,也可将int变量赋给数组元素
  21.         int a=pos[1];
  22.         int b=20;
  23.         pos[2]=b;
  24.         //定义并动态初始化一个Cat[]数组
  25.         Cat[] cats=new Cat[2];
  26.         System.out.println(cats);
  27.         cats[0]=new Cat(3.34,2);
  28.         System.out.println(cats[0]);
  29.         cats[1]=new Cat(3.2,2);
  30.         //将cats数组的第一个元素的值赋给c1
  31.         Cat c1=cats[0];
  32.         System.out.println(c1);
  33.         Cat c2=new Cat(4.3,3);
  34.         //将c2的值赋给cats数组的第二个元素
  35.         cats[1]=c2;
  36.         System.out.println(cats[1].weight);
  37.         //System.out.println(cats[2].weight);
  38. }
  39. }
复制代码
学习java数组时有好多问题,因为它和c、c++有很多不同,所以有很多疑惑,请就以下问题讨论:
问题1:程序中那些量存储在堆中,那些存储在栈中?问题2:是否基本类型变量的值都存储在堆中?
问题3:数组使用前一定要初始化吗?
问题4:如何理解java中的静态数组?


评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 李挺 于 2013-2-27 09:32 编辑

1、非静态成员变量储存在堆里面,局部变量储存在栈内存中
2、不是,理由同上
3、数组有默认初始化,一般int[]数组如果你不赋值,元素的值默认是0
4、java好像没有动态数组,静态数组的概念,所有数组都必须有固定长度。

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

回复 使用道具 举报
1、在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new创建的对象和数组,在堆中分配的内存,由jvm的GC来管理。在堆中产生了一个对象或数组之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于对象或数组在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者变量引用变量就相当于是为数组或者对象起的一个名字。
2、基本类型变量的值都存储在栈中
3、数组在使用前必要初始化,所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值。
4、我们学习的数组都是静态数组,其实在很多的时候,静态数组根本不能满足我们编程的实际需要,比方说我需要在程序运行过程中动态的向数组中添加数据,这时我们的静态数组大小是固定的,显然就不能添加数据,要动态添加数据必须要用到动态数组,动态数组中的各个元素类型也是一致的,不过这种类型已经是用一个非常大的类型来揽括—Object类型。
静态数组一旦初始化就不能改变长度,其长度是由系统分配的

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
崔芝鲁 发表于 2013-2-27 09:34
1、在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个 ...

总结得非常好!
回复 使用道具 举报
崔芝鲁 发表于 2013-2-27 09:34
1、在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个 ...

单就问题2,如int a=2;2是基本类型,却存在堆中。
回复 使用道具 举报
崔芝鲁 发表于 2013-2-27 09:34
1、在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个 ...

问题2是我在看书的时候看到的一句话,感觉不对。。。呵呵 多谢指点
回复 使用道具 举报
崔芝鲁 发表于 2013-2-27 09:34
1、在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个 ...

第一个问题,能否给说下答案,,,看看我理解的对不对?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马