阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时29:数组与方法
程序员文章站
2024-02-26 18:44:58
...
对于引用数据类型而言,主要的特点是可以与方法进行引用传递,而数组本身也属于引用数据类型,所以自然也可以通过方法实现引用传递的操作。
落伍:实现一个数组的引用传递
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 ; //每个元素的内容乘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.0 ;
int max = data[0] ; // 假设第一个是最大值
int min = data[0] ; // 假设第一个是最小值
for (int x = 0;x < data.length ;x ++ ) {
if (data[x] > max) { // 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) ;
}
// 要求接收一个int型的数组
public static void printArray(int temp []) {
for (int x = 0; x < temp.length ; x++) {
System.out.println(temp[x]) ;
}
}
}
主方法所在的类往往被称为主类,那么既然是主类肯定不希望涉及到过于复杂的功能。在进行开发的过程之中,主方法本身就相当于是一个客户端,而对于客户端的代码应该尽量简单一些,所以这个时候最好的做法是将这一系列的计算过程交给单独的程序类去完成。
范例:改善操作设计
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) { // 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()) ;
}
}
此时的主类就好比我们使用电脑一样,只关心如何操作,而具体的操作过程被类进行包装。
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第20章:接口的定义与使用:课时91:代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时29:数组与方法
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时26:数组引用传递分析
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时34:对象数组
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第30章:链表的定义与使用:课时139:根据索引取得数据
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第27章:异常的捕获及处理:课时119:异常处理流程
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第23章:包的定义及使用:课时104:生成jar文件
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第30章:链表的定义与使用:课时134:链表实现简介