方法
方法简介
方法, 一听这个词我们能想到什么呢? 解决问题的方法, 方案.
聪明的你应该已经发现了. 同样的代码写了两遍. 作为一名合格的懒惰程序员, 这是绝对不允许的. 怎么办呢? 还记得刚开始的时候说的那个叫方法的东西么? 对了. 我们可以把”约”的功能单独设置成一个方法, 方案. 在我需要约的时候. 把这个方案拿出来用一下就OK了.
方法: 对功能或者动作的封装. 类似函数
目的: 把一个功能或者动作写好. 然后等待后面的程序来使用. 可以大大的简化我们的代码.
方法的定义
上节课说了方法是什么. 本小结跟大家说一说怎么写方法.
语法:
public static void 方法名(){
方法体
}
方法名() // 这里是调用方法
其中: public static void先照着写. 不用管. 你只需要给自己的方法起一个名字就可以了.
方法体: 这件事儿到底应该怎么做.
public static void work() { System.out.println("1.打开电脑"); System.out.println("2.插上网线,联网"); System.out.println("3.登录微信"); System.out.println("4.开始干活"); System.out.println("5.中途休息"); } public static void count100(){ for (int i = 0; i <= 100; i++) { System.out.println(i); } } public static void main(String[] args) { work(); System.out.println("中午了,吃饭,午休"); work(); count100(); }
带参数的方法
参数: 调用方法的时候给方法传递的信息.
语法:
public static void 方法名(参数){
方法体
}
方法名(参数)
参数两类:
在方法声明的位置的括号里写的内容被称为形参. 形式上. 你在调用该方法的时候需要给一个数据. 那接收数据的话, 咱么说过, 变量是用来保存数据的. 所以, 所谓的形参, 实际上就是声明一个变量
在方法被调用的地方给方法传递的具体的信息, 这个叫实参.
形参就是一个变量声明就可以了. 表示可以接受xxx类型的数据
实参必须是具体的数据, 可以是变量, 也可以直接是值.
注意: 一个方法可以有多个参数
public static void work(String place, String kind) { System.out.println("1.打开电脑:" + place); System.out.println("2.插上网线,联网"); System.out.println("3.登录微信"); System.out.println("4.开始干活:" + kind); System.out.println("5.中途休息"); } public static void main(String[] args) { work("公司", "学业务"); work("家", "学代码"); }
实参传递给形参时, 是按照位置进行传递的.
形参和实参的个数必须要匹配, 否则报错.
方法的返回值
带有返回值的方法:
public static 返回值类型 方法(参数){
方法体
}
public static String invest() { System.out.println("开户投资"); return "赚取收益"; } public static void main(String[] args) { invest();// 返回值也可以不接收. 不会报错 String ret = invest();// 接收返回值. 变量的数据类型必须和方法的返回值类型一致 System.out.println(ret); // System.out.println(invest()); }
注意:
- 如果方法没有返回值, 那么在方法声明的地方必须要写void. 不可以空着.
- 如果方法有返回值. 那么在方法声明的地方必须写出方法的返回值类型.
- 如果方法有返回值. 在方法内部必须使用return语句来返回数据.
- 方法的返回值必须和返回值类型一致.
- return语句执行之后, 方法就结束了. 后面不能执行任何代码.
以上5点必须遵守. 否则报错.
同时存在参数和返回值
给方法传递a和b计算a+b的结果并返回
public static int add(int a, int b) { return a + b; } public static void main(String[] args) { int c = add(10, 20); System.out.println(c); }
注意, 方法的返回值和参数之间并没有任何关系. 需要给方法传递信息就写参数. 需要返回数据就写返回值.
方法练习
我们把本章内的一些知识点综合在一起. 做做小练习.
写方法, 给方法传递两个整数a, b. 返回a和b中比较大的那个数.
//方案一 public static int compare(int a, int b){ if(a > b){ return a; } else { return b; } } //方案二 public static int compare(int a, int b){ return a > b ? a : b; }
方案二中使用的是三元运算. 又叫三目运算.
语法:
x ? y: z
如果x为真, 则y, 否则z
写方法, 把传入的数组翻转并返回.
public static int[] reverse(int[] arr) { int[] result = new int[arr.length]; int index = 0; for (int i = arr.length - 1; i >= 0; i--) { result[index] = arr[i]; index++; } return result; } public static void main(String[] args) { int[] shu = {1, 55, 2, 17, 8, 12, 5}; int[] res = reverse(shu); for (int i = 0; i < shu.length; i++) { System.out.println(res[i]); } } 5 12 8 17 2 55 1
方法的重载
啥叫重载? 重新加载. No. 假设, 现在我们写一个吃饭方法. 那我可以给方法传递一个参数. 叫饭.
public static void chi(String fan){
System.out.println(fan)
}
写完了. 也投入使用了. 很多人使用这个方法来吃饭. 突然有一天, 你灵光一闪. 不对啊. 我们不光吃饭啊. 还要吃菜啊. 那怎么办. 你肯定会想到. 简单. 加个参数就完了. 你这么想的话. 那你就太年轻了. 先不说加个参数对你有什么影响. 那些正在调用你原来吃饭方法的人怎么办…. 全都挂了. 那就再写一个方法? 可以.
public static void ?????????????(String fan, String cai){
System.out.println(fan);
System.out.println(cai);
}
别的都好弄. 这个名字怎么办…. 总不能叫chi2 吧. 都是吃东西. 怎么就排了个1和2. 好吧, 就算你加了2. 也会导致很多人产生这样的问题. 为什么chi传1个参数…chi2要传2个…在调用的时候就要小心翼翼. 因为参数传错了程序会崩掉的. 怎么样. 发现问题了吧. 那如果我再加个甜点呢? 再来个chi3???? NO. It’s terriable. 此时, 你需要这样一种机制. 能不能让方法的名字一样. 参数不一样呢? 可以~~
重载: 方法的名字相同, 参数的个数或者类型不同.
哇~ 有了这样一个理论基础. 这个chi就好写很多了
public class TestMethod6 { public static void chi(String fan){ System.out.println(fan); } public static void chi(String fan, String cai){ System.out.println(fan); System.out.println(cai); } public static void chi(String fan, String cai , String tiandian){ System.out.println(fan); System.out.println(cai); System.out.println(tiandian); } public static void main(String[] args) { chi("大米饭"); chi("大米饭", "西红柿炒鸡蛋"); chi("大米饭", "尖椒土豆丝", "哈根达斯"); } }
搞定. 我们发现, 在方法调用的时候. 程序会自动根据你给的参数类型和个数选择你要执行的方法.
再看一个
public static int add(int a, int b) { System.out.println("two int"); return a + b; } public static long add(int a, long b) { System.out.println("one int, one long"); return a + b; } public static double add(int a, double b) { System.out.println("one int ,one double"); return a + b; } public static void main(String[] args) { System.out.println(add(10, 20)); System.out.println(add(10, 20L)); System.out.println(add(10, 1.25)); }
重载: 方法的名字相同, 参数的个数或类型不同.