Day06

一. 函数(方法)

  1. 定义
    • java中的运行代码除极个别情况外,必须写在方法中, 方法就是代码的载体
    • 我们平时写代码的main方法也是一个方法,只是比较特殊而已, 可以被jvm识别
    • 因为要适应不同的需求, 我们的方法也是千变万化的. 一个main方法显然是无法达到我们的要求的
    • 当我们用代码定义了一个功能, 想要将功能保存下来沿用,就必须要以方法为载体
    • 方法的出现提升了代码的复用性
  1. 格式

    权限修饰符 静态/非静态 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
     //方法体语句;
     return 返回值; 
    }
    
  2. 格式详解

    • 修饰符 : 设定方法的作用范围, 现阶段只要用public就可以了
    • 静态/非静态 : static关键字表示静态 , 出现static , 这个方法就是静态方法,没有就是非静态
    • 返回值类型 : 就是代码运行的结果的数据类型
    • 方法名 : 这个方法的名称, 调用的时候我们使用的就是方法名
    • 参数 :
      • 实际参数 : 就是实际参加运算的值 , 基本数据类型就是值, 引用数据类型是地址值
      • 形式参数 : 定在在方法上, 用来表示接收的数据的类型
    • 参数名 : 就是变量名
    • 方法体语句 : 方法中的功能代码, 也是我们实际运行的代码
    • return : 关键字, 表示结束方法, 同时可以返回一个值
    • 返回值 : 就是功能的运行的结果, 由return带给调用者
  3. 演示

    public static void main(String[] args) {
     //调用计算两个数乘积的方法
     int c = multipy(14, 15);
     System.out.println(c);
    }
    //定义方法,计算两个数的乘积
    public static int multipy(int a, int b){
     int count = a * b;
     
     return count;
    }
    
  4. 测试题

    • 定义方法,根据数字打印对应行数等腰三角形

二. 方法的分类和调用

  1. 方法的分类

    • 有参方法
    • 无参方法
    • 有返回值
    • 无返回值
    //无参无返回值的方法
    public static void method1(){
     System.out.println("我就是自娱自乐");
    }    
    //有参无返回值的方法
    public static void method2(int a){
     //计算a平方 
     System.out.println(a*a);
    }    
    //无参有返回值的方法
    public static long method3(){
     //获取当前时间
     long time = System.currentTimeMillis();
     return time;
    }
    //有参有返回值
    public static int method4(int a,int b){
     //返回a,b中数值较大的那个
     return a>b?a:b;
    }
    
  2. 调用方式

    • 单独调用 方法独立于其他代码, 独立执行功能
      • 多用检测维护型的方法
    • 输出调用 只做结果输出, 这种调用对我们来说没有任何意义
    • 赋值调用 有返回值结果, 可以进一步操作返回值
    public static void main(String[] args) {
     //赋值调用
     int c = multipy(14, 15);
     System.out.println(c);
     
     //输出调用
     print();
     
     //单独调用
     clear();
    }
    //定义方法,计算两个数的乘积
    public static int multipy(int a, int b){
     int count = a * b;
     
     return count;
     
    }
    
    //打印语句功能
    public static void print(){
     System.out.println("哇,有美女....");
    }
    
    //清理系统垃圾功能
    public static void clear(){
     for (int i = 0; i < 1000; i++) {
         System.out.println("系统清理中....");
     }
    }
    
  3. 测试题

    • 定义一个获取整数绝对值的方法, 并调用
    • 定义一个计算一定范围内整数和的方法, 并调用
  4. 参数传递

    • 调用方法时,传递一个实参,就相当于将这个实参赋值给形参

三. 方法的重载(overloading)

  1. 定义

    • 一个类里面出现多个方法名相同 , 参数列表不同的多个方法 , 我们叫这种现象为方法重载
    • 方法重载是为了提高方法名的使用率 , 毕竟意思相同的单词就那么几个 , 而且 我们的方法功能也类似 , 这种情况下如果使用不用的方法名 , 很可能造成意义混 乱 , 所以就出现了方法重载
    • 在我们的程序中绝对不允许出现两个一模一样的方法, 如果我们能想办法让jvm区别每个方法,那么这个方法就可以使用
  2. 参数列表

    • 参数个数不同
    • 参数类型不同
    • 参数的顺序不同(也算是重载,但是一般开发中不用, 没有意义)
  3. 案例演示

    public static void method(int i,double d){
     
     
    }
    //和第一个方法的参数个数不同
    public static void method(int i){
        
    }
    
    //和第一个方法的参数的类型不同
    public static void method(String str,float f){
    
    }
    
    //和第一个方法的参数的顺序不同
    public static void method(double d,int i){
    
         
    }
    
  1. 测试题

    • 定义两个重载方法, 一个方法是计算两个的和, 一个方法是计算三个整数的和
    • 定义两个重载方法, 比较两个int型和double型是否相等

四. 方法间相互调用的内存图

  1. 栈的定义
    • 运行方法和存储局部变量
    • 栈是一个一端开口的筒子,类似于羽毛球筒
  2. 执行流程
    • 当jvm执行某个方法时,会将这个方法放入到栈中执行,当这个方法中又调用了其他方式时,jvm就会将新的方法也放入栈中已有的方法的上面执行,当方法执行完毕后,方法就会被jvm从栈中移除,我们称之为弹栈

五. 可变参数

  1. 定义

    • 在方法声明上使用...表示多个相同类型的参数
  2. 注意事项

    • 在实际调用中,我们已经在方法内传入多个实参, 虚拟机会自动帮我们填充到可变参数上,形成一个数组
  3. 示例

    public void method(String... strs){
         for (int i = 0; i < strs.length; i++) {
             System.out.println(strs[i]);
         }
    }
    public static void main(String[] args) {
         
         Class class1 = new Class();
         class1.method("小明","小红","小时");
         
    }
    

总结:

  1. 方法
    • 将一段代码圈起来,便于重复使用(提高代码的复用性)
    • 方法名 : 别的方法要调用当前方法,需要方法名
    • 参数列表:当前方法运行的原材料
    • 返回值类型: 检测或者是规定当前返回出去的结果的类型
  2. 方法的分类和调用
    • 有参有返回值
    • 有参无返回值
    • 无参有返回值
    • 无参无返回值
    • 赋值调用
    • 单独调用
    • 输出调用
  3. 方法的重载
    • 类中出现了方法名相同,参数列表不同的方法,这种现象我们称之为重载
    • 参数列表不同的表现:
      • 类型不同
      • 长度不同
      • 顺序不同(无意义)
  4. 方法间调用的内存原理
    • 虚拟机开启,只会执行main方法, 其他的方法都必须由main方法调用才能引出来
    • 栈 : 一端开口, 方法的运行区域
      • 栈只会执行最顶端的方法
      • 压栈, 弹栈
  5. 可变参数
    • ...
    • 优点 : 既可以接收数组, 也可以接收散装数据
    • 缺点 : 必须是参数列表的最后一个参数

作业

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

推荐阅读更多精彩内容