1.7、方法

1.7、方法(重点

方法在其他语言中有时候也成为函数,不管是什么名字,齐最终功能是一样的。

1.7.1、方法的基本概念

方法就是一段可重复调用代码段,在java中如果某些代码希望可以被重复调用的时候,就可以使用方法进行定义,但是在定义的时候,因为现在要求所有的方法是可以由主方法直接调用的,所以,此时的方法声明格式如下:

public static 返回值类型 方法名称(参数列表){
    [return 返回值 ;]
}
language-java复制代码

对于返回值来讲,在java中可以返回基本数据类型和引用数据类型,如果一个方法,不希望有任何返回值,则直接使用void声明即可。

在定义方法的时候方法名称也有命名要求,第一个单词的首字母小写,之后每个单词的首字母大写。

**范例:**定义一个方法

public class MethodDemo01{
	public static void main(String args[]){
		printMsg() ;
		printMsg() ;
		printMsg() ;
	}
	public static void printMsg(){		// 定义了一个方法
		System.out.println("hello world!!!") ;
	}
}
language-java复制代码

在方法上也可以有返回值,如果写了返回值类型,则必须使用return返回一个具体的内容。

**范例:**定义一个执行加法操作的方法

public class MethodDemo02{
	public static void main(String args[]){
		int x = add(10,20) ;
		System.out.println(x) ;
		System.out.println(add(100,200)) ;
	}
	public static int add(int i,int j){		// 定义了一个方法
		int temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
}
language-java复制代码

以上的代码因为在add()方法中存在了返回值,所以必须使用return进行返回,但是在java的编写中也存在了另外一种方法的操作问题,就是在使用void声明的时候也可以使用return,返回到方法的调用处。

public class MethodDemo03{
	public static void main(String args[]){
		fun(1) ;
		fun(3) ;
	}
	public static void fun(int i){		// 定义了一个方法
		if(i==3){
			return ;	// 返回到方法的调用处
		}
		System.out.println("hello world!!!") ;
	}
}
language-java复制代码

1.7.2、方法的重载(绝对重点

在方法的操作中又一个特别重要的概念就是方法的重载,所谓方法的重载,就是指方法名称相同,但是参数的类型或个数不同。

例如:之前定义的add()方法,这个方法只能接收两个整形数据相加,如果现在要求可以同时满足多个数字相加,而且也可以执行小数相加的话,最笨的操作将使用如下的形式:

public class MethodDemo04{
	public static void main(String args[]){
		System.out.println(add1(100,200)) ;
		System.out.println(add2(100,200,300)) ;
		System.out.println(add3(100.3f,200.6f)) ;
	}
	public static int add1(int i,int j){		// 定义了一个方法
		int temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
	public static int add2(int i,int j,int k){		// 定义了一个方法
		int temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j + k ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
	public static float add3(float i,float j){		// 定义了一个方法
		float temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
}
language-java复制代码

不管如何操作,都是完成的加法操作,既然是加法操作使用add()作为方法名称是最合适的。那么这个时候完全可以使用方法重载的概念进行修改。

public class MethodDemo05{
	public static void main(String args[]){
		System.out.println(add(100,200)) ;
		System.out.println(add(100,200,300)) ;
		System.out.println(add(100.3f,200.6f)) ;
	}
	public static int add(int i,int j){		// 定义了一个方法
		int temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
	public static int add(int i,int j,int k){		// 定义了一个方法
		int temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j + k ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
	public static float add(float i,float j){		// 定义了一个方法
		float temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
}
language-java复制代码

方法的重载明白之后,回顾:

public class MethodDemo06{
	public static void main(String args[]){
		System.out.println(1) ;
		System.out.println(1.1f) ;
		System.out.println('a') ;
	}
}
language-java复制代码

发现使用System.out.println()可以打印任何数据类型的内容,那么证明,此方法也被重载了。

public class MethodDemo07{
	public static void main(String args[]){
		System.out.println(add(100,200)) ;
		System.out.println(add(100,200)) ;
	}
	public static int add(int i,int j){		// 定义了一个方法
		int temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
	public static float add(int i,int j){		// 定义了一个方法
		float temp = 0 ;	// 定义了一个临时的局部变量,方法执行完毕之后,此变量就消失了
		temp = i + j ;	// 执行加法操作
		return temp ;	// 把结果返回
	}
}
language-java复制代码

以上的两个方法只是返回值的结果不同,但是参数的类型或个数都是完全一样的。

以上的操作不算是方法的重载,因为参数的类型和个数一样就已经失去了重载的意义。

1.7.3、方法的递归调用

​ 递归调用指的是一个方法自己不断的调用自己

**例如:**现在要求执行一个由1累加到100的操作

public class MethodDemo08{
	public static void main(String args[]){
		int sum = 0 ;
		for(int i=1;i<=100;i++){
			sum += i ;
		}
		System.out.println(sum) ;
	}
}
language-java复制代码

以上的操作也可以通过方法的递归调用完成,但是如果想要使用递归调用,则必须注意一点:递归调用的时候一定要有明确的调用结束条件

**范例:**使用递归的方式完成以上的操作

public class MethodDemo09{
	public static void main(String args[]){
		System.out.println(add(100)) ;
	}
	public static int add(int x){
		if(x>0){
			return x + add(x-1) ;
		}else{
			return 0 ;
		}
	}
}
language-java复制代码

一般在开发中不建议过多的使用递归调用,因为有可能会造成内存溢出。

1.7.4、方法与数组

之前的所有操作代码中,所有的方法都是接受了普通的数据类型,当然,一个方法本身也可以接受引用数据类型。

public class MethodDemo10{
	public static void main(String args[]){
		int x[] = {1,2,3,4,5,6} ;
		print(x) ;	// 接收数组
	}
	public static void print(int temp[]){	// 此方法接收数组
		for(int i=0;i<temp.length;i++){
			System.out.println("temp["+i+"] = " + temp[i]) ;
		}
	}
}
language-java复制代码

以上的操作中,将一个整型数组传递给了print()方法之中,并在print()方法中执行输出操作。以上的操作可以画出如下的图形:

这个时候实际上相当于x和temp都同时指向一个空间,所以temp输出的内容就是数组x中的内容。

既然,方法可以接收数组,那么方法也可以返回一个数组。

public class MethodDemo11{
	public static void main(String args[]){
		int x[] = init() ;	// 通过方法取得内容
		print(x) ;	// 接收数组
	}
	public static void print(int temp[]){	// 此方法接收数组
		for(int i=0;i<temp.length;i++){
			System.out.println("temp["+i+"] = " + temp[i]) ;
		}
	}
	public static int[] init(){
		int y[] = {1,2,3,4,5,6} ;
		return y ;
	}
}
language-java复制代码

只需要在返回类型上明确的写出要返回的数组类型即可,现在使用的是整型数组,如果使用float数组,则直接写上“float[]”即可

1.7.5、与数组操作相关的方法(重点

在学习数组的时候经常会出现数组的排序操作,在java中为了简化这种操作的复杂度,专门提供了数组排序的操作代码。

public class MethodDemo12{
	public static void main(String args[]){
		int x[] = {1,2,3,4,5,60,10,7,7,11} ;
		java.util.Arrays.sort(x) ;	// 语句专门用于排序
		print(x) ;	// 接收数组
	}
	public static void print(int temp[]){	// 此方法接收数组
		for(int i=0;i<temp.length;i++){
			System.out.println("temp["+i+"] = " + temp[i]) ;
		}
	}
}
language-java复制代码

除了可以进行排序的操作之外,也可以进行数组的拷贝操作,例如:

​ ·数组一:11、22、33、44、55、66、77、88、99

​ ·数组二:1、2、3、4、5、6、7、8、9

​ ·现在要求将数组一中的部分内容拷贝到数组二中:1、2、3、55、66、77、7、8、9

那么想要实现这样的操作,也可以直接利用java中提供的支持:

public class MethodDemo13{
	public static void main(String args[]){
		int x[] = {11,22,33,44,55,66,77,88,99} ;
		int y[] = {1,2,3,4,5,6,7,8,9} ;
		System.arraycopy(x,4,y,3,3) ;
		print(y) ;	// 接收数组
	}
	public static void print(int temp[]){	// 此方法接收数组
		for(int i=0;i<temp.length;i++){
			System.out.println("temp["+i+"] = " + temp[i]) ;
		}
	}
}
language-java复制代码

以上的操作是专门完成数组的部分拷贝功能的,参数的意义如下:Sytem.arraycopy(x,4,y,3,3);

​ System.arraycopy(源数组,源数组的开始点,目标数组,目标数组的开始点,拷贝的长度);


转载请注明来源