方法(Method)在一些书中也会有人将其称为函数(Funtion),但是两者的含义是完全相同的。那么什么是方法?为什么需要方法?所谓的方法就是指将一段代码封装在一个结构体之中,并且这个结构体可以被开发者随时进行调用。下面来看一下方法定义的语法(这里的语法指的是主类中定义的方法,并且由主方法直接调用)。
返回值类型可以设置为两种:
public class Hello {
public static void main(String args[]){
printlnInfo();//调用方法printlnInfo
printlnInfo();//调用方法printlnInfo
}
public static void printlnInfo(){//此方法没有参数没有返回值
System.out.println("*************!");
System.out.println("*Hello World*!");
System.out.println("*************!");
}
}
此时方法被调用了两次,
方法就是留给用户进行重复调用的。
范例:定义一个可以接收参数的方法
public class Hello {
public static void main(String args[]){
printlnInfo(10);//调用方法printlnInfo
printlnInfo(999);//调用方法printlnInfo
}
public static void printlnInfo(int age){
if(age>250){
System.out.println("怕不是个人吧。");
}else{
System.out.println("您的年龄:"+age);
}
}
}
实际上在进行方法编写的时候有其自己的定义格式:要求定义方法名的第一个单词首字母小写,其后的单词首字母大写。
那么以上定义了无参无返回值,有参无返回值的方法,下面定义有参数有返回值的方法。
范例:定义一个加法操作
public class Hello {
public static void main(String args[]){
int result=add(10,20);//由于返回的是int型数据,所以可以利用变量接收
System.out.println(result);
System.out.println(add(100,300));//直接将方法的返回值输出
}
public static int add(int x,int y){//如果传递的值是正数则计算
if(x<0){
return 0;//只要有返回值类型声明,那么必须使用return返回
}
if(y<0){
return 0;//只要有返回值类型声明,那么必须使用return返回
}
return x+y;//只要有返回值类型声明,那么必须使用return返回
}
}
在学习循环语句的时候学习过break和continue语句,这两个语句主要是进行循环控制,合理的利用可以让循环之后的代码不再执行,但是必须与if判断一起使用。
同样的操作在方法中也提供,如果方法中使用了void说明,那么就可以在方法执行过程中直接利用return结束方法调用。
范例:利用return结束方法调用
public class Hello {
public static void main(String args[]){
print(10);
print(1000);
}
public static void print(int age){//此时方法么有返回值
if(age>250){
return;//后续代码不在执行,前提:方法必须返回void
}
System.out.println("年龄是:"+age);
}
}
不管什么情况,只要是在return之后的代码都不再执行,但是需要区分的是,如果方法返回的是void,那么就可以直接写return,但是如果方法本身有返回值,那么就必须在编写return的同时返回内容。
实际开发中是否使用方法有两个决定性原则:
方法重载指的是方法名称相同,参数的类型和个数不同。为了更加理解方法重载的意义,有这样的要求:现在要求在不使用方法重载的情况下定义有三个加法操作,包括两个整型相加,三个整型相加及两个小数相加。设计如下:
public class Hello {
public static void main(String args[]){
System.out.println("两个整数相加:"+add1(10,20));
System.out.println("三个整数相加:"+add2(10,20,30));
System.out.println("两个小数相加:"+add3(10.1,20.2));
}
public static int add1(int x,int y){
return x+y;
}
public static int add2(int x,int y,int z){
return x+y+z;
}
public static double add3(double x,double y){
return x+y;
}
}
第三个结果是Java的bug,不用管,以后会解决。
如果说功能相同的方法名字不一样,那么在调用的时候是实在是太麻烦了。所以这样的情况在最好的解决方案就是利用函数重载。
范例:利用重载解决
调用重载方法时会根据传递的参数类型以及个数调用不同的方法体执行。
public class Hello {
public static void main(String args[]){
System.out.println("两个整数相加:"+add(10,20));
System.out.println("三个整数相加:"+add(10,20,30));
System.out.println("两个小数相加:"+add(10.1,20.2));
}
public static int add(int x,int y){
return x+y;
}
public static int add(int x,int y,int z){
return x+y+z;
}
public static double add(double x,double y){
return x+y;
}
}
两类操作完成的是同一个功能,但是很明显,在调用的时候利用方法重载的操作会更加的简单。
但是在进行方法重载的时候有一项重要的说明——关于返回值问题。在方法重载的时候本身只规定了参数的类型与个数不同,但是并没有针对于返回值的类型是否相同进行限制。但是从实际来讲,方法重载时返回值类型一定要相同。
方法重载时返回值类型可以不同,但是从开发标准来讲应该是相同的。
如果以开发中出现的编写代码为主的话,递归操作几乎不会出现,但是如果要想分析一些开发工具原理的话,那么就必须使用递归。递归是迈入数据结构的第一步。但是这并不是说一下子就可以理解递归,相反,如果想理解递归操作,那么必须熟练掌握以下代码。
所谓的递归就是指方法自己调用自己的情况。而对于递归的操作一般都要求满足于如下形式:
public class Hello {
public static void main(String args[]){
int x=1;
int sum=0;
while(x<=100){
sum+=x;
x++;
}
System.out.println(sum);//5050
}
}
那么下面将此代码修改为递归的调用形式。
范例:递归调用
public class Hello {
public static void main(String args[]){
System.out.println(sum(100));
}
public static int sum(int num){//进入到方法之中
if(num==1){//已经到了最后一个数据了
return 1;//直接返回1
}
//100+99+98+...+2+1
return num+sum(num-1);//每次修改结束条件
}
}//5050
对于此代码的调用分析如下: