A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周玮 初级黑马   /  2019-9-16 22:57  /  1227 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

.1 方法的概念(理解)

        方法是一个具有独立功能的代码集,他可以独立的运行,我们需要先编写这个方法,在需要的时候去调用即可.调用的格式就是方法名();

        方法我们自己定义的,方法名是我们自己起的,遵循小驼峰命名法.a.方法写在类中:就是class的大括号中.b.他与main函数是并列的关系.他们没有先后.main里面不能直接写方法,自定义方法里面也不能在写方法.

  为什么要有方法:我们重复使用的具体独立的功能的代码,我们需要早在程序里编写很多次,造成代码的阅读性很差,我们想到了方法(函数),方法就把这些具体独立功能的代码封装起来,在你程序需要的时候,就可以调用,这个代码我们只需要写一次,很多可以一直的调用,调用的格式是方法名();

  作用:减少代码的复用性.

- 注意:
  - 具有独立的功能.这个是你自己定的,需要你编写
  - 需要调用才会执行
2. 方法的定义和调用

2.1 无参数方法定义和调用(掌握)

- 定义格式:
      public static void 方法名(){
           方法体;
      }
- 范例:
      public class Demo {
          public static void main(String[] args) {
              zuoFang();
              System.out.println("吃早饭");
              System.out.println("睡觉");
              zuoFang();
              System.out.println("吃中午");
              System.out.println("睡觉");
              zuoFang();
              System.out.println("吃晚饭");
          }
           public static void zuoFang(){
               System.out.println("洗米");
               System.out.println("起锅烧油");
               System.out.println("炒菜");
           }
      
      }
- 调用格式:
      方法名();
- 范例:
             zuoFang();
- 注意:
          方法必须先定义,后调用,否则程序将报错

2.2 方法调用过程图解(理解)





2.3 无参数方法的练习(应用)

- 需求:设计判断两个数最大值的方法
- 思路:
  - ①我要定义一个方法,给他起个名字
  - ②在这个方法里定义两个变量
  - ③比较两个变量的最大值
  - ④在主(mian)方法中调用
- 代码:

    public class Demo1 {
   
        public static void main(String[] args) {
                 getMax();
        }
   
        //public static void 方法名(){}
        public static void getMax(){
            int a = 10;
            int b = 20;
            if(a>b){
                System.out.println(a+"是最大值");
            }else{
                System.out.println(b+"是最大值");
            }
   
        };
   
    }

3. 带参数方法定义和调用

3.1 带参数方法定义和调用(掌握)

- 定义格式:
  参数:参与运算的数
  参数范例:
      public static void 方法名(数据类型 变量名,数据类型 变量名,....){
          方法体;
      }
- 范例:
      public static void isEvennumber(int a){
               if(a%2==0){
                   System.out.println("是偶数");
               }else{
                   System.out.println("是奇数");
               }
          }
  - 注意:方法定义参数是int型的,你就传什么类型的.参数定义几个,或者是什么类型的需要你自己去定,别人调用你的时候,需要按照你参数列表中的顺序,类型都要一样的去给你.

           

- 调用格式:
      方法名(变量/常量);
- 范例:
              int b = 19;
              isEvennumber(b);
  - 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错

3.2 形参和实参(理解)

1. 形参:

         我们定义一个方法的时候,首先你自己要知道你定义的方法是干什么用,此时你可以决定调用者调用你方法的时候,需要传递给你什么类型的数据,你得接收,你就在方法的参数列表(方法的小括号)位置定义变量,变量的定义格式就是数据类型,变量名,如果有多个,用逗号隔开.此时他没有实际的值,所以我们叫他形式上参与运算的值,也叫形参.

2.实参:

  调用者调用你方法的时候,他会看到你的参数列表,需要调用者提供什么数值,调用者就需要把实际的值给你去参与运算,最后得到结果,格式是方法名(变量/常量);这个数是不是实实在在存在的,我们叫他实际参与运算的数也叫实参.           

3.3 带参数方法练习(应用)

- 需求:设计一个方法用于打印两个数中的较大数,数据来自于方法参数 }
- 代码:

    public class Demo3 {
   
        public static void getMax(double a ,double b){
            if(a>b){
                System.out.println(a+"是较大的数");
            }else{
                System.out.println(b+"是较大的数");
            }
        }
        public static void main(String[] args) {
            System.out.println("开始");
               getMax(3.14,2.0);
            System.out.println("结束");
        }
    }
        

4. 带返回值方法的定义和调用

4.1 带返回值方法定义和调用(掌握)

- 定义格式
      public static 数据类型 方法名(数据类型 变量名,数据类型 变量名....){
          方法体;
          return 返回值;
      }
      这是一个完整定义方法的格式:
      public static:方法的修饰:现在只需要照抄main方法;
      数据类型:因为方法是你写的,有没有返回值,你肯定知道,如果有返回值,这个返回值是什么类型,这个数据类型就是什么类型.如果你的方法你写完没有返回值,这里就写void.
      方法名:你自己给这个方法起的名字,遵循小驼峰命令法
      参数列表:你定义一个方法的时候,你要要求调用者给你传递什么数,我们这里的参数列表接收,调用者传递的实际参数与我的参数列表个数,顺序,以及数据类型都要一致,否则程序报错.
      方法体:这个方法具体的功能代码,就是你以前写在main方法中的代码,你能写在main方法中的代码,这里都可以写.
       return 返回值:你的程序执行完,你需要给调用者返回一个数,这个数和你方法定义上的数据类型保持一致,否则报错,如果你没有返回值,return可以省略,如果你定义了返回值类型,你没有return,程序也会报错.
       return也可以表示结束方法的意思.
- 范例
      public class Demo5 {
          //定义一个主方法
          public static void main(String[] args) {
                   //方法的调用
              //int c = 10;
             //  int d =  20;
              //让用户去输入
              Scanner scanner = new Scanner(System.in);
              System.out.println("请输入第一个数");
              int a = scanner.nextInt();
      
              System.out.println("请输入第二个数");
              int b = scanner.nextInt();
              //int max = getMax(a,b);//有返回值的  你先写方法名(实际参数) ALT+Enter
              System.out.println(getMax(a,b));
          }
          //定义一个方法去判断两个数的最大值
         /* public static 数据类型 方法名(数据类型 变量名,数据类型 变量名....){
              方法体;
              return 返回值;
          }*/
         public static int getMax(int a , int b ){
              //用if去判断两个数的大小,约定好谁大我就返回谁
             if(a>b){
                 return a ;
             }else{
                 return b ;
             }
         }
      }
  - 注意:
    - 方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
- 调用格式
      getMax(a,b)
- 范例
        public static int getMax(int a , int b ){
              //用if去判断两个数的大小,约定好谁大我就返回谁
             if(a>b){
                 return a ;
             }else{
                 return fasle ;//报错
             }
         }
      }
      
        public static int getMax(int a , int b ){
              //用if去判断两个数的大小,约定好谁大我就返回谁
             if(a>b){
                 return a ;
             }//也是报错
         }
      }
  

4.2 带返回值方法练习(应用)

- 需求:设计一个方法可以获取两个数的较大值,数据来自于参数
- 代码:
       public static void main(String[] args) {
                   //方法的调用
              //int c = 10;
             //  int d =  20;
              //让用户去输入
              Scanner scanner = new Scanner(System.in);
              System.out.println("请输入第一个数");
              int a = scanner.nextInt();
      
              System.out.println("请输入第二个数");
              int b = scanner.nextInt();
              //int max = getMax(a,b);//有返回值的  你先写方法名(实际参数) ALT+Enter
              System.out.println(getMax(a,b));
          }

5. 方法的注意事项

5.1 方法的注意事项(掌握)

- 方法不能嵌套定义
  - 示例代码:
        public class Demo6 {
            public static void main(String[] args) {
                 public static void getMax(){
                     
                }
            }
        }



5.2 方法的通用格式(掌握)

- 格式:
      public static 数据类型 方法名(数据类型 变量名,数据类型 变量名....){
          方法体;
          return 返回值;
      }
- 解释:
   return也可以表示结束方法的意思.
  这是一个完整定义方法的格式:
  public static:方法的修饰:现在只需要照抄main方法;
  数据类型:因为方法是你写的,有没有返回值,你肯定知道,如果有返回值,这个返回值是什么类型,这个数据类型就是什么类型.如果你的方法你写完没有返回值,这里就写void.
  方法名:你自己给这个方法起的名字,遵循小驼峰命令法
  参数列表:你定义一个方法的时候,你要要求调用者给你传递什么数,我们这里的参数列表接收,调用者传递的实际参数与我的参数列表个数,顺序,以及数据类型都要一致,否则程序报错.
  方法体:这个方法具体的功能代码,就是你以前写在main方法中的代码,你能写在main方法中的代码,这里都可以写.
   return 返回值:你的程序执行完,你需要给调用者返回一个数,这个数和你方法定义上的数据类型保持一致,否则报错,如果你没有返回值,return可以省略,如果你定义了返回值类型,你没有return,程序也会报错.
- 定义方法时,要做到两个明确
  返回值类型:别人调用你的方法,有没有返回值,是你定的.
  参数列表:别人调用你的时候,需要给你传递什么参数,你就在参数列表中定义什么参数.
- 调用方法时的注意:
  有返回值的方法,调用者一般要接受这个返回值.

6. 方法重载

6.1 方法重载(理解)

- 方法重载概念
  方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
  方法重载:方法的重复载入
  满足一下条件就是重载:
  1.在同一个类中
  2.方法名相同的
  3.参数列表不同(a.个数不同,b.顺序不同,c.数据类型不同)
  4.与返回值无关,你就不用看返回值了
- 正确范例:
          public static void show(int a){
      
          }
          public static void show(int a,double b){
      
          }
          public static void show(float a,int b){
      
          }
        public static void show(double c,int f){
      
        }
- 错误范例:
          public static void show(double b,int a){
      
          }
          public static void show(float a,int b){
      
          }
        public static void show(double c,int f){
      
        }

6.2 方法重载练习(掌握)

- 需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)
- 思路:
  - ①定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数
  - ②定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数
  - ③定义所有的重载方法,两个byte类型与两个short类型参数
  - ④完成方法的调用,测试运行结果
- 代码:
      public class Demo7 {
          public static void main(String[] args) {
              int sum = sum(2, 2,6);
              System.out.println(sum);
          }
          public static int sum(int a,int b){
              System.out.println(1);
              return a+b;
          }
          public static double sum(double a,double b){
              System.out.println(2);
              return a+b;
          }
          public static long sum(long a,long b){
              System.out.println(3);
              return a+b;
          }
          public static double sum(double a,int b){
              System.out.println(4);
              return a+b;
          }
          public static double sum(int a,double b){
              System.out.println(5);
              return a+b;
          }
          public static int sum(int a,int b,int c){
              System.out.println(6);
              return a+b+c;
          }
      }
      //方法的重复载入,方法你需要接受的参数,可能存在顺序,类型,个数不同的各种需求,我就用重载,别人只需要记一个方法名就可以了,然后传入对应的实际参数,程序自动的根据实际参数的顺序类型个数去匹配对应的方法.

7. 方法的参数传递

7.1 方法参数传递基本类型(理解)

- 测试代码:
      public class ArgsDemo01 {
          public static void main(String[] args) {
              int number = 100;
              System.out.println("调用change方法前:" + number);
              change(number);
              System.out.println("调用change方法后:" + number);
          }
      
          public static void change(int number) {
              number = 200;
          }
      }
- 结论:
  - 基本数据类型的参数,形式参数的改变,不影响实际参数
- 结论依据:
  - 每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失
   

7.2 方法参数传递引用类型(理解)

- 测试代码:
      public class ArgsDemo02 {
          public static void main(String[] args) {
              int[] arr = {10, 20, 30};
              System.out.println("调用change方法前:" + arr[1]);
              change(arr);
              System.out.println("调用change方法后:" + arr[1]);
          }
      
          public static void change(int[] arr) {
              arr[1] = 200;
          }
      }
- 结论:
  - 对于引用类型的参数,形式参数的改变,影响实际参数的值
- 结论依据:
  - 引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果
      

7.3 数组遍历(应用)

- 需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11, 22, 33, 44, 55]
- 思路:
  1.首先打印[
  2.遍历数组,如果可以判断他不是最后一个元素,如果不是,我打印数组名[i]+","如果是,我直接打印元素
  3.我再打印]

- 代码:
      public class Demo10 {
          public static void main(String[] args) {
               //数据类型 [] 数组名 = {12,15,16,17,20};
              int [] arr1 = {12,15,16,17,20};
              printArray(arr1);
          }
          //public static 返回值类型 方法名(参数列表){
          //   方法体;
          //   return 返回值;
          // }
          //[12, 15, 16, 17, 20]
          public static void printArray(int [] arr){
              /*
              * 1.首先打印[
                2.遍历数组,如果可以判断他不是最后一个元素,如果不是,我打印数组名[i]+","
                 如果是,我直接打印元素
                3.我再打印]
              *
              * */
              System.out.print("[");
              for (int i = 0; i < arr.length; i++) {
                    if(i==arr.length-1){
                        System.out.print(arr[i]);
                    }else{
                        System.out.print(arr[i]+", ");
                    }
              }
              System.out.print("]");
          }
      }

7.4 数组最大值(应用)

- 需求:设计一个方法用于获取数组中元素的最大值
- 思路:
  1.在主方法有一个数组吧
  2.我需要编写一个判断数组最大值的方法
  3.调用这个方法
- 代码:
public static void main(String[] args) {
        //数据类型 [] 数组名 = {12,15,16,17,20};
        int [] arr1 = {12,15,16,17,20};
           int max= getMax(arr1);
        System.out.println(max);
    }
    //public static 返回值类型 方法名(参数列表){
    //   方法体;
    //   return 返回值;
    //   你要知道有没有返回值
    //   你要接什么参数
    // }
    public static int getMax(int[] arr){
        //定义一个变量保存最大值
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i]>max){
                max=arr[i];
            }
        }
        return max;

    }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马