美文网首页
Java方法

Java方法

作者: 以宇宙为海的蓝鲸 | 来源:发表于2019-08-06 09:17 被阅读0次

    方法介绍?

    • 什么是方法?

      1. 方法就是一段代码的集合,这段代码完成了某个功能,业务场景。
      2. 一个方法就是一个功能。
    • 为什么使用方法?

      避免main方法中的代码堆积,造成后期代码拓展和维护的成本增加。

    • 如何使用方法?

      1. 格式与main方法大致相同。
      public static void(返回类型) 方法名(参数列表){}
      

      ​ 2.在main方法中通过方法名调用需要执行的方法。

      ​ 3.方法()中的内容,参数,就相当于一根天线。用来接收调用者发送的数据信息。

      ​ 4.方法计算出来的值,其他的方法也可以使用。

      ​ 5.一个方法如果声明了void,证明该方法无返回值。不能写return返回语句。

      ​ 6.如果一个方法存在返回结果,方法的void应修改为返回结果的数据类型。

      ​ 7.在方法体的最后一行可以写return语句返回具体的值。

    • 调用方法流程

    Java调用方法流程.png

    方法重载

    • 方法重载的含义

      1. 在一个类中编写方法时,如果出现多个方法的所做的事情是一样时,为了满足见名知意的规范,我们可以起同样的方法名。
      2. 在一个类中定义同名方法是可以的,并将之称之为重载。
    • 注意事项

      1. 就进原则:当调用语句中的数据类型,在调用方法中找不到完全匹配的时候,它会按照就近原则,选取调用方法。

        就近顺序:byte>short>int>char>long>float>double.从小往大的方向匹配。

        如果没有基本数据类型,就会寻找基本数据类型的包装类,最后才会寻找可变参数。

        当出现两个方法都符合匹配次序的话,程序会报错。

      2. 两同三不同:只有符合两同和三不同中的一个时,方法才能重载。

        ​ 两同:同名,同类

        ​ 不同:参数列表类型不同,参数列表顺序不同,参数列表长度不同。

    代码示例

    • 计算圆柱体的面积

      /** 
          计算圆柱体的表面积        
          1:声明一个方法计算圆的面积        
          2:声明一个方法矩形的面积        
          3:声明一个方法计算累加和        
      
          1:如何声明?        
              照着main方法抄    
          2:这个方法完成什么功能        
              知道了方法中的逻辑如何编写    
          3:这个方法的执行需不需要帮忙?        
              参数列表        
      
          1:方法就是一个功能模块,完成某个功能。
              不要重复造轮子。方法是可以复用的。    
          2:    变量:首字母小写 其它每个单词的字母均大写     
              类: 首字母大写 其它每个单词的字母均大写     
              方法:首字母小写 其它每个单词的字母均大写     
      */ 
      import java.util.Scanner; 
      public class Demo05{    
          public static void main(String[] args){        
              System.out.println("请输入计算的圆的半径>>>>>>");                
              //创建一个Scanner对象        
              Scanner input = new Scanner(System.in);        
              //通过Scanner对象中的nextInt方法获取用户输入的int值       
              int r = input.nextInt();                
              double area = getArea(r);                        
                  System.out.println("请输入计算的圆柱体的高>>>>>>");        
              //通过Scanner对象中的nextInt方法获取用户输入的int值        
              int width = input.nextInt();            
              //计算半径为r的圆的周长        
              double length = getZC(r);            
              //计算矩形的表面积        
              double jArea = getArea(length,width);            
              //计算圆柱体的表面积        
              double sumArea = getYZT(area,jArea);                
                  System.out.println("以半径为"+r+"的,高为"+width+"的圆柱体的表面积是:"+sumArea);            
          }  
             //调用语句的参数名和方法名参数列表的参数名可不相同
          public static double getYZT(double yArea,double jArea){
              return yArea*2+jArea;       
          }            
      /**        
          //@+单词 注解        
          @param r 需要计算的圆的半径        
          @return double 返回计算的圆的周长    */   
          public static double getZC(int r){       
              //参数判定 代码的健壮性更好 ? 防御性编程        
              if(r==0){            
                  return 0;        
              } 
              //计算周长        
              double pi = 3.14;        
              double zc = 2*pi*r;        
              //返回周长        
              return zc;    
          }                   
          /**  计算矩形的面积    */    
          public static double getArea(double length,int width){        
              double area = length*width;       
              //System.out.println(area);        
              return area;    
          }            
          /** 计算半径r的圆的面积    */    
          public static double getArea(int r){        
              //声明一个变量存放pi的值        
              double pi = 3.1415;        
              //声明圆的半径        
              //int r = 4;        //计算面积        
              double area = pi*r*r;
              System.out.println("半径是"+r+"的圆的面积是"+area);        
              return area;    
          }  
      }
      //以半径为4的,高为4的圆柱体的表面积是:201.008
      
    • 面试题

      按照最近原则判定以下程序输出内容:

    public class Demo07{    
        public static void main(String[] args){        
            char ch = 'A';        info(ch);            
        }           
        public static void info(char ch){        
            System.out.println("info char");    
        }   
        public static void info(int ch){        
            System.out.println("info int");    
        }    
        public static void info(long ch){        
            System.out.println("info long");    
        }   
        public static void info(double ch){        
            System.out.println("info double");    
        }
    }
    //执行完全匹配的,结果输出info char
    public class Demo08{    
        public static void main(String[] args){        
            info(12,12.1f);            
        }         
         public static void info(char ch,double d){        
            System.out.println("info char ch,double d");    
        }    
        public static void info(int ch,double d){
            System.out.println("int ch,double d");    
        }    
        public static void info(long ch,float d){        
            System.out.println("long ch,float d");    
        }     
    }
    //程序报错,因为存在两个可以调用的方法
    public class Demo06{    
        public static void main(String[] args){        
            info(12);            
        }       
        public static void info(long l){  //基本数据类型,编号1      
            System.out.println("info long l");    
        }  
        public static void info(Integer in){  //基本数据类型的包装类,编号2      
            System.out.println("Integer in");    
        }   
        /* jdk1.5之后,支持可变参数  */    
        public static void info(int ... ins){ //可变参数,编号3   
            System.out.println("Integer ... ins");    
        } 
    }
    //当编号1,2,3都存在时,执行,编号1;当只有编号2,3时,执行编号2;只存在编号3时,执行编号3.
    

    递归

    一种编程技巧,在程序中方法自己调用自己。

    优势:更快写出代码,复杂度低。

    劣势:消耗内存大。

    注意:可以使用递归的一定可以使用循环,使用循环的不一定可以使用递归。

    使用场景:算法,数据结构。

    尾递归:做到栈帧复用的递归。

    经典案例:斐波那契数列(尾递归)

    package com.mage.var;
    
    public class Test01{
        public static void main(String[] args){
            int num = 4;
            long result = method(num,1,1);
            System.out.println("第"+num+"项斐波那契数列是"+result);
        }
        public static long method(long num,long ret1,long ret2 ) {
            if(num==1) {
                return ret1;
            }else {
                return method(num-1,ret2,ret1+ret2);
            }
        }
    }
    //结果为:第4项斐波那契数列是3
    

    相关文章

      网友评论

          本文标题:Java方法

          本文链接:https://www.haomeiwen.com/subject/acgbdctx.html