首页 > 代码库 > 【原】Java学习笔记008 - 方法(函数)

【原】Java学习笔记008 - 方法(函数)

 1 package cn.temptation; 2  3 public class Sample01 { 4     public static void main(String[] args) { 5         // 方法/函数 Method/Function 6  7         // 为什么会出现方法? 8         // 原因1、在程序中多处出现相同的语句内容 9         // 原因2、会发生变化10         11         // 【只有变化是不变的】12         // 回顾一下变量,为了应对变化,提出的新的机制13         // 需要对变化进行封装处理,在这里就是要对一系列的语句进行封装,得到方法的概念14         // 【方法的封装性】15         16         // 方法的格式:17         // 访问修饰符       返回类型      方法名(参数类型1   参数名1, 参数类型2   参数名2, ..., 参数类型n   参数名n) {18         //        方法体内各种执行语句;19         //        return  返回值;        // return语句用于有返回类型的场合20         // }21         22         // 1、访问修饰符:public static(公开的静态的)23         // 2、返回类型:① 无返回的    void;② 有返回的24         // 3、方法名:方法的名称,在方法被调用时使用25         // 4、方法名后的括号里可以有参数列表(有参),也可以没有参数列表(无参)26         // 5、参数列表:参数类型1   参数名1, 参数类型2   参数名2, ..., 参数类型n   参数名n27         28         // 【方法的使用原则:不调用,不执行】29 30         // 方法的调用形式:方法名(参数列表);31         32         // 做输出的事情33 //        System.out.println("天气不太好");34 ////        System.out.println("网络不太好");35 //        System.out.println("网络现在太好");36         // 把对语句的使用,替换为对方法的调用37         show();38         39         // 做了一些其他的事情40         // ...41 42         // 做输出的事情43 //        System.out.println("天气不太好");44 ////        System.out.println("网络不太好");45 //        System.out.println("网络现在太好");46         // 把对语句的使用,替换为对方法的调用47         show();48         49         // 做了一些其他的事情50         // ...51 52         // 做输出的事情53 //        System.out.println("天气不太好");54 ////        System.out.println("网络不太好");55 //        System.out.println("网络现在太好");56         // 把对语句的使用,替换为对方法的调用57         show();58     }59     60     // 在和主函数main同级的位置,制作方法61     public static void show() {62         // 做输出的事情63         System.out.println("天气不太好");64         // 当语句发生变化时,使用方法后,不需要对方法的调用发生修改,只需要修改一下方法中的语句即可65 //        System.out.println("网络不太好");66         System.out.println("网络现在太好");67         68         // void无返回的方法中,写上return语句也可以,但是return无任何类型的返回值69 //        return;70         // 语法错误:Void methods cannot return a value,不能返回一个具体数据类型的结果71 //        return true;72     }73 }
 1 package cn.temptation; 2  3 public class Sample02 { 4     public static void main(String[] args) { 5         // 1、方法在某一个类的内部的 6         // 2、在称呼上,方法 和 函数 其实是一个意思 7         // 3、做事情时,不要强求在一个方法内全部做完,不同的方法做不同的事情 8          9         // 方法对内封装语句,体现了它的【封装性】10         // 方法对外到处被调用,体现了它的【复用性】11     }12     13     /**14      * 方法名:显示方法的名称15      * 方法用途:用于显示方法的用途16      * 方法返回值:无17      * 方法参数名:无18      * 方法创建人:张三19      * 方法创建时间:YYYY.MM.DD20      * 方法修改人:李四21      * 方法修改时间:YYYY.MM.DD22      * 方法修改内容:.....23      */24     public static void show() {25         26     }27 }28 29 // 语法错误:Syntax error on token "}", delete this token30 // 语法错误:Syntax error, insert "}" to complete ClassBody31 //public static void showOther() {32 //    33 //}
 1 package cn.temptation; 2  3 public class Sample03 { 4     public static void main(String[] args) { 5         // 注意: 6         // 1、方法是不能嵌套方法的,方法和方法之间是平级的 7         // 2、方法名及参数列表均相同的方法是不能被定义的 8          9         // 语法错误:Illegal modifier for parameter show; only final is permitted10 //        public static void show() {11 //            12 //        }13     }14     15     public static void show() {16         17     }18     19     // 语法错误:Duplicate method show() in type20 //    public static void show() {21 //        22 //    }23 }
 1 package cn.temptation; 2  3 public class Sample04 { 4     public static void main(String[] args) { 5         // 调用无返回值的方法 6 //        add(); 7          8         // 调用有返回值的方法 9         // 注意:返回值是什么数据类型的值,在调用并接收的地方就要声明什么数据类型的变量来进行接收10         // 定义局部变量result,在方法中定义的局部变量只能在该方法中使用,超出该方法无法访问。11         // 所以主函数中定义的局部变量 和 同级方法中定义的局部变量,虽然同名同类型,但是互相不受影响12         int result = add();13         // 打印出结果14         System.out.println(result);15     }16     17     // 需求:制作一个无返回值的方法,计算两个数的和18 //    public static void add() {19 //        int i = 2;20 //        int j = 3;21 //        22 //        int result = i + j;23 //        24 //        // 直接打印出结果25 //        System.out.println(result);26 //    }27     28     // 需求:制作一个有返回值的方法,计算两个数的和(考虑到计算归计算,打印归打印)29     public static int add() {30         int i = 2;31         int j = 3;32         33         // 定义局部变量result,在方法中定义的局部变量只能在该方法中使用,超出该方法无法访问34         int result = i + j;35         36         // 如果没有写return语句,会产生语法错误:This method must return a result of type int37         return result;38     }39 }
 1 package cn.temptation; 2  3 public class Sample05 { 4     public static void main(String[] args) { 5         // 有参方法的调用 6          7         // 方法的参数:根据方法是被定义还是被调用,将方法的参数分为两种 8         // 1、形参:形式参数,用于方法定义时,起站位表明参数类型的作用 9         // 2、实参:实际参数,用于方法调用时,不用加上参数类型10         11         // 注意:形参和实参的数据类型要一致12         13         int result = add(2, 3);14         // 实参不需要加上数据类型,加上会有语法错误15 //        int result = add(int 2, int 3);16         System.out.println(result);17     }18     19     // 定义方法20     public static int add(int i, int j) {21         // 方法内部就可以使用形参来做加法的操作22         int result = i + j;23         24         return result;25     }26 }
 1 package cn.temptation; 2  3 public class Sample06 { 4     public static void main(String[] args) { 5         // 使用方法时需要注意的问题: 6         // 1、方法的定义 7         //        ① 方法的返回值类型(输出) 8         //        ② 方法的参数列表(输入) 9         // 2、方法的调用10         11         // 方法的调用形式12         // 1、直接调用:一般用于无返回值的方法13         // 2、赋值调用:在调用方法的地方,声明一个和方法返回值类型相同的变量,用以接收方法的返回值(一般用于有返回值的方法)14         // 3、输出调用:本质上就是拿着方法的返回值作为输出语句的方法的实参使用15         16         // 直接调用17         test1();18         19         // 赋值调用20         int result = test2();21         System.out.println(result);22         23         // 输出调用24         System.out.println(test2());25     }26     27     public static void test1() {28         System.out.println("直接调用的方法");29     }30     31     public static int test2() {32         System.out.println("有返回值的方法");33         return 123;34     }35 }
 1 package cn.temptation; 2  3 import java.util.Scanner; 4  5 public class Sample07 { 6     public static void main(String[] args) { 7         // 需求:制作方法,接收用户键盘录入,判断输入的两个数字哪个大? 8          9         // 制作方法时,关注点在方法的返回值类型  和 参数列表上10         // 好的方法都不是一蹴而就的,是不断提炼出来的11         12         Scanner input = new Scanner(System.in);13         System.out.println("输入一个数字:");14         int i = input.nextInt();15         System.out.println("再输入一个数字:");16         int j = input.nextInt();17         input.close();18         19         // 调用方法,传递实参20         int result = max(i, j);21         System.out.println("两个数:" + i + "和" + j + "中较大的数为:" + result);22     }23     24     // 根据输入的数进行比较25     public static int max(int i, int j) {26         // 定义一个变量27         int max = 0;28         29         if (i > j) {30             max = i;31         } else {32             max = j;33         }34         35         return max;36     }37 }
 1 package cn.temptation; 2  3 import java.util.Scanner; 4  5 public class Sample08 { 6     public static void main(String[] args) { 7         // 需求:制作一个方法,判断输入的两个数是否相等 8         Scanner input = new Scanner(System.in); 9         System.out.println("输入一个数字:");10         int i = input.nextInt();11         System.out.println("再输入一个数字:");12         int j = input.nextInt();13         input.close();14         15         // 调用方法16         if (compare(i, j)) {17             System.out.println("两数相等");18         } else {19             System.out.println("两数不等");20         }21     }22     23     // 制作方法,比较两个数是否相同24     public static boolean compare(int i, int j) {25         // 定义一个是否相同的标识26 //        boolean flag = true;27         28         // 写法129 //        if (i - j == 0) {30 //            flag = true;31 //        } else {32 //            flag = false;33 //        }34         35         // 写法236 //        if (i == j) {37 //            flag = true;38 //        } else {39 //            flag = false;40 //        }41         42         // 写法343 //        if (i - j != 0) {44 //            flag = false;45 //        }46         47         // 写法448 //        if (i != j) {49 //            flag = false;50 //        }51 //        52 //        return flag;53         54         // 写法555 //        flag = (i == j) ? true : false;56 //        return flag;57         58         // 写法659         return i == j;60     }61 }
 1 package cn.temptation; 2  3 import java.util.Scanner; 4  5 public class Sample09 { 6     public static void main(String[] args) { 7         // 需求:制作方法,获取三个数中最大的一个 8         Scanner input = new Scanner(System.in); 9         System.out.println("输入第一个数字:");10         int i = input.nextInt();11         System.out.println("输入第二个数字:");12         int j = input.nextInt();13         System.out.println("输入第三个数字:");14         int k = input.nextInt();15         input.close();16         17         // 调用方法18         int result = max(i, j, k);19         System.out.println("最大的数为:" + result);20     }21     22     // 比较三个数中最大的一个23     public static int max(int i, int j, int k) {24          // 定义一个变量max25         int max = 0;26         27         // 写法128 //        if (i > j) {29 //            if (i > k) {30 //                max = i;31 //            } else {32 //                max = k;33 //            }34 //        } else {35 //            if (j > k) {36 //                max = j;37 //            } else {38 //                max = k;39 //            }40 //        }41         42         // 写法243         int tempMax = (i > j) ? i : j;44         max = (tempMax > k) ? tempMax : k;45         46         return max;47     }48 }
 1 package cn.temptation; 2  3 public class Sample10 { 4     public static void main(String[] args) { 5         // 方法的重载(英文:Overload) 6         // 定义:方法名相同、参数列表不同的一系列方法称为方法的重载 7         System.out.println(add(2, 3)); 8         System.out.println(add(4, 5, 6)); 9     }10     11     // 需求:制作一个方法,操作两个数相加12     public static int add1(int i, int j) {13         int result = i + j;14         return result;15     }16     17     // 需求:制作一个方法,操作三个数相加18     public static int add2(int i, int j, int k) {19         int result = i + j + k;20         return result;21     }22     23     // 需求:制作一个方法,操作四个数相加...24     25     // 既然这些方法做的都是数字相加的事情,考虑使用相同的方法名add26     27     // 需求:制作一个方法,操作两个数相加28     public static int add(int i, int j) {29         int result = i + j;30         return result;31     }32     33     // 需求:制作一个方法,操作三个数相加34     public static int add(int i, int j, int k) {35         int result = i + j + k;36         return result;37     }38 }
 1 package cn.temptation; 2  3 public class Sample11 { 4     public static void main(String[] args) { 5         // 方法重载的注意点: 6         // 1、方法名需要相同 7         // 2、方法的参数列表必须不同,包括参数的类型或个数,以此区分不同的方法 8         //        ① 如果参数个数不同,不用考虑参数类型 9         //        ②如果参数个数相同,需要考虑参数的类型 或 参数的顺序必须不同10         // 3、方法的返回值类型、访问修饰符可以相同,也可以不相同11     }12     13     public static void show(int i, int j) {14         15     }16     17     public static void show(int i, double j) {18         19     }20     21     // 参数个数相同,参数类型相同,但是参数名不同的方法不是重载方法22     // 语法错误:Duplicate method show(int, int) in type23 //    public static void show(int a, int b) {24 //        25 //    }26     27     public static void show(int i, int j, int k) {28         29     }30     31     // 和第二个方法参数个数相同、类型相同,但是顺序不同,也是重载方法32     public static void show(double j, int i) {33         34     }35     36     // 和第一个方法参数列表相同,但是无法区分参数顺序是否不同,所以产生语法错误37     // 语法错误:Duplicate method show(int, int) in type38 //    public static void show(int j, int i) {39 //        40 //    }41     42     // 虽然返回值类型和其他重载方法不同,但是并不影响是重载方法43     public static boolean show(int i) {44         return true;45     }46     47     // 和第一个方法参数列表相同,但是返回值类型不同,这也无法区分,有语法错误48     // 语法错误:Duplicate method show(int, int) in type49 //    public static boolean show(int i, int j) {50 //        return false;51 //    }52 }
 1 package cn.temptation; 2  3 public class Sample12 { 4     public static void main(String[] args) { 5         // 方法调用时,匹配参数的数据类型,优先选择参数类型完全匹配的重载方法 6         System.out.println(test(3, 4)); 7 //        System.out.println(test(3.4, 4.5)); 8          9         // 注释掉重载方法1、5,保留重载方法2、3、4时有语法错误10         // The method test(double, double) is ambiguous for the type11 12         // 注释掉重载方法1、2、5,保留重载方法3、4时有语法错误13         // The method test(int, double) is ambiguous for the type14         15         // 注释掉重载方法1、2、3、4,保留重载方法5时有语法错误16         // The method test() in the type Sample12 is not applicable for the arguments (int, int)17         18         // 调用方法重载时,参数匹配规则:19         // 1、如果有参数类型完全匹配的重载方法,会自动选择该重载方法20         // 2、如果没有参数类型完全匹配的重载方法,首先会去匹配部分匹配的重载方法21         //        注意:如果有多个部分匹配程度一致的重载方法,会ambiguous for the type语法错误,因为无法选择22         // 3、如果只有一个参数类型不匹配的方法,这时也就不用谈什么重载了,观察形参的数据类型和实参的数据类型,如果形参的数据类型可以包含实参的数据类型就不会出错23     }24 25     // 重载方法126     public static int test(int i, int j) {27         return 1;28     }29 30     // 重载方法231 //    public static int test(double i, double j) {32 //        return 2;33 //    }34     35     // 重载方法336 //    public static int test(int i, double j) {37 //        return 3;38 //    }39     40     // 重载方法441 //    public static int test(double i, int j) {42 //        return 4;43 //    }44     45     // 重载方法546 //    public static int test() {47 //        return 5;48 //    }49     50     // 重载方法651     public static int test(long a, long b) {52         return 6;53     }54 }

 

【原】Java学习笔记008 - 方法(函数)