Java方法&重载

详谈?略谈?Java方法&重载

定义: Java方法是语句的集合,它们在一起执行一个功能。
	1.方法是解决一类问题的步骤的有序组合
	2.方法包含于类或对象中
	3.方法在程序中被创建,在其他地方被引用
格式:
[修饰符[权限修饰符]  [静态修饰符]]        返回值类型        方法名 ([形参列表]){
					方法体.......
}

在这里插入图片描述

修饰符:

修饰符分为多种修饰符 , 有 权限修饰符 、 静态修饰符 、 final 修饰符等 ; 每种修饰符都有自己的作用
public : 意味公共的 公开的 , 这个方法在外界能够访问 ;
static : 标识方法是静态的 , 静态的方法可以被静态的方法调用 , 静态方法可以访问静态的成员变量 ;

返回值类型

很多语言都有函数 , java中没有函数 , java中用方法来代替函数;
可以把有返回值的方法称之为函数 , 没有返回值的方法称为过程 ;
方法是完成了一个具体的功能 , 是一条或多条的组合 , 在完成功能之后 , 方法可能会有一个值需要返回;
在定义方法的时候 , 返回值类型处必须定义 ;

定义方法时 , 根据方法的要求和完成的任务来定义返回值类型:
有值返回 , 则定义匹配的返回值类型 , 在方法体结束的地方使用 return + 值来返回结果(必须步骤)
没有值要返回 , 定义返回值类型为 void ;
返回值类型为 void , 可以单独使用 return 关键字 , 不可以使用 return + 值 ;

注意 : 返回值类型只能定义一个 , return返回值得时候 也只能返回一个结果 ;

return 关键字总结
return 有两种用法 :
1. 用在没有定义返回值的方法中 , 可以用来结束当前方法 , 此种行为不是必须的 , 使用return时 要注意防止出现不可访问的语句这种错误;
2. 用在定义了返回值的方法中可以用来结束方法并且返回一个值 , 值返回到方法的调用处 , 这是必须的行为 , 在有返回值的方法中 return 不可单独出现 , 后面必须跟一个符合返回值类型要求的值;

返回值的接收
如果调用了有定义返回值的方法 , 那么我们可以使用 该返回值类型(或大于该类型)的变量来接收这个值 , 可以选择不接收;
如果调用了没有定义返回值的方法 , 则不可以接收调用的结果 ;
如果调用的方法有返回值 , 则可以把 方法调用 放置输出语句小括号中 ;

方法名字

方法必须有一个名字 , 要符合标识符的规则 ,被调用时依靠方法的名字来调用;
同一个类中的方法 , 名字可以相同 , 但是要解决方法的调用问题 (方法的重载);

形参列表
形参列表可以让方法具有更好的重用性 , 可以满足更多的需求 ; 
形参列表不是必须的 ; 
如果存在就可以大大的提高方法的适用性 ;
定义形参列表格式
在方法的小括号里可以定义形参列表 ; 形参列表可以有多个形参 ;
格式 : 类型 名字 ; 多个形参用逗号隔开 ; 
类型可以是任意类型 ; 形参之间的顺序也没有要求 ; 但形参名字不能相同;

形参的优势:
方法的功能本身不变,可以由调用者进行个性化定制 ;

方法定义形参后需注意的地方

1. 如果方法定义了形参 , 那么在该方法被调用时 , 必须传递实参 , 否则调用失败 ;
2. 方法定义了形参 相当于方法声明了局部变量 在方法体就不能够再度声明 同名的变量了

形参==局部变量 , 形参是特殊的局部变量 , 只需要声明 不需要赋值就可以在方法中使用 , 它的作用域是方法内 , 形参在被调用时赋值 , 赋值的就是实参
**形参的优势:**方法的功能本身不变,可以由调用者进行个性化定制 ;
在这里插入图片描述

.
== 参考代码 ==

public class FParameter {

	/**
	 * 方法
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(add100());
		welcome();
		System.out.println(get(1));
		abc(1,"1"); //1 是实际参数 叫 实参
		addxy(100,200);
	}

	/**
	 * 完成任意范围的正数累加
	 * @param start  开始数字
	 * @param end    结束数字
	 * @return       累加之和
	 */
	private static int addxy(int start,int end) {
		int sum;
		if( start > end){
			sum = start;
			start = end;
			end = sum;
		}
		sum = 0;
		for(;start <= end ;start++)
			sum += start;
		return sum;
	}

	/**
	 * 方法调用时 实参和形参必须一一对应  规定了多少的形参 必须传递多少的实参
	 * 实参的顺序 必须和形参规定相同
	 * @param x
	 * @param str
	 */
	private static void abc(int x, String str) {
		// x str 是形式参数  叫做 形参
//		int x =1; //定义了形参 等价于声明了变量 再次定义会报错
		System.out.println("FParameter.abc()");
	}

	/**
	 * 定义方法 功能:计算1-100的累加 并把结果返回
	 */
	public static int add100(){
		int sum = 0;
		for(int i= 1;i < 101; i++){
			sum += i;
		}
		return sum;   //返回规定好的值
	}
	
	/**
	 * 定义一个欢迎界面
	 */
	public static void welcome(){
		System.out.println("Wlecome to xinxin shop");
		System.out.println("======================");
		System.out.println("**********************");
		System.out.println("There is the flesh fruits");
	}
	
	/**
	 * 定义方法 可以计算半径为1.5的圆的面积和周长
	 * 输出周长结果
	 * 输出面积
	 * Math.PI 等价于 3.14~
	 */
	public static double get(double r){
		System.out.println(2 * Math.PI * r);
		return r * r * Math.PI;
	}
}

方法的重载

在同一个类中 , 方法的名字相同 , 但是形参列表不同 , 这种行为就是方法的重载
方法同名报错原因是: 在调用时无法区分调用的是那个方法 ;
我们学了方法的形参列表之后 ; 发现调用方法不仅仅是名字 ; 还需要根据情况来提供 实参;
最终调用是那个方法 是由名字和实参 来共同决定的 ;
#####方法形参列表不同表现在三个方面

  1. 方法的形参个数不同
  2. 方法的形参类型不同
  3. 方法的形参的顺序不同 : 在这里要注意 形参的名字没有实际的意义 类型才是决定因素

递归

递归就是自己调用自己 , 来解决某些问题
方法可以被反复调用;
方法可以自己调用自己;

应用场景 : 需要效率而不在乎内存消耗的场景
有些特殊场景 使用循环无法解决,或编码十分复杂
案例分析:

/**
 *	天龙八部
 *	段正淳有多个女儿
 *	假设有7个女儿 
 *	如果问老7 , 今年多大 ?  老7回答 , 我比老6小2岁
 *	如果问老6 , 今年多大 ?  老6回答 , 我比老5小2岁
 *	如果问老5 , 今年多大 ?  老5回答 , 我比老4小2岁
 *	如果问老4 , 今年多大 ?  老4回答 , 我比老3小2岁
 *
 *	如果问老大 , 今年多大 ?  老大回答 , 我今年40岁
 *
 */
public class Fac {
	public static void main(String[] args) {
		System.out.println(getAge(7));
	}
	
	/**
	 * 递归通用方法 
	 * @param i
	 */
	public static int getAge(int i ){
		if(i == 1)
			return 30;
		return getAge(i-1)-2;
		
		//return i == 1 ? 30 : getAge(i - 1) - 2;
	}
	
	
	// 获得老七的年纪
	public static int getAge7(){
		return getAge6()-2;
	}
	// 获得老六的年纪
	public static int getAge6(){
		return getAge5()-2;
	}
	// 获得老五的年纪
	public static int getAge5(){
		return getAge4()-2;
	}
	// 获得老四的年纪
	public static int getAge4(){
		return getAge3()-2;
	}
	// 获得老三的年纪
	public static int getAge3(){
		return getAge2()-2;
	}
	// 获得老二的年纪
	public static int getAge2(){
		return getAge1()-2;
	}
	// 获得老大的年纪
	public static int getAge1(){
		return 30;
	}
}

在这里插入图片描述
案例:


import java.util.Scanner;

public class WhileFac {

	/**
	 * 录入用户名 必须123才是正确 如果不对你们录到对为止
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*while (true) {
			int i = (int)(Math.random()*150);
			if (i == 123) {
				System.out.println("录入正确");
			}else{
				System.out.println("现在随机的数字是" + i + ",即将开启随机");
			}
		}*/
//		userInfo();
		getUser();
	}

	private static void userInfo() {
		// TODO Auto-generated method stub
		int i = (int)(Math.random()*150);
		if (i == 123) {
			System.out.println("随机成功");
			return;
		}else {
			System.out.println("现在随机的数字是" + i + ",即将开启随机");
			userInfo();
			
		}
	}
	
	private static int getUser(){
		Scanner sc = new Scanner(System.in);
		System.out.println("录入User");
		int u = sc.nextInt();
		if( u == 123)
			return u;
		return getUser();
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值