Java的数组
数组是种有效表达集合元素的数据结构,同时也是种重要的引用类型
1 定义
1、1 变量声明
一般的使用方法为:
int[] narray=new int[10];
上述的定义应该理解如下:
首先表达式的左边定义一个数组的引用变量,它并不是数组,表达式的右边才是数组引用变量的值,即利用new操作符动态生成的真正的数组变量,它是种对象变量,拥有存储内部元素的能力。但是数组变量没有名称,所以必须通过引用变量来间接访问,所以引用变量的功能和传统指针变量的功能很相似。不过,引用变量的功能要较指针更加简单和安全,程序中不能直接对引用变量进行诸如指针变量般的地址运算。
引用变量和对象变量的这种设计方式,主要是因为变量内存存储的不同,对于基本类型,由于占用单元小,都存储在程序所拥有的栈空间中,而对于对象变量,通常都比较大,所以一般采用这种引用变量和对象变量分离的方式,将对象变量存储在程序后的堆空间中,程序内部通过引用变量间接访问它们。
说明:
可以将int[] narray写成int narray[],两种写法意义一样,但是第一种写法更加和一般变量的定义一致,而且在新的语言中逐渐废止了传统的int narray[]写法,如C#
上述写法可以分离为两行代码,使得意义更加清晰:
int[] narray;
narray=new int[10];
如果只写出第一行语句,并不代表生成了数组变量,只是生成了数组类型的引用变量。
当然,数组的类型除了基本类型外,也可以是引用类型,如String类型的字符串数组:
public class exec
{
public static void main(String[] args)
{
String[] narray=new String[5];
System.out.println(narray[0]);
}
}
输出为null
但是要注意的是,此时数组的每个元素只是一个字符串类型的引用变量,而非字符串变量本身,所以打印结果为null,null为Java中的关键字,表示一个引用变量为空,没有指向诸如字符串或者数组的真实对象变量。
再如,如果每个数组元素可以是一个数组引用类型的话,就形成了数组的数组,即二维数组
public class exec
{
public static void main(String[] args)
{
int[][] narray=new int[6][5];
System.out.println(narray[0][0]);
}
}
上述程序的理解和字符串数组很相似,只需把所有的int[]和String对换即可,而此时的int[]和String其实都表示数组元素的类型。
1、2 动态长度的数组
由于数组变量是利用new操作符动态生成的,所以可以生成动态长度的数组变量,如
public class exec
{
public static void main(String[] args)
{
String str=javax.swing.JOptionPane.showInputDialog("Please input the size:");
int len=Integer.parseInt(str);
int[] narray;
narray=new int[len];
}
}
但是一旦数组变量生成好后,就不能再次改变数组变量的长度了
1、3 数组初始化
Java数组也可以在创建的同时进行初始化,如
public class exec
{
public static void main(String[] args)
{
int[] narray={1,2,3,4,5,6};
for(int i=0;i<narray.length;i++)
System.out.println(narray);
}
}
输出为:
1
2
3
4
5
6
这些写法都是不对的,如
int[5] narray={1,2,3,4,5,6};
int narray[5]={1,2,3,4,5,6};
2 使用
简单的数组循环方法为:
public class exec
{
public static void main(String[] args)
{
int[] narray=new int[10];
for(int i=0;i<narray.length;i++)
System.out.println(narray);
}
}
输出全部为0(说明数组变量能够自动对整型类型的内部元素初始化为0)
一个例子(让用户指定数组长度,分别给每个数组元素赋值,最后算出平均数):
public class exec
{
public static void main( String args[] )
{
String s=javax.swing.JOptionPane.showInputDialog("Please input the size:");
int c=Integer.parseInt(s);
int[] array=new int[c];
int x=0;
int y=0;
for(int i=0;i<c;i++)
{
s=javax.swing.JOptionPane.showInputDialog("Please input the number "+(i+1)+"#:");
x=Integer.parseInt(s);
array=x;
}
for(int i=0;i<c;i++)
{
y=y+array;
}
y=y/c;
System.out.println("The average is "+y);
}
}
老师,你给的这个课件上最后那个例子里面,程序编译时有点错误。
for(int i=0;i<c;i++)
{
s=javax.swing.JOptionPane.showInputDialog("Please input the number "+(i+1)+"#:");
x=Integer.parseInt(s);
array=x;
}
for(int i=0;i<c;i++)
{
y=y+array;
}
我觉得应该将这两个语句改成:
for(int i=0;i<c;i++)
{
s=javax.swing.JOptionPane.showInputDialog("Please input the number "+(i+1)+"#:");
x=Integer.parseInt(s);
array[i]=x; }
for(int i=0;i<c;i++)
{
y=y+array[i]; }
你说得很正确!课件上传时,丢失了许多字符,多谢提醒