`
icomparator
  • 浏览: 17675 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

数组与堆栈内存的学习总结。

 
阅读更多
class ArrayDemo
{
       public static void main(String[] args)
      {
               int [] arr=new int[5];
              System.out.println("数组长度为: "+arr.length);
              System.out.println(arr);  //此时会出现一个特殊的[I@de6ced
              printArray(arr);
      }
 

 

     public static void printArray(int[] arr)  //定义一个方法,打印数组的每一个元素
     {
              for(int x=0; x<arr.length ; x++)
              {
                       if(x<arr.length-1)
                               System.out.print(arr[x]+",");
                       else
                                System.out.print(arr[x]);
              }
     }

}

 


/*

总结:

1, “功能方法” 的声明,根据访问权限的不同,调用时作用范围随之改变,但必须声明在某个类中。
可以放在main方法体的上方,也可以放在其下方,这是无关紧要的,因为程序执行时总是从main方法作为程序的入口。

2, 方法调用时应将调用方法写在main方法体内。

3, 定义一个数组有两种方法:
① 用int []arr={...}; 数组数据类型 []数组名称={数据元素1,数据元素2,数据元素3...}; 相当于②的进一步。
② int []arr=new int[3]; 数组数据类型 []数组名称=new关键字 数组数据类型[数组维数];
Ps:
注意 此程序中的arr为数组类型,也就是引用数据类型。而不是int型。此程序中的int是指数组中的元素为int类型。
数据类型有两种:
基本数据类型---int、float、char、boolean
引用数据类型---array、class、interface
数组维数一定不能忘!数组若未初始化赋值,则数组中每个元素默认值为0,默认数组下标从0开始。

4, 若直接打印输出数组名称,则会输出结果: [I@de6ced [ 表示为数组, I表示数组中的元素为整型,@后是数组地址,
(Ps: 这里理解不清楚,在执行这个没意义的代码 System.out.println(arr); 时,无论arr数组中存放任何元素
打印输出的都是 [I@de6ced ,程序在int []arr={...};或者 int []arr=new int[3]; 在堆内存中开辟一个空间用于存放数组中各个元素的值,而arr是定义在
栈内存中的,是通过引用堆内存中的下标的值。 ..!菜鸟有个疑问:此时在堆内存中开辟的数组的地址是固定的么?)

*/

=======================================================================================

class ArrayDemo1
{
         public static void main(String []args)
         {
                 int [] x=new int[3];
                 x[0]=41;
             // x=null;

  
       }
       public static void show()
       { 
              int m=3;
              System.out.println(m);
       }
}


/*
总结:
1, 程序在调用JVM虚拟机执行程序时会在系统的栈内存中开辟一个空间用于存放数组类型的x 。

2, 凡是局部变量(什么是局部变量---定义在方法里的变量,定义在方法中的参数上的变量,定义在for循环中的变量),都定义在栈内存里,
堆内存中的每一个实体都有一个存放位置。

3, 执行赋值动作,不是赋具体的数值,而是将数组在内存中的首地址赋给栈内存中的x,成为x指向了这个数组,或称为引用了这个数组。数组没有真正存放到x中去,x只存放数组的地址。堆内存中的实体是用来封装数据的,而实体中的每个数据都有默认初始化值。默认初始化值根据数组元素类型不同而不同。

4, x[0]=41; 该语句为 数组类型的x引用数组下标为0的元素的值为41 。

5, x=null; 表明数组类型的x的值为null,不再指向数组下标为0在堆内存中的地址。此时栈内存中的x不再引用堆内存中数组的实体数据,则此时JVM将视堆内存中的该

实体为垃圾,JVM会不定时启动java特有的垃圾回收机制,将堆内存中的垃圾清除掉。

6, 栈内存的特点是:数据使用完毕会自动清除,
堆内存的特点是:依靠java特有个垃圾回收机制,不定时清除内存中的垃圾。
*/

=============

图1:

===========================================================

图2

分享到:
评论

相关推荐

    c/c++ 学习总结 初学者必备

    17、堆栈溢出一般是由什么原因导致的? 答: 没有回收垃圾资源。 18、什么是预编译?何时需要预编译? 答: (1)总是使用不经常改动的大型代码体。 (2)程序由多个模块组成,所有模块都使用一组标准的包含文件和相同...

    C语言解析教程(原书第4版)(美) 凯利.pdf

     《c语言教程(原书第4版)》系统、完整,可作为c语言的参考手册,也非常适合作为学习c语言的入门和高级课程教材。 前言 第0章 从零开始 0.1 为什么要用c 0.2 ansi c标准 0.3 从c到c++ 0.4 从c和c++到java 第1章 ...

    传智播客扫地僧视频讲义源码

    15_内存四区_堆栈案例理解 16_课堂答疑_理解指针的关键关键在内存 17_vs20102013上配置#系列快捷方式 18_栈的属性和buf地址增长方向是两个不同的概念 19_函数调用模型_主调函数和被调用函数 20_课堂答疑_函数调用...

    宋劲彬的嵌入式C语言一站式编程

    7. 指向数组的指针与多维数组 8. 函数类型和函数指针类型 9. 不完全类型和复杂声明 24. 函数接口 1. 本章的预备知识 1.1. strcpy与strncpy 1.2. malloc与free 2. 传入参数与传出参数 3. 两层指针的参数 4. 返回值是...

    Visual.Basic.6大学教程.pdf

    5.12 结构化编程总结 114 5.13 Visual Basic数据类型 119 小结 120 自测练习 120 自测练习答案 122 练习 123 第6章 子过程与函数过程 128 6.1 简介 128 6.2 窗体模块 128 6.3 Sub过程 129 6.4 Function 过程 134 6.5...

    Linux c编程一站式学习

    12.2. 堆栈....................................................138 12.3. 深度优先搜索............................................140 12.4. 队列与广度优先搜索......................................145 ...

    自己动手写操作系统(含源代码).part2

    Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人...

    自己动手写操作系统(含源代码).part1

    Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人...

    Visual C++ 2005入门经典--源代码及课后练习答案

    8.1.3 析构函数与动态内存分配 372 8.2 实现复制构造函数 375 8.3 在变量之间共享内存 377 8.3.1 定义联合 377 8.3.2 匿名联合 379 8.3.3 类和结构中的联合 379 8.4 运算符重载 379 8.4.1 实现重载...

    Reversing:逆向工程揭密

    10.9.2 重构数组 356 10.10 结论 356 第11章 突破保护 357 11.1 修补程序(Patching) 358 11.2 生成密钥 364 11.3 取密钥生成算法 365 11.4 高级破解:Defender 370 11.4.1 逆向Defender的初始化程序 377 11.4.2 ...

    C#数据结构

    二是如何在计算机存储器(内存和外存)中存储数据;三是如何对存 储在计算机中的数据进行操作,可以有哪些操作,如何实现这些操作以及如何对 同一问题的不同操作方法进行评价;四是必须理解每种数据结构的性能特征,...

Global site tag (gtag.js) - Google Analytics