java学习笔记8(数组及内存)

访问数组元素进行存储(静态初始化)

(1)直接打印数组名称,得到的是数组对应的内存地址哈希值

int[] array={1,2,3};
System.out.println(array);

(2)访问数组元素的格式,数组名称[索引值]
索引值:就是一个int数字,代表数组中的编号。
【注】索引值从0开始,一直到数组的长度减一为止

访问数组元素进行存储(动态初始化)

(1)动态初始化数组时,其中的元素将会自动拥有一个默认值

数据类型初始值
整数0
浮点数0.0
字符‘\u0000’
布尔false
引用null

(2)访问数组元素的格式,数组名称[索引值]
(3)数组元素的赋值,数组名称[索引值]=数值;
【注意】静态初始化其实也有默认值,只不过系统马上将默认值替换成了大括号里的数值

java的内存划分

图片来源黑马程序员

一个数组的内存图

图片来源黑马程序员

应用时数组的地址值不变

两个独立数组的内存图

图片来源黑马程序员

两个变量指向一个数组

图片来源黑马程序员

常见问题

1 数组索引越界异常
数组索引从0开始

int []array={1,2,3};
System.out.println(3);//数组索引越界

2 空指针异常
我们都知道java是没有指针的,这里说的"java指针"指的就是java的引用,我们不在这里讨论叫指针究竟合不合适,而只是针对这个异常本身进行分析。空指针就是空引用,java空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常。可以理解,成员变量和方法是属于对象的(除去静态),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些成员变量和方法。对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和方法,这个时候用它去调用某些属性和方法,当然会出现空指针异常。

int[] array=null;
System.out.println(array[0]);

数组必需new初始化才能使用其中的元素,如果只使用一个null那么将会发生空指针异常

数组的应用

1 获取数组的长度
格式:数组名称.length;
将会得到一个int数字,代表数组的长度;
注意 数组一旦创建,程序运行期间,长度不可改变;
右边的int[3]才是数组,左边a只是一个代号

int a[]=new int[3];

2 数组的遍历输出
遍历数组就是对数组当中的每一个元素进行逐一,挨个输出,默认的处理方式就是打印输出

int[] array={1,2,3};
for(int i=0;i<=array.length-1;i++)//for(int i=0;i<array.length;i++)
{
   System.out.println(array[i]);
}

3 求出数组当中的最大值

int[] array={1,2,3};
int max=array[0];
for(int i=1;i<array.length;i++)
{
    //如果当前元素,比max更大,用它替换max
    if(array[i]>=max)
    {
        max=array[i];
    }
    System.out.println("最大值"+max);

同理可得最小值;

4 数组元素反转
由 【1,2,3,4】变为【4,3,2,1】
数组元素的反转其实是对称位置的交换

int[] array={1,2,3};
int min=0;
int max=array.langth-1;
for(min,max;min>=max;min++,max--)
{
     int temp=array[min];
     array[min]=array[max];
     array[max]=temp;//首尾相接
}

5 数组作为方法参数_传递地址
数组作为方法参数传递,传递的参数是数组内存的地址。

public static void printArray(int[] array)
{
    for(int i=0;i<array.langth;i++)
    {
        System.out.println(array[i]);
    }
}

方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.

6数组作为方法返回值_返回地址
如果一个方法当中产生了多个结果数据进行返回,使用一个数组作为返回值类型

public static int[] test(int a,int b,int c)
{
      int sum=a+b+c;
      int avg=sum/3;
      int result[]={sum,avg};
      return result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值