1. 如何定义Java中的方法
1.1 方法:解决一类问题的代码的有序组合,是一个功能模块
1.2 定义一个方法:
访问修饰符 返回值类型 方法名(参数列表){方法体}
1.3 各部分解释:
- 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用
- 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值
- 方法名:定义的方法的名字,必须使用合法的标识符
- 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开
package com.imooc; public class Demo13 { public static void main(String[] args) { Demo13 test = new Demo13(); test.print(); //在main方法中调用print方法 } public void print() { //定义print的方法 System.out.println("hello demo13"); } }
2. Java中无参无返回值方法的使用
2.1 定义方法
public void show(){ //访问修饰符 返回值类型为无返回值 方法名() System.out.println("Hello"); //方法体放在一对大括号中 }
2.2 调用方法
package com.imooc; public class Demo14 { public static void main(String[] args) { //创建对象,对象名为hello Demo14 hello = new Demo14(); //通过 对象名.方法名() 调用方法 hello.show(); } //定义方法 public void show() { System.out.println("hello"); } }
3. Java中无参带返回值方法的使用
3.1 示例
package com.imooc; public class Demo16 { public static void main(String[] args) { //创建对象,对象名为hello Demo16 hello = new Demo16(); //调用方法冰接收方法的返回值,保存在变量sum中 int sum = hello.calcSum(); System.out.println("sum =" + sum); } //定义无参带返回值的方法(返回值为int类型,使用return获得返回值) public int calcSum() { int a = 5; int b = 12; int sum = a + b; return sum; } }
3.2 注意
- 如果返回类型为void,则方法中不能使用return返回值;
- 方法的返回值只能有一个
- 方法返回值的类型必须兼容,例如:如果返回值类型为int,则不能放回String型值
3.3 练习
package com.imooc; public class Demo18 { public static void main(String[] args) { Demo18 hello = new Demo18(); int maxAge = hello.maxAge(); System.out.println("the max age is: " + maxAge); } public int maxAge() { int[] ages = {1, 11, 3, 33, 2, 22, 4, 44, 5}; int max = ages[0]; for (int i=0; i<ages.length; i++) { if (ages[i] > max) { max = ages[i]; } } return max; } }
4. Java中带参无返回值方法的使用
4.1 方法的定义
- 带一个String类型的参数,参数名为name,但是没有返回值
public void show(String name){ System.out.println("welcome " + name + "!"); }
4.2 方法的调用
- 调用时必须传入实际的参数值:对象名.方法名(实参1, 实参2, ..., 实参n)
HelloWorld hello = new HelloWorld(); hello.show("Harry");
4.3 形参和实参
- 形参:定义方法时的参数,目的是用来定义方法需要传入的参数的个数和类型;
- 实参:调用方法时的参数,是传递给方法真正被处理的值。
4.4 注意:
- 调用带参方法时,必须保证实参的数量、类型、顺序与形参一一对应
public class HelloWorld{ public static void main(String[] args){ HelloWorld hello = new HelloWorld(); hello.show(25.6); //实参与形参类型不一致 } public String show(String name){ return "Welcome " + name + "!"; } }
- 调用方法时,实参不需要指定数据类型
hello.show("i love you");
- 方法的参数可以是基本数据类型,如int、double等,也可以是引用数据类型,如String、数组等
package com.imooc; import java.util.Arrays; public class Demo19 { public static void main(String[] args) { Demo19 hello = new Demo19(); int[] scores = {54, 34, 65, 23}; hello.print(scores); //实参为整型数组 } public void print(int[] scores) { //形参为整型数组 //使用Arrays类的toString()方法将数组转换为字符串并输出 System.out.println(Arrays.toString(scores)); } }
- 当方法参数有多个时,多个参数之间以逗号分隔
public int calc(int num1, int num2){ int num3 = num1 + num2; return num3: }
4.5 练习
package com.imooc; public class Demo20 { public static void main(String[] args) { Demo20 hello = new Demo20(); hello.calcAvg(94, 81); } public void calcAvg(int num1, int num2) { double avg = (num1 + num2)/2.0; System.out.println("the average score is: " + avg); } }
5. Java中带参带返回值方法的使用
5.1 方法的定义
public String show(String name){ return "Welcome " + name + "!"; }
5.2 方法的调用
HelloWorld hello = new HelloWorld(); //创建对象hello String welcome = hello.show("John"); //调用带参带返回值的方法,将返回值存在变量welcome中 System.out.println(welcome);
5.3 练习
package com.imooc; import java.util.Arrays; public class Demo21 { public static void main(String[] args) { Demo21 hello = new Demo21(); int[] scores = {34, 23, 65, 15}; int count = hello.sort(scores); System.out.println("there are " + count + " scores"); } public int sort(int[] scores) { Arrays.sort(scores); System.out.println(Arrays.toString(scores)); return scores.length; } }
6. Java中方法的重载
6.1 什么是方法的重载:
- 如果同一个类中包含了两个或者两个以上方法名相同,但 方法参数的个数、顺序或类型不同的方法。如下所示4个方法名称都为show,但方法的参数有所不同,因此都属于方法的重载:
//无参数的方法 public void show(){ System.out.println("Welcome"); } //重载show方法,一个字符串参数 public void show(String name){ System.out.println("Welcome " + name); } //重载show方法,两个参数,先String后int public void show(String name, int age){ System.out.println("Welcome " + name); System.out.println("age " + age); } //重载show方法,两个参数顺序不同 public void show(int age, String name){ System.out.println("Welcome 2 " + name); System.out.println("age 2 " + age); }
6.2 如何区分调用的是哪个重载方法:
- 当调用被重载的方法时,Java会根据参数的个数和类型来判断应该调用哪个重载方法,参数完全匹配的方法将被执行,如:
public static void main(String[] args){ HelloWorld hello = new HelloWorld(); hello.show(); //调用无参的show方法 hello.show("tom"); //调用带有一个字符串参数的show方法 hello.show("jack", 20); //调用先字符串参数后整型参数的show方法 hello.show(20, "jack"); //调用先整型参数后字符串参数的show方法 }
6.3 判断方法重载的依据:
- 必须是在同一个类中
- 方法名相同
- 方法参数的个数、顺序或类型不同
- 与方法的修饰符或返回值没有关系
7. 练习题:创建指定长度的int型数组,并生成100以内随机数为数组中的每个元素赋值,然后输出数组
package com.imooc; //导入java.util.Arrays import java.util.Arrays; public class Demo23 { public static void main(String[] args) { //创建对象hello Demo23 hello = new Demo23(); //调用方法并将返回值保存在变量中 int[] nums = hello.getArray(8); //将数组转换为字符串并输出 System.out.println(Arrays.toString(nums)); } public int[] getArray(int length) { //定义指定长度的整型数组 int[] nums = new int[length]; //循环遍历数组,给数组赋值 for(int i=0; i<nums.length; i++) { //产生一个100以内的随机数,并赋值给数组中的i成员 nums[i] = (int)(Math.random()*100); } //返回赋值后的数组 return nums; } }
8. 练习题:实现输出成绩前三名
package com.imooc; import java.util.Arrays; public class Demo25 { public static void main(String[] args) { int[] scores = {89, -23, 45, 23, 112, 45, 34}; System.out.println("the top3 is "); Demo25 res = new Demo25(); res.showTop3(scores); } public void showTop3(int[] scores) { //将成绩排序,默认升序顺序 Arrays.sort(scores); int num = 0; //倒序遍历 for(int i=scores.length-1; i>=0; i--) { if(scores[i]<0 || scores[i]>100) { continue; } num++; if(num > 3) { break; } System.out.println(scores[i]); } } }