TypechoJoeTheme

Clover 的博客

统计
登录
用户名
密码
/
注册
用户名
邮箱

CloverYou

日出于东却落于西,相识人海却散于席。

4、Java方法

2022-01-02
/
0 评论
/
31 阅读
/
正在检测是否收录...
01/02

理论

分析以下程序,不使用“方法”有哪些缺点?

public void method(){
    //需求1:请编写程序计算 1 和 2 的和,并将结果输出:【计算两个int类型数据的和】
    int i = 1;
    int y = 2;
    int r1 = i + y;
    System.out.println(i + "+" + y + "=" + r1);
    
    //需求2:请编写程序计算 10 和 20 的和,并将结果输出:【计算两个int类型数据的和】
    int i2 = 10;
    int y2 = 20;
    int r2 = i2 + y2;
    System.out.println(i2 + "+" + y2 + "=" + r2);
    
    //需求1:请编写程序计算 100 和 200 的和,并将结果输出:【计算两个int类型数据的和】
    int i3 = 100;
    int y3 = 200;
    int r3 = i3 + y3;
    System.out.println(i3 + "+" + y3 + "=" + r3);
}
  • 以上需求其实就是一个需求
  • 这个需求是:计算两个 int 类型数据的和,功能相同
  • 只是每次参与计算的数据不同
  • 问题、缺点

    • 过多的代码重复
    • 无法复用
    • 开辟无意义的内存空间较多

在Java语言当中有这样一种机制:

  • 某个功能代码只需要写一次
  • 需要使用这个功能,只需要给这个功能传递具体的数据
  • 这个功能完成之后返回一个最终的结果。

解决

学了方法之后,就可以调用某个方法来进行计算,只要给出数据,该方法只需要计算出结果返回

public void method(){
    //需求1:请编写程序计算 1 和 2 的和,并将结果输出:【计算两个int类型数据的和】
    System.out.println("1 + 2 =" + mathFoot(1,2));

    //需求2:请编写程序计算 10 和 20 的和,并将结果输出:【计算两个int类型数据的和】
    System.out.println("10 + 20 =" + mathFoot(10, 20));
 
    //需求1:请编写程序计算 100 和 200 的和,并将结果输出:【计算两个int类型数据的和】
    System.out.println("100 + 200 = " + mathFoot(100, 200));
}

public int mathFoot(int l, int r){
    return l + r;
}

以上程序优点

  • 代码得到了重复使用
  • method 方法更简洁了

这样可以重复利用,减少沉余代码。

方法是什么?

方法的本质是什么?

  • 方法就是一段独立的代码片段
  • 可以完成特定的功能
  • 可以重复调用
  • Java中的方法定义在类体当中
  • 方法无法定义在方法体当中
  • 由Java语句构成,方法体当中的代码遵循由上而下的顺序依次执行

方法定义

  • 方法怎么定义?语法结构

    • [修饰符列表] 返回值类型 方法名(形式参数列表) { 方法体 }
  • 对以上语法结构进行解释说明

    • 关于修饰符列表

      • 可选项,不是必须的
      • 目前统一写成:public static
      • 方法的修饰符列表当中有 static 关键字的话,怎么调用这个方法?

        • className.MethodName(实际参数列表)
    • 返回值类型

      • 什么是返回值?

        • 一个方法是可以完成某个特定功能,这个功能结束之后,大多数都是需要返回最终执行结果的,执行结果可能是一个具体存在的数据。而这个具体存在的数据就是返回值
      • 返回值类型
      • 返回值是一个具体存在的数据,数据都是有类型的,此处需要指定的是返回值的具体类型。如果返回值类型不是指定返回类型的话编译器报错。
      • 返回值类型都可以指定哪些数据类型呢?

        • Java任意一种数据类型都可以,包括基本数据类型和所有的引用数据类型。
      • 也可能这个方法执行结束之后不返回任何数据,Java中规定,当一个方法执行结束之后不返回任何数据的话,返回值类型位置必须编写:void 关键字
      • 返回值类型如果不是 void ,表示这个方法执行结束之后必须返回一个具体的数值。当方法执行结束的时候没有返回任何数据的话编译器报错。
      • 返回值类型是 void 的时候,在方法体当中不能编写 return 值; 这样的语句。但是可以编写 return; 这样的语句。
      • 只要带有 return 关键字的语句执行,return 语句所在的方法结束。强行终止正在执行的方法。「不是JVM结束,是所在的方法结束」

  • 方法名:

    • 只要是合法的标识符就行
    • 方法名最好见名知章
    • 方法名最好是动词

      • 因为方法是用来完成某些特定功能的
    • 方法名首字母要求小写,后面每个单词首字母大写
  • 方法体

    • 方法体必须由大括号括起来,方法体当中的代码有顺序,遵循由上而下的顺序依次执行。并且方法体由Java语句构成,每一个Java语句以 ; 结尾。
  • 形式参数列表,简称:形参

    • 形参是局部变量
    • 形参的个数可以是 0 ~ n 个
    • 多个形参之间用 , 隔开
    • 形参的名字只要是合法的标识符就行
    • 实参与形参列表必须满足:

      • 类型对应相同
      • 数量相同
    • 形参中起决定性作用的是形参的数据类型,形参的名字就是局部变量的名字。
      形参起决定性作用的是形参的数据类型例如:

    方法定义
    public static int sum(int a, int b){}
    方法调用
    sum("abc", "def"); 因为规定的是两个int类型的变量,这里传递的却是两个String,所以编译器报错。

    sum(1,2); (1,2)是实参列表

  • 方法怎么调用?

    • 方法只定义不去调用是不会执行的,只有在调用的时候才会执行。
      语法规则:「方法的修饰符当中有 static

    className.methodName(实参列表);这是一条Java语句。表示调用某个 class 的某个 method.,传递这样的参数。

实践

public class testMethod {
  public static void main(String[] args){}
}

public 表示公开的

class 表示定义类的关键字

testMethod 是一个类名

表示定义一个公开的类,起名testMethod,由于是公开的类,所以,源文件名必须是:testMethod.java{...} 是类体部分,在类体中不能直接编写Java语句,除变量之外。

public static testMethod {...}

方法出现在类体当中。以下就是一个方法。

public 表示公开的

static 表示静态的

void 表示方法执行结束后没有返回值

main 方法名:主方法,这个是一个程序的入口,这是由JVM调用的方法,一定会执行

(String[] args) 形式参数列表,其中String[]是一种引用数据类型,args是局部变量的变量名

以下只有args这个局部变量的变量名是随意的

主方法就需要这样固定编写,这是程序的入口。「SUM规定的,必须这样写」

public static void main(String[] args){...}

以下是自定义方法,不是程序的入口(编写在类体中)

方法作用:计算两个 int 类型数据的和,不要求返回结果,但是要求将结果直接输出到控制台。

修饰符列表:public static

返回值类型:void

方法名:sum

形式参数列表:(int x, int y)

方法体:主要任务是,求和之后输出计算结果

public static void sum(int x, int y){
  System.out.println(x + "+" + y + "=" + (x + y));
}

以上程序编写好之后需要调用,让main调用sum,这两个方法并没有任何区别,但是mainJVM调用而sum没有方法去调用它。main是由虚拟机(JVM)调用,所以main一定会执行。因为sum是一个静态方法,所以需要指定所在的className。方法可以复用。

sum计算 1 和 2 的和之后打印。

public static void main(String[] args){
  testMethod.sum(23, 1232);
  testMethod.sum(1342, 212);
  testMethod.sum(4211, 4532);
}

在Java中,代码执行总是以同步的形式进行执行,以上代码示例:

以代码块行号为准,当第二行代码执行时,main不会往下执行,它需要等待sum执行完成后才会继续往下走,而走到第三行时又等待sum执行完成后才依次往下执行。方法体内的代码是有顺序的,遵循自上往下依次执行。

整合代码

public class testMethod {
  public static void main(String[] args){
    testMethod.sum(23, 1232);
    testMethod.sum(1342, 212);
    testMethod.sum(4211, 4532);
  }
  public static void sum(int x, int y){
    System.out.println(x + "+" + y + "=" + (x + y));
  }
}

一个方法存在的意义是为了完成某一个功能,如果已经脱离了这个功能,那么它就没有存在的意义。

以下问号的位置是任何一个程序员将来需要攻克的位置

public static ??? 方法名(???){???}
  1. 你觉得方法需要返回什么值比较合适
  2. 这个方法在定义的时候,需要定义什么样的参数
  3. 方法定义好后,方法体内的代码应该怎么去编写
JAVA学习笔记
朗读
赞(0)
版权属于:

Clover 的博客

本文链接:

https://www.ctong.top/index.php/archives/11/(转载时请注明本文出处及文章链接)

评论 (0)
CloverYou
日出于东却落于西,相识人海却散于席。
88 文章数
11 评论量
IP信息

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 缓存一致性 - 点击领取
    2022-01-06
  2. 宝宝
    2022-01-02

标签云