Java方法的定义和使用(部分)


现在所讲的方法只是方法定义格式,只属于Java方法定义的其中一种格式。而完整的组成方式将逐步渗透。
了解:

  • 方法的定义原则
  • 方法的重载操作
  • 方法的递归调用(了解)

方法的基本定义(重点

方法(Method)在一些书中也会有人将其称为函数(Funtion),但是两者的含义是完全相同的。那么什么是方法?为什么需要方法?所谓的方法就是指将一段代码封装在一个结构体之中,并且这个结构体可以被开发者随时进行调用。下面来看一下方法定义的语法(这里的语法指的是主类中定义的方法,并且由主方法直接调用)。
在这里插入图片描述
返回值类型可以设置为两种:

  • Java中的数据类型:基本类型、引用类型,如果现在又返回的内容,则需要用return返回;
  • 不返回任何结果:void;
    范例:定义一个没有参数,没有返回值的方法
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;
	}
}

在这里插入图片描述
两类操作完成的是同一个功能,但是很明显,在调用的时候利用方法重载的操作会更加的简单。
但是在进行方法重载的时候有一项重要的说明——关于返回值问题。在方法重载的时候本身只规定了参数的类型与个数不同,但是并没有针对于返回值的类型是否相同进行限制。但是从实际来讲,方法重载时返回值类型一定要相同。
方法重载时返回值类型可以不同,但是从开发标准来讲应该是相同的。

方法的递归调用(了解)

如果以开发中出现的编写代码为主的话,递归操作几乎不会出现,但是如果要想分析一些开发工具原理的话,那么就必须使用递归。递归是迈入数据结构的第一步。但是这并不是说一下子就可以理解递归,相反,如果想理解递归操作,那么必须熟练掌握以下代码。
所谓的递归就是指方法自己调用自己的情况。而对于递归的操作一般都要求满足于如下形式:

  • 递归必须在方法上进行;
  • 递归中必须有明确的结束条件;
  • 递归的过程中必须进行结束条件的变更。
    范例:利用while循环实现一个累加操作
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

对于此代码的调用分析如下:

  • 第一次调用(主方法):return 100+sum(99);
  • 第二次调用(sum(99)方法):return 99+sum(98);
  • 第二次调用(sum(98)方法):return 98+sum(97);
  • 倒数第二次调用(sum(2)方法):return 2+sum(1);
  • 最后一次调用(sum(1)方法):if判断满足,return 1;
    最终变为了:return 100+99+98+…+3+2+1(if语句);
    实际上递归操作有一件很可怕的影响:由于其操作所占用的时间过长,那么有可能会造成内存溢出,导致程序出现问题,所以如果不是必须的情况下,不建议使用递归操作。

总结

  • 方法的定义结构,但是本次的方法有限制性:只能够在主类中定义由主方法进行调用;
  • 方法的重载:方法名称相同,参数类型或这个数不同。方法重载对返回值类型没有要求,但是一定要统一返回值类型。
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值