关于java栈和堆
2024-01-09 18:41:57
关于java栈和堆
在上一篇文章中我们了解了数组的声明和创建,本篇文章中我们了解一下声明数组,创建数组,给数组赋值以后,栈和堆都是怎么样子分配的,了解一下底层的逻辑知识,让大家可以更好的理解数组😀。
首先我们来回顾一下数组的声明,创建,以及赋值。
数组
public class Demo
{
public static void main(String[] args)
{
int[] array;//首选 声明一个数组
//int array1[];// C和C++采用
array =new int[10];//存放10个int类型的数字 创建一个数组
//给数组元素赋值
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=4;
array[4]=5;
array[5]=6;
array[6]=7;
array[7]=8;
array[8]=9;
array[9]=100;
}
}
java内存
栈和堆
我们逐步来了解,从声明到赋值,栈和堆的分配。
1、声明数组
声明数组以后,在栈中分配了一块空间,数组名字为array,数据类型为int类型。
2、创建数组
创建数组,new一个数组的对象,new了以后,就会在堆里面分配一块空间。
3、数组赋值
我们创建了一个长度是10的数组,但是由于索引从0开始,所以真实的顺序是0-9,我们为0-9赋值,所以在刚刚分配的大空间中,又分配了10个小空间。
4、下标越界
下标的合法区间[0,length-1],如果越界就会报错
public class Demo
{
public static void main(String[] args)
{
int[] array;//首选 声明一个数组
//int array1[];// C和C++采用
array =new int[10];//存放10个int类型的数字 创建一个数组
//给数组元素赋值
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=4;
array[4]=5;
array[5]=6;
array[6]=7;
array[7]=8;
array[8]=9;
array[9]=100;
}
}
我们上面定义的范围是10个,下标最后一个是9,如果我们要输出下标是10的数组,就会提示报错!
public class Demo
{
public static void main(String[] args)
{
int[] array;//首选 声明一个数组
//int array1[];// C和C++采用
array =new int[10];//存放10个int类型的数字 创建一个数组
//给数组元素赋值
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=4;
array[4]=5;
array[5]=6;
array[6]=7;
array[7]=8;
array[8]=9;
array[9]=100;
System.out.println(array[10]);
}
}
我们执行以下上面的代码,就会看到以下的报错。
ArrayIndexOutOfBoundsException
- 这个报错的意思就是,数组下标越界异常。
- 因为我们只分配了10个小空间,长度范围已经固定在10了,输出11的时候,它不在我们创建的空间内,所以抛出异常提示,在以后的工作中,如果发现了这个字样,第一时间要去看一下 数组的长度🤔
初始化数组
初始化数组一共有三种方式😀。
1、静态初始化
- 数据类型[] + 数组名字 = {值…};
public class Demo {
public static void main(String[] args)
{
//静态初始化数组 创建加赋值
int[] b={1,2,3,4,5};
System.out.println(b[0]);
}
}
2、静态初始化2(当前仅需要了解)
- 需要先新建一个类,类名我们就叫做One。
- 类名[] + 数组名 = {new 类名(1,1),new类名(2,2)};
public class Demo {
public static void main(String[] args)
{
One[] ones = {new One(1,1),new One(2,2)};
}
}
3、动态初始化
- 动态初始化就是我们上面那种方式
- 数据类型[] + 数组名字 = new 数据类型[范围];
public class Demo {
public static void main(String[] args)
{
int[] a = new int[2];
int[0]=1;
int[1]=2;
}
}
4、数组的默认初始化
- 数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
总结
- 数组是相同数据类型(数据类型可以为任意类型)的有序集合数组也是对象。
- 数组元素相当于对象的成员变量。
- 数组长度的确定的,不可变的。如果越界,则报:ArraylndexOutofBounds。
文章来源:https://blog.csdn.net/SpringYang11/article/details/135414375
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!