变量是用来存放常量值。
问题:数据少的时候,可以定义单独的变量空间存储起来。
可是数据一旦多了,再使用这种变量的方式,很不方便。
数组:把同一类型的数据组合一起的集合。
如何定义数组:
定义数组需要通过关键字 new
怎么使用数组呢
数组有个特性:
1,数组所有的空间都拥有自己的角标(下标,索引),这时可以通过数组+角标的方式访问数组的每一个空间。
2,数组定义完成后,如果没有给数组空间中赋值,数组空间中有默认的初始化值。
int类型的数组默认初始值为0
double 0.0
String ""
char '\u0000'
boolean false
使用格式:
int [] arr = new int[5];
arr[0]
java的内存分布
64M java吧内存划分了五部分
1,栈内存 运行方法的,所有定义的局部变量,都在这片内存 区域中。(局部变量:定义在方法中,方法的参数中,for循环中的变量)
2,堆内存 所有对象都在这里存放着,用过new关键字创建出来的东西都存放在这里。当堆内存中的对象(通过new关键字创建出来的)没有任何的引用指向它的时候,这个对象就变成了垃圾,等待垃圾回收机制的清理。
3,方法区 所有的class文件,以及所有的静态的东西,还有常量池等。
4,本地方法区 主要存放本地方法
5,寄存器 给cpu使用
数组使用过程中常见的2个小问题:
1、ArrayIndexOutOfBoundsException 异常 数组角标越界异常
发生此问题的原因是:访问的到数组中不存在的角标。
2、NullPointerException 空指针异常
当一个引用不再指向任何对象时,仍然在使用这个引用,去操作某个对象。这时就会发生空指针异常
如果在定义数组时,就明确了数组中存放的数据,就这样定义
int [] arr = new int [] {1,2,3,4,5};
简写为如下格式:
int[] arr = {1,2,3,4,5};
在数组实例中有个属性length中记录着当前这个数组的长度。
数组的应用:
遍历:把数组的每个空间都访问一遍。
/*
需求:求数组中的最大值
思路:
1、需要一个功能,这个功能就是用来求数组的最大值。
2、要定义功能,就必须有两个明确:
这个功能需要接受参数,接受的参数就是数组
有返回值,返回的就是数组的中的最大值。
3、方法定义好了,具体怎么求数组最大值呢?
先临时假设数组中的一个值为最大值。
4、需要取出数组中的每一个数和假设的这个最大值作比较,如果取出的这个数比假设的最大值大,
就要把当前出去来的这个数替换假设的那个最大值。
步骤:
1、定义功能,求数组最大值
2、假设某数组中的某一个数为最大值
3、遍历数组,取出每一个数
4、判断取出的这个数和假设那个数谁大。
5、替换最大值
6、返回最大值
需求:求数组中所有元素的和值?
思路:
1、要定义一个功能,用于求数组中所有元素和
明确1:有没有参数呢?有,就是数组
明确2:有没有返回值?有,和值
2、要求所有元素的和值,需要一个存放所有和值的空间,并且这个空间的起始值为0
3、遍历数组,取出数组中的每一个元素,把每一个元素加到和值空间去
4、返回和值
class ArrayDemo10
{
public static void main(String[] args)
{
System.out.println(toHex(0));
System.out.println(toOctal(0));
System.out.println(toBinary(0));
System.out.println(Integer.toHexString(0));
System.out.println(Integer.toOctalString(0));
System.out.println(Integer.toBinaryString(0));
}
//定义功能完成十进制-->十六进制
public static String toHex(int num)
{
return "0x"+trans( num,15,4 );
}
//定义功能完成十进制-->八进制
public static String toOctal(int num)
{
return "0"+trans( num,7,3 );
}
//定义功能完成十进制-->二进制
public static String toBinary(int num)
{
return "0b"+trans( num,1,1 );
}
public static String trans( int num , int num2 ,int offset )
{
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
//定义临时数组存放每次查表得到的字符
char[] ch = new char[32];
//用于提供临时数组的角标,同时可以记录临时数组中存放的数据具体位置
int pos = 0;
while( num!=0 )
{
int temp = num & num2;
//System.out.println(chs[temp]);
//把查表获得字符存放到临时数组中
ch[pos] = chs[temp];
pos++;
num = num >>> offset;
}
String str = "";
for(int i=pos-1 ;i>=0 ;i--)
{
str = str + ch;
}
return str;
//System.out.println(pos);
/*
//打印临时数组中存放那些字符
for( int i = pos-1 ; i>=0 ;i-- )
{
System.out.print(ch);
}
*/
}
}
|