疯狂输出⚔ java基础之数组篇

来源:互联网 发布:饶毅毕业致辞知乎 编辑:程序博客网 时间:2024/06/10 19:30

数组
什么是数组?
先把数组想象成一个容器,这个容器里只存放相同类型的东西。

意思就是说数组可以再内存中开辟一块空间,开辟的这块空间中只能存放,相同类型的数据。

那数组如何在内存中开辟一块空间?那数组是怎么在内存中存取的呢?数组存的地方叫什么?在哪里?
这些问题大家先放在心里。用例子讲一下就懂了。
接下来我们看一下怎么写一个数组。数组的结构是什么样的。
数组的声明规范:
数据类型[] 数组名 = 初值 ;
数据类型指的是 这个数组中 数据存放的类型是什么。比如我们常见的 int ,doublie,等。。。。。。
接下来我们写一段简单的数组。

public class ceshi{public static void main(String[]agrs){         int[] array = new int[0];         System.out.println(array);        }        }

结果

[I@33909752

这[I@33909752是什么呢? 一会告诉大家!大家还记得上面没有解决的问题?
那数组如何在内存中开辟一块空间?那数组是怎么在内存中存取的呢?数组存的地方叫什么?在哪里?
这些问题我们用上面这段简单的代码我用我的双剑来给大家画几个图大家瞬间就明白了

int[] array = new int[0];

来看一下这条语句 大家要记住 = 左边的 int[] array 是要存放到栈内存里的,=右边的 new int[0]; 如果不知道为什么请去敲一下度娘的大门。请看图
堆内存的三个特点
1,有初始值 默认为0
2,堆内存有内存地址
3,垃圾回收机制
栈内存的一个特点
程序执行完了会立即释放。

这里写图片描述
这是我们数组在栈内存 以及对内存的存放方法
左边的图是说 栈内存存放的是函数函数中存放的是数据类型
右边的图说 堆内存存放的是一个数组 new int[] ,这个new int[]里面第一个0是数组里的第一个数。
大家要记住堆内存中是有默认值的,他的默认值为0

public class ceshi{public static void main(String[]agrs){         int[] array = new int[0];         System.out.println(array);        }        }

结果

[I@33909752

[I@33909752 这里面[这个半个括号代表的是这是一个数组。后面的I代表的是int型@后面33909752代表的就是数组中第一个数,默认的地址,这个33909752是用哈希耍法算出来的数我们不做深入研究。

那和大家有没有一个问题产生栈内存是如何读取堆内存的数据呢?怎么样运行的呢!
请看图

这里写图片描述
因为我们的堆内存的特征,有初始值,初始值为0,并且堆内存中 首个数的地址 唯一,其他地址一次递增。
栈内存只保存首地址,也就是说 栈内存在读取一个数组的时候先读他第一个数的首地址。

那好那我们知道栈内存和堆内存在数组中的关系后,怎么在栈内存中读取一个数组的元素呢。
其实很简单。我们来写一个程序。

public class ceshi{public static void main(String[]agrs){         int[] array = new int[]{1,2,3,4,5};         System.out.println(array[0]);        }        }

结果是

1
public class ceshi{public static void main(String[]agrs){         int[] array = new int[]{1,2,3,4,5};         System.out.println(array[4]);        }        }

结果是

5

打印array[0]的值就会对应数组中的首个值。打印array[4]就会对应数组中末端的数。
这也说明了我们栈内存中开始读取是从0开始读的不是1。并且数组每个元素都会对应一个地址
这个地址我们称之为角标。
知道了角标的作用以后来练习一个题。
数组中有是个数要求打印第七个数

public class ceshi {       public static void main (String[]agrs){          int[] array = new int[]{1 , 2 , 3 , 4, 5 , 6 ,7 , 8 , 9 , 10}           System.out.println(array[6])            }}

结果

7

数组的遍历

打印一个值我们会了,那打印数组中所有的值怎么打印?
题目打印{5,6,7,8}这个数组

public class ceshi {public static void main (String[]agrs){int[]array = new int[] { 5 , 6 , 7 , 8 };   System.out.println(Arrays.toString(array));    //Arrays.toString(array)是讲数组转换成字符串形式输出。}}

结果

[5, 6, 7, 8]

上面我们会打印一个数组了,那我们如何把数组里的每一个元素都打印一遍呢?

public class ceshi {       public static void main (String[]agrs){       int[]array = new int[] {5,6,7,8};                 for (int i = 0; i < array.length; i++) {                 System.out.println(array[i]);      }  }}

结果

5678

拓展知识: 随机数
随机数计算公式;
(最大值-最小值+1)+最小值

随机10个数 随机的区间为[15,150]

public class ceshi{    public static void main(String[]agrs){        int[] array = new int[10];        for(int i =0;i<array.length;i++){        int b = (int)(Math.random()*(150-15)+15);        array[i]=b;        System.out.print(array[i]+"\t");        }          int max = 0;          for (int i = 0; i < array.length; i++) {            if(max<array[i]) {                max = array[i];            }            System.out.println();        }          System.out.println("max ="+max);    }}

结果

22  95  37  33  70  139 146 52  130 71  max =146
原创粉丝点击