1.7、方法(重点)
方法在其他语言中有时候也成为函数,不管是什么名字,齐最终功能是一样的。
1.7.1、方法的基本概念
方法就是一段可重复调用代码段,在java中如果某些代码希望可以被重复调用的时候,就可以使用方法进行定义,但是在定义的时候,因为现在要求所有的方法是可以由主方法直接调用的,所以,此时的方法声明格式如下:
public static 返回值类型 方法名称(参数列表){
[return 返回值 ;]
}
对于返回值来讲,在java中可以返回基本数据类型和引用数据类型,如果一个方法,不希望有任何返回值,则直接使用void声明即可。
在定义方法的时候方法名称也有命名要求,第一个单词的首字母小写,之后每个单词的首字母大写。
**范例:**定义一个方法
public class MethodDemo01{
public static void main(String args[]){
printMsg() ;
printMsg() ;
printMsg() ;
}
public static void printMsg(){ // 定义了一个方法
System.out.println("hello world!!!") ;
}
}
在方法上也可以有返回值,如果写了返回值类型,则必须使用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 ; // 把结果返回
}
}
以上的代码因为在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!!!") ;
}
}
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 ; // 把结果返回
}
}
不管如何操作,都是完成的加法操作,既然是加法操作使用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 ; // 把结果返回
}
}
方法的重载明白之后,回顾:
public class MethodDemo06{
public static void main(String args[]){
System.out.println(1) ;
System.out.println(1.1f) ;
System.out.println('a') ;
}
}
发现使用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 ; // 把结果返回
}
}
以上的两个方法只是返回值的结果不同,但是参数的类型或个数都是完全一样的。
以上的操作不算是方法的重载,因为参数的类型和个数一样就已经失去了重载的意义。
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) ;
}
}
以上的操作也可以通过方法的递归调用完成,但是如果想要使用递归调用,则必须注意一点:递归调用的时候一定要有明确的调用结束条件
**范例:**使用递归的方式完成以上的操作
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 ;
}
}
}
一般在开发中不建议过多的使用递归调用,因为有可能会造成内存溢出。
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]) ;
}
}
}
以上的操作中,将一个整型数组传递给了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 ;
}
}
只需要在返回类型上明确的写出要返回的数组类型即可,现在使用的是整型数组,如果使用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]) ;
}
}
}
除了可以进行排序的操作之外,也可以进行数组的拷贝操作,例如:
·数组一: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]) ;
}
}
}
以上的操作是专门完成数组的部分拷贝功能的,参数的意义如下:Sytem.arraycopy(x,4,y,3,3);
System.arraycopy(源数组,源数组的开始点,目标数组,目标数组的开始点,拷贝的长度);
转载请注明来源