Day 8 方法

Day 8 方法

1. 返回值【难点】
1.1 从生活中找出什么是返回值
以餐馆吃饭为例:
	烤羊排 138元一份               声明方法
	付款138元                     给予实际参数
	厨师做好烤羊排,服务员端菜上桌     厨师完成操作,给予的返回值
1.2 代码中返回值需要使用的关键字
return : 
	返回
	作用:
		1. 结束当前方法的执行
		2. 返回return之后的数据到方法之外,要求返回值的数据类型和方法声明位置所告知调用者的返回值数据类型一致【数据类型一致化】
1.3 完成一个无参数有返回值的方法
1.3.1 方法分析
需求
	give me  five
	返回一个正整数 5
	
固定格式:
	public static
返回值类型:
	返回值为5,为int类型
方法名:
	giveMeFive
形式参数列表:
	这里是返回一个数据5,不需要参数
	()
【方法声明】
	public static int giveMeFive()
	
	@return  
		在文档注释中告知调用者,当前方法的返回值是什么类型,怎么解释,什么含义	
1.3.2 方法实现和文档注释
/**
* 该方法返回一个整数5
*
* @return 返回一个整数5
*/
public static int giveMeFive() {
    return 5;
}
1.3.3 方法调用过程
class Demo1 {
    public static void main(String[] args) {
	/*
	调用一个带有返回值的方法
	返回值怎么用?
		
	方法的返回值返回到方法之外,调用者决定
	当前结果的使用方式
	*/
	int ret = giveMeFive();
        System.out.println(ret);
    }
	
    /**
    * 该方法返回一个整数5
    *
    * @return 返回一个整数5
    */
    public static int giveMeFive() {
	return 5;
    }
}
1.3.4 小总结
1. 返回值的关键字为 return
2. 在带有返回值的方法中,需要在文档注释中加入 @return 告知调用者返回值的类型、含义
3. 方法返回值类型和方法体内返回数据类型要求一致,如果不一致,报错【数据类型不一致】
4. 方法的返回值处理方式,由程序员自己决定
1.3.5 小练习
/*
无参数有返回值的方法
需求:
	返回一个大写字符'A'
*/
class Method2 {
    public static void main(String[] args) {
	char ch = 'a';
		
	System.out.println("方法运行之前 :" + ch);
	ch = giveMeLetter();
	System.out.println("方法运行之后 :" + ch);
    }
	
    /**
    * 该方法返回一个大写字符'A'
    *
    * @return 返回值类型为char
    */
    public static char giveMeLetter() {
	return 'A';
    }
}
1.4 完成一个有参数有返回值的方法
/*
完成一个有参数有返回值的方法
需求:
	计算两个int类型数据之和,通过返回值返回到方法外
	
	固定格式:
		public static
	返回值类型:
		int 可以使用
		long 也可以
	方法名:
		getSumOfTwoNumber
	形式参数列表:
		两个int类型数据之和,多个参数情况下,逗号隔开
		(int num1, int num2)
	【方法声明】
		public static int getSumOfTwoNumber(int num1, int num2)
*/
class Method3 {
    public static void main(String[] args) {
		
	int sum = 0;
		
	System.out.println("方法运行之前 :" + sum);
	sum = getSumOfTwoNumber(10, 20);
	System.out.println("方法运行之后 :" + sum);
    }
    /**
    * 该方法时传入两个int类型数据,返回值为两数之和
    *
    * @param num1 int类型数据
    * @param num2 int类型数据
    * @return 返回值为int类型,是两个int类型数据之和
    */
    public static int getSumOfTwoNumber(int num1, int num2) {
	return num1 + num2;
    }
}

总结:
    调用带有多参数的方法,要求传入的钱参数数据类型、个数和顺序必须和方法声明一致
1.5 练习
/*
要求:
	1. 方法功能单一化,越单一越好
		a. 可移植性高
		b. 复用度强
		c. 模块明确
	2. 不允许在方法中使用Scanner从键盘上获取数据
		a. 不符合方法功能单一化
		b. Scanner不是我们后期开发的核心知识点
*/
/*
封装一个方法,返回两个整数中大的那个
*/
class Method4 {
    public static void main(String[] args) {
	maxOfNumber(15, 63);
    }
	
    /**
    * 该方法是返回两个整数中大的那个
    *
    * @param num1 int类型数据
    * @param num2 int类型数据
    * @return 返回两个int类型数据中大的那个,如果相同返回其中一个即可
    */
    public static int maxOfNumber(int num1, int num2) {
	/*
	当前方法体存在2个return,而在开发中return的使用是需要
	有一些注意事项的
	1. 尽量减少return的使用  增强阅读性,代码逻辑更明确
			
	if (num1 > num2) {
	    return = num1;
	} else {
	    return = num2;
	}
	*/
		
	/*
	当前方法使用到假设的思想,可以提供代码对的阅读性
	并且简化代码逻辑,减少return的使用
		
	int max = num1;
		
	if (max < num2) {
	    max = num2;
	}
		
	return = max;
	*/
		
        /*
        三目运算符/条件运算符
        	格式:
        		条件 ? true处理方式 : false处理方式;
        		是简化版、功能缺失版的if else 结构
        	建议:
        		在一些简单的逻辑里可以使用,可以提高一定的效率
        */
	return num1 > num2 ? num1 : num2;
    }
}
/*
封装一个方法,返回两个浮点数的较小的那个

封装一个方法,来判断一个字符是否为大写字母
是,返回true,否则返回false
*/
class Method5 {
    public static void main(String[] args) {
		
	boolean ret = isMyUpper('D');
	System.out.println(ret);
		
	double min = minOfNumber(3.5, 4.9);
	System.out.println(min);
    }
	
    /**
    * 封装一个方法,来判断一个字符是否为大写字母
    *
    * @param char 字符数据类型
    * @return 如果字符是大写字母返回true,否则返回false
    */
    public static boolean isMyUpper(char ch) {
	return ch >= 'A' && ch <= 'Z';
    }
	
    /**
    * 封装一个方法,返回两个浮点数的较小的那个
    *
    * @param num1 double类型数据
    * @param num2 double类型数据
    * @return 两个浮点数的较小的那个
    */
    public static double minOfNumber(double num1, double num2) {
	return num1 < num2 ? num1 : num2;
    }
}
/*
封装一个方法,来判断一个字符是否是数字字符
	如果是,返回true,否则返回false!
	
封装一个方法,来判断一个字符是否是英文字母
	如果是,返回true,否则返回false!
*/
class Method6 {
    public static void main(String[] args) {
		
	boolean ret = isMyNumber('6');
	System.out.println(ret);
		
	System.out.println(isEnglish('b'))
    }
	
    /**
    * 封装一个方法,来判断一个字符是否是数字字符
    *
    * @param ch 字符类型数据
    * @return 判断一个字符是否是数字字符,是返回true,否则返回false
    */
    public static boolean isMyNumber(char ch) {
	return ch >= '0' && ch <= '9';
    }
	
    /**
    * 封装一个方法,来判断一个字符是否是英文字母
    *
    * @param ch 字符类型数据
    * @return 判断一个字符是否是英文字母,是返回true,否则返回false
    */
    public static boolean isEnglish(char ch) {
	return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
    }
}
class Method7 {
    public static void main(String[] args) {
		
	System.out.println(toMyLower('a'));
		
		
	reverse(123569);
		
    }
	
    /**
    * 封装一个方法,传入一个字符,如果是大写则转化为小写然后返回,否则保持不变返回
    *
    * @param ch char字符类型数据
    * @return 如果是大写则转化为小写然后返回,否则保持不变返回
    */
    public static char toMyLower(char ch) {
	if (ch >= 'A' && ch <= 'Z') {
	    ch += 'a' - 'A';
	}
	return ch;
    }
	
    /**
    * 传入一个数据,逆序展示此数据 比如1234  输出为4321
    *
    * @param num int类型数据
    */
    public static void reverse(int num) {
	while (num > 0) {
	    System.out.print(num % 10);
	    num /= 10;
	}
    }
}
class Method8 {
    public static void main(String[] args) {
		
	System.out.println(cube(12));
		
	System.out.println(isLeapYear(2000));
		
	judgePositiveNunber(25);
    }
	
    /**
    * 表达式(立方) 编写程序,计算该数的立方
    *
    * @param num 传入参数事业个double类型
    * @return double类型返回值,防止数据溢出
    */
    public static double cube(double num) {
	return num * num * num;
    }
	
    /**
    * 输入一个年份,判断是否为闰年
    *
    * @param year int类型数据,年份
    * @return 如果是闰年返回true,否则返回false
    */
    public static boolean isLeapYear(int year) {
	return (0 == year % 4 && 0 != year % 10) || 0 == year % 400;
    }
	
    /**
    * 表达式(正数判断)传入一个数字, 判断这个数是否是正数(是,打印YES,不是输出NO)
    *
    * @param num int类型数据
    */
    public static void judgePositiveNunber(int num) {
	System.out.println(num > 0 ? "YES" : "NO");
    }
}
2. 局部变量【小坑】
2.1 思考代码
class Method9 {
    public static void main(String[] args) {
        int num = 5;
        test(num);
        
        // 5 为什么是5
        System.out.println(num);
    }
    
    public static void test(int num) {
        num = 10;
    }
}
2.2 概念
局部变量概念:
	除class大括号之外,其他大括号以内的变量都可以认为是局部变量
	方法、if else、switch case、循环大括号里都算
	
作用域:
	局部变量有且只能在当前所在大括号以内使用且有效,超出范围无法使用
	
生存期:
	在大括号以内,和作用域一样
for (int i = 1; i <= 10; i++) {
    if (i > 5) {
        int num = 10;
    }
	System.out.println(num);
}
System.out.println(num);

	编译报错
    因为num变量定义在if 大括号以内,作用域和生存期有且只在if分支结构大括号以内,超出范围无效
        
        
for (int i = 1; i <= 10; i++) {
    
}

for (int i = 1; i <= 10; i++) {
    
}

	不冲突,两个for循环中,i循环变量分别属于不同的大括号以内,不同的作用域空间
    
    
for (int i = 1; i <= 10; i++) {
    for (int i = 1; i <= 10; i++) {
        
    }
}
	
	编译报错
	冲突,在外层for循环中,已经定义了循环变量i,内层循环重新定义了循环变量,也是i,重复定义变量
2.3 总结
1. 关注局部变量的作用域和生存期范围,二者同步并且都在对应的大括号以内
2. 变量未定义不能使用,要保证代码执行原则:  自上而下、从左至右
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值