Java方法

方法介绍?

  • 什么是方法?

    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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容