方法
在我们的日常生活中,会遇到各种各样的问题,而我们需要寻求这些问题的解决办法,也就是解决方法,所以方法在日常生活中也是无处不在的。在java中,我们去解决某个问题并找到这个问题的解决办法就是方法。方法中封装的是解决问题的具体代码实现的功能,而我们只需要调用这个方法名就可以去解决这个问题。像之前学过的随机数的调用,就是调用的nextInt()方法来实现随机数的产生。
定义方法的格式:
修饰符 返回值类型 方法名(参数列表…){
功能实现的具体代码
return;
}
方法格式分析:
修饰符:用于修饰该方法的各种状态,修饰符比较多,现在先是固定的,会面会逐渐进行接触的,public static,public权限修饰符,权限最大化,static,静态的,也是数据共享的意思。
返回值类型:方法实现功能返回结果的数据类型,返回结果什么类型就写什么类型。
方法名:方法名的定义遵循标识符的规则,第一个单词都小写,后面每个单词的首字母都大写。
参数列表:是否有未知数据的参与,没有就不定义
return:有两个作用,其一是返回这个功能的结果,其二是用于结束方法。
下面通过一个代码来演示方法定义的具体情况:
/* 需求:计算长方形的面积(在方法中实现这个功能) 思路:1、定义一个方法getArea()在方法中实现 2、修饰符:public static 3、返回值类型:计算长方形的面积返回后是一个整数类型的值,int 4、方法名:遵循标识符的定义规则getArea() 5、参数列表:在功能实现过程中,有未知的数据参与运算,长和宽,int length,int weight 6、return的是面积。 7、调用该方法的功能,在main方法中进行调用 */ public class MethodDemo{ public static void main(String[] args){ //调用getArea()方法,传入长和宽的值 int area = getArea(4,8); //打印该面积的值 System.out.println("该长方形的面积是:"+area); } //定义方法,实现功能的封装 public static int getArea(int length,int weight){ //计算面积的功能实现 //int area = length * weight; return length * weight; } }
方法定义练习
练习一:打印三行三列的“*”矩形
/* 需求:打印三行三列的”*“矩形 思路:1、定义功能方法 2、修饰符:public static 3、返回值类型:在控制台打印图形即可 ,没有返回值类型void 4、方法名:符合标识符的定义规则即可,printRect() 5、参数列表:已经规定是三行三列,不需要定义参数列表 */ public class MethodDemo_1{ public static void main(String[] args){ //调用功能方法 printRect(); } //定义功能方法 public static void printRect(){ //使用for循环遍历打印矩形 for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ System.out.print("*"); } System.out.println(); } } }
练习二:键盘输入一个数并打印这个数
/* 需求:键盘输入一个数并打印这个数 思路:1、定义功能方法 2、修饰符:public static 3、返回值类型:需要返回输入的这个数,int 4、方法名:遵循标识符的定义规则即可,getNumber() 5、参数列表:没有未知数据的参与,只需要自己在键盘输入这个数即可 */ import java.util.Scanner; public class MethodDemo_2{ public static void main(String[] args){ //调用功能方法 //int num = getNumber(); System.out.println(getNumber()); } //定义方法功能 public static int getNumber(){ //定义Scanner类,完成键盘的输入 Scanner sc = new Scanner(System.in); //int number = sc.nextInt(); //返回输入的数据给调用者 return sc.nextInt(); } }
练习三:打印指定M行,每行N个*号的矩形
/* 需求:打印指定M行,每行N个*号的矩形 思路:1、定义功能方法 2、修饰符:public static 3、返回值类型:打印图形,无返回值void 4、方法名:符合标识符的定义规则即可,printRect() 5、参数列表:需要自己去指定图形的行数和列数,int m,int n 6、调用功能方法 */ public class MethodDemo_3{ public static void main(String[] args){ //调用功能方法 printRect(6,7); } //定义功能方法 public static void printRect(int m,int n){ //通过for循环遍历打印图形 for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ System.out.print("*"); } System.out.println(); } } }
练习四:求三个数的平均数
/* 需求:求三个数的平均数 思路:1、定义功能方法 2、修饰符:public static 3、返回值类型:求平均数结果需要返回这三个数的平均数的值,int 4、方法名:符合标识符的定义规则即可,getAvg() 5、参数列表:需要三个未知数据的参与,int a,int b,int c 6、调用功能方法 */ public class MethodDemo_4{ public static void main(String[] args){ //调用功能方法 int avg = getAvg(4,8,9); System.out.println("三个数的平均值是:"+avg); } //定义功能方法 public static int getAvg(int a,int b,int c){ //返回计算后的值 return (a+b+c)/3; } }
定义方法时的一些注意事项:
1、 方法写在类中,方法与方法不能嵌套,也就是说一个方法不能写进另一个方法中,
2、 在调用方法时方法名和参数列表一定不能写错,否则失败
3、 方法的返回值如果是void,ruturn可以省略不写,但是方法中return后面一定不能写其他语句,否则会访问不到编译失败
4、 方法的返回值类型必须和return的类型相匹配。
5、 方法不能够重复定义。
6、 在调用方法时,方法的返回值是void,调用的时候不能使用输出语句,没用返回值打印数据也就不存在,逻辑错误。
方法的重载
所谓的重载就是在同一个类中,功能的方法名可以一样,但是它的参数列表里面的数据类型和数据个数不一样。
下面的代码演示了重载的情况:
/* 重载的情况:求数据的和,个数和类型不确定,所以需要用到重载 */ public class MethodOverload{ public static void main(String[] args){ //调用功能 int sum1 = add(3,5); int sum2 = add(4,5,6); double sum3 = add(2.1,6.3); System.out.println(sum1); System.out.println(sum2); System.out.println(sum3); } //求和的功能实现 public static int add(int a,int b){ return a+b; } public static int add(int a,int b,int c){ return a+b+c; } public static double add(double a,double b){ return a+b; } }
重载的注意事项
1、 方法的参数列表必须不同(数据个数、数据类型、数据顺序)
2、 方法的重载与变量名无关
3、 方法的重载和返回值类型无关
4、 方法的重载和修饰符无关
所以方法的重载只和参数列表有关,和其他无关