# 数组--------内存 #



2017/8/31 15:29:19 


## 数组(容器) ##

- 为了存储同种数据类型的多个值

- 概念

    - 数组是可以存储同一种数据类型多个元素的集合,也可以看成是一个容器

    - 数组既可以存储基本数据类型,也可以存储引用数据类型

- 格式

    - 数据类型[] 数组名 = new 数据类型[数组的长度];

    -    int[]  arr = new int[5];

    - 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};

    -    int[] arr = new int[]{11,22,33,44,55};---------数组长度为5

- 数组初始化

    - 为数组开辟连续的内存空间,并为每个数组元素赋予值

        - 动态初始化:只指定长度,由系统决定初始化值

            -   int[] arr = new int[5];

            -  

            1. 整数类型:byte,short,int,long,默认初始化值都是0

            2. 浮点类型:float,double,默认初始化值为0.0

            3. 布尔类型:Boolean默认初始化值为false

            4. 字符类型:char初始化值为‘\u0000’    -------char在内存中占两个字节,是16个二进制位,    \u0000----每一个0代表十六进制的0,四个0就是十六个二进制位

        - 静态初始化:给出初始化值,由系统决定长度

            -  数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};

            - ` int[] arr = new int[]{11,22,33,44,55};`  先声明,后赋值

            -  `int[] arr = {11, 22,33,44,55}; ` 声明和赋值在一行

   

                    ` int[] arr;



                    arr = new int[]{11,22,33,44,55};

            

                    int[] arr2;

                    arr2 = {11,22,33,44,55}    //会报错,,,声明和赋值必须在一行

                    `

            

## 栈 ##

- 存储局部变量---

    - 局部变量:定义在方法声明上和方法中的变量

        - int x = 10;

## 堆 ##

- 存储new出来的数组或对象(新创建)

## 方法区 ##

-面向对象-

## 本地方法区 ##

-和系统相关

## 寄存器 ##

- 给CPU使用(.class)



## 一个数组的内存图解 ##

![](http://i.imgur.com/HCpk6gu.png)



# 二维数组 #



    `        int[][] arr = new int[3][2];                        //定义二维数组

        System.out.println(arr);            //二维数组                                    [[I@15db9742

        System.out.println(arr[0]);            //二维数组中第一个一维数组                    [I@6d06d69c

        System.out.println(arr[0][0]);        //二维数组中第一个一维数组的第一个元素        0



    

    /*

    //int[][] arr = new int[3][2];    

    //以下两种也是表示数组的格式

        int arr[][] = new int[][];

        int[] arr[] = new int[][];



        int x;

        int y;

        int x,y;

        

        int[] x;

        int[] y[];



        int[] x,y[];                //x是一维数组,y是二维数组

        */`



**int[][] arr = new int[3][];**



----------二维数组中有三个一维数组



赋值::

        

        `arr[0] = new int[3];

        arr[1]    = new int[5];

        `

##二维数组遍历##

外循环控制二维数组的长度,其实就是一维数组的个数;



内循环控制一维数组的长度。





    `class Demo2_Array {

        public static void main(String[] args) {

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

            System.out.println(arr);

            System.out.println(arr[0]);

            System.out.println(arr[0][0]);



            bianli(arr);    

        }

        public static void bianli(int[][] arr){

            for (int i = 0; i < arr.length ;i++ ){            //i代表每一个二维数组中的一维数组

                for (int j = 0;j < arr[i].length ;j++ ){

                    System.out.print(arr[i][j] + " ");

                }    

                System.out.println();

            }

        }

     }`





# java中的参数传递 #



1. 基本数据类型的值传递,不改变原值,因为调用后就会弹出栈,局部变量随之消失。

2. 引用数据类型的值传递,改变原值,因为即使方法弹出栈,但是堆内存数组的对象还在,可以通过地址继续访问。



*两种说法:



1、Java中既是传值,也是传址,基本数据类型传递的值,引用数据类型传递的地址



2、Java中只有传值,因为地址值也是值*

Java数组笔记的更多相关文章

  1. Java开发笔记(二十三)数组工具Arrays

    数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较.数组复制.数组排序等等.为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作 ...

  2. Java学习笔记之---方法和数组

    Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...

  3. java学习笔记六——数组

    数组类型 数组是一种常见的数据结构,可用于存放多个数据,每一个数组元素存放一个数据,通常可以通过下标进行访问其元素. Java数组要求所有数组元素具有相同的数据类型.因此,数组元素的数据类型是唯一的. ...

  4. [java小笔记] 关于数组内存管理的理解

    数组是大多数编程语言都提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组,java语言的数组变量时引用类型的变量,因此具有java引用变量的特性.在使用数组之前必须对数组对象 ...

  5. java学习笔记(基础篇)—java数组

    一:什么是数组,什么时候使用数组? 数组是用来保存一组数据类型相同的元素的有序集合,数组中的每个数据称为元素.有序集合可以按照顺序或者下标取数组中的元素. 在Java中,数组也是Java对象.数组中的 ...

  6. Java学习笔记(5)--- Number类和Math 类,String类的应用,Java数组入门

    1.Number 和 Math 类: 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型(int,double,float这些)的情形. 这种由编译器特别支持的包装称为装箱,所以当内置数 ...

  7. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  8. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  9. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

随机推荐

  1. Centos 7部署大众点评CAT(一)——单服务器部署

    前一篇拙作上传的时间已经过去2个月了,中间并不是闲着...主要是忙着学习各种组件的安装,写了几篇安装心得存在硬盘里. 最近尝试了点评开源的CAT监控平台的安装,并且希望能够引入到工作中.在部署实践的过 ...

  2. Unity Shader入门教程(一)

    参考文献:http://www.360doc.com/content/13/0923/15/12282510_316492286.shtml Unity Shader是着色器,将纹理.网格信息输入,得 ...

  3. 机器学习 —— 基础整理(八)循环神经网络的BPTT算法步骤整理;梯度消失与梯度爆炸

    网上有很多Simple RNN的BPTT(Backpropagation through time,随时间反向传播)算法推导.下面用自己的记号整理一下. 我之前有个习惯是用下标表示样本序号,这里不能再 ...

  4. EF 直接修改数据,不再查询数据库

    public int UpData(T model, params string[] proNames) { //4.1将 对象 添加到 EF中 DbEntityEntry entry = null; ...

  5. vim 配置插件

    vim插件可以用bundle管理,我这里面用的是一个开源的Vundle工具,git上操作步骤说的很清楚https://github.com/VundleVim/Vundle.vim 之前PluginI ...

  6. 2013年五大主流浏览器 HTML5 和 CSS3 兼容性大比拼

    2013年五大主流浏览器 HTML5 和 CSS3 兼容性大比拼   转眼又已过去了一年,在这一年里,Firefox 和 Chrome 在拼升级,版本号不断飙升:IE10 随着 Windows 8 在 ...

  7. vue-cli的webpack模板项目配置文件分析

    由于最近在vue-cli生成的webpack模板项目的基础上写一个小东西,开发过程中需要改动到build和config里面一些相关的配置,所以刚好趁此机会将所有配置文件看一遍,理一理思路,也便于以后修 ...

  8. log4go的日志滚动处理——适应生产环境的需要

    日志处理有三类使用环境,开发环境DE,测试环境TE,生产环境PE. 前两类可以看成是一类,重要的是屏幕显示--termlog.生产环境中主要用的是socklog 和 filelog,即网络传输日志和文 ...

  9. 第五章之S5PV210将u-boot.bin从SD卡中搬到DDR中

    1,在完成上一节的memory初始化后,接下来在arch/arm/cpu/armv7/start.S的160行:如下图 2,跳转到arch/arm/lib/board.c下的board_init_f函 ...

  10. 从 Vue 1.x 迁移 — Vue.js

    闲聊: 又到周五啦,明天不用上班啦哈哈哈哈哈,想想就好开心啊,嘻嘻,小颖这周三的早晨做个一个美梦,把自己愣是笑醒了,梦的大概剧情我忘记了,总之宝宝是被笑醒的,行了之后还傻笑了一段时间,真希望每天早上都 ...