【原】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   参数名n
27         
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.DD
20      * 方法修改人:李四
21      * 方法修改时间:YYYY.MM.DD
22      * 方法修改内容:.....
23      */
24     public static void show() {
25         
26     }
27 }
28 
29 // 语法错误:Syntax error on token "}", delete this token
30 // 语法错误:Syntax error, insert "}" to complete ClassBody
31 //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 permitted
10 //        public static void show() {
11 //            
12 //        }
13     }
14     
15     public static void show() {
16         
17     }
18     
19     // 语法错误:Duplicate method show() in type
20 //    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 int
37         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         // 写法1
29 //        if (i - j == 0) {
30 //            flag = true;
31 //        } else {
32 //            flag = false;
33 //        }
34         
35         // 写法2
36 //        if (i == j) {
37 //            flag = true;
38 //        } else {
39 //            flag = false;
40 //        }
41         
42         // 写法3
43 //        if (i - j != 0) {
44 //            flag = false;
45 //        }
46         
47         // 写法4
48 //        if (i != j) {
49 //            flag = false;
50 //        }
51 //        
52 //        return flag;
53         
54         // 写法5
55 //        flag = (i == j) ? true : false;
56 //        return flag;
57         
58         // 写法6
59         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          // 定义一个变量max
25         int max = 0;
26         
27         // 写法1
28 //        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         // 写法2
43         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     // 既然这些方法做的都是数字相加的事情,考虑使用相同的方法名add
26     
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 type
23 //    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 type
38 //    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 type
49 //    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 type
11 
12         // 注释掉重载方法1、2、5,保留重载方法3、4时有语法错误
13         // The method test(int, double) is ambiguous for the type
14         
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     // 重载方法1
26     public static int test(int i, int j) {
27         return 1;
28     }
29 
30     // 重载方法2
31 //    public static int test(double i, double j) {
32 //        return 2;
33 //    }
34     
35     // 重载方法3
36 //    public static int test(int i, double j) {
37 //        return 3;
38 //    }
39     
40     // 重载方法4
41 //    public static int test(double i, int j) {
42 //        return 4;
43 //    }
44     
45     // 重载方法5
46 //    public static int test() {
47 //        return 5;
48 //    }
49     
50     // 重载方法6
51     public static int test(long a, long b) {
52         return 6;
53     }
54 }

 

posted @ 2017-02-26 11:22  {name:"代码屠夫"}  阅读(490)  评论(0编辑  收藏  举报