对应引用数据类型而言,主要的特点是空运与方法进行引用传递,而数组本身也属于引用类型,所以自然也可以通过方法实现引用传递的操作。
范例:实现一个数组的引用传递
public class ArrayDemo {
public static void main(String args[]){
int data[] = new int[]{1,2,3,4,5};
printArray(data); //传递数组
}
//要求接受一个int型的数组
public static void printArray(int temp[]){
for(int x = 0; x<temp.length; x ++){
System.out.println(temp[x]);
}
}
}
对于此时的引用传递具体的内存关系如下。
既然可以通过方法来接收一个数组,那么也就可以通过方法返回一个数组对象,那么此时只需要在方法的返回值类型上进行控制即可。
范例:定义方法返回数组
public class ArrayDemo {
public static void main(String args[]){
int data[] = initArray();//通过方法可以获得数组内容
printArray(data); //传递数组
}
public static int[] initArray(){
int arr[] = new int[]{1,2,3,4,5};
return arr; //返回一个数组
}
//要求接受一个int型的数组
public static void printArray(int temp[]){
for(int x = 0; x<temp.length; x ++){
System.out.println(temp[x]);
}
}
}
下面来针对此程序进行内存关系分析。
范例:通过方法修改数组内容
public class ArrayDemo {
public static void main(String args[]){
int data[] = new int[]{1,2,3,4,5};
changeArray(data);
printArray(data); //传递数组
}
public static void changeArray(int arr[]){
for(int x = 0; x < arr.length; x++){
arr[x] *= 2;
}
}
//要求接受一个int型的数组
public static void printArray(int temp[]){
for(int x = 0; x<temp.length; x ++){
System.out.println(temp[x]);
}
}
}
本程序的内存关系如下。
范例:随意定义一个int数组,要求可以计算出这个数组元素的总和、最大值、最小值、平均值。
对于此程序的最基本的实现如下:
public class ArrayDemo {
public static void main(String args[]){
int data[] = new int[]{1,2,3,4,5};
int sum = 0;
double avg = 0;
int max = data[0];
int min = data[0];
for(int x = 0; x < data.length;x++){
if(data[x] > max){
max = data[x];
}
if(data[x] < min){
min = data[x];
}
sum += data[x];
}
avg = sum / data.length;
System.out.println("数组总和为:" + sum);
System.out.println("数组平均值为:" + avg);
System.out.println("数组最大值为:" + max);
System.out.println("数组最小值为:" + min);
}
}
主方法所在的类往往被称为主类,那么既然是主类肯定不希望涉及过于复杂的功能。在进行开发的过程之中,主方法本身就相当于一个客户端,而对于客户端的代码应该尽量简单一些,所以这个时候最好的做法是将这一些列计算过程交给单独的程序类去完成。
范例:改善操作设计
class ArrayUtil { //是一个操作工具的类
private int sum;
private double avg;
private int max;
private int min;
public ArrayUtil(int data[]){ //进行数组计算
this.max = data[0]; //假设第一个是最大值
this.min = data[0]; //假设第一个是最小值
for(int x = 0; x < data.length;x++){
if(data[x] > max){
this.max = data[x];
}
if(data[x] < min){
this.min = data[x];
}
this.sum += data[x];
}
this.avg = this.sum / data.length;
}
public int getSum(){
return this.sum;
}
public double getAvg(){
return this.avg;
}
public int getMax(){
return this.max;
}
public int getMin(){
return this.min;
}
}
public class ArrayDemo {
public static void main(String args[]){
int data[] = new int[]{1,2,3,4,5};
ArrayUtil util = new ArrayUtil(data);
System.out.println("数组总和为:" + util.getSum());
System.out.println("数组平均值为:" + util.getAvg());
System.out.println("数组最大值为:" + util.getMax());
System.out.println("数组最小值为:" + util.getMin());
}
}
此时的主类就好比我们使用电脑一样,只关心如何操作,而具体的操作过程被类进行包装了。