首页 > 编程语言 >Java学习Day07

Java学习Day07

时间:2023-08-02 20:22:41浏览次数:32  
标签:arr Java int Day07 学习 参数 static 方法 public

第六章 方法

一、方法

1.1、概述

在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法。

如:小明同学在路边准备坐车来学校学习。这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢?可采用坐公交车或坐出租车的方式来学校,那么,这种解决某件事情的办法,我们就称为方法。

在java中,方法就是用来完成解决某件事情或实现某个功能的办法。方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本,控制输入或计算数值。

我们可以通过在程序代码中引用方法名称和所需的参数,实现在该程序中执行(或称调用)该方法。方法,一般都有一个返回值,用来作为事情的处理结果。

需要注意:

  • 方法必须先创建才可以使用,该过程成为方法定义
  • 方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用

1.2、方法使用

1.2.1、语法格式

# 语法
    修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2,......){ 
        执行语句
        ……… 
        return 返回值;
    }

对于上面的语法格式中具体说明如下:

  • 修饰符:方法的修饰符比较多,有对访问权限进行限定的,有静态修饰符static,还有最终修饰符final等,这些修饰符在后面的学习过程中会逐步介绍
  • 返回值类型:用于限定方法返回值的数据类型
  • 参数类型:用于限定调用方法时传入参数的数据类型
  • 参数名:是一个变量,用于接收调用方法时传入的数据
  • return关键字:用于结束方法以及返回方法指定类型的值
  • 返回值:被return语句返回的值,该值会返回给调用者
  • 需要特别注意的是,方法中的“参数类型 参数名1,参数类型 参数名2”被称作参数列表,它用于描述方法在被调用时需要接收的参数,如果方法不需要接收任何参数,则参数列表为空,即()内不写任何内容。
  • 方法的返回值必须为方法声明的返回值类型
  • 如果方法中没有返回值,返回值类型要声明为void,此时,方法中return语句可以省略。

12.2、方法定义

public static void method() { 
    // 方法体; 
}

1.2.3、方法调用

method();

1.2.4、案例

public class MethodDemo01 {
  public static void main(String[] args) {
    int area = getArea(3, 5); // 调用 getArea方法
    System.out.println(" The area is " + area);
  }

  // 下面定义了一个求矩形面积的方法,接收两个参数,其中x为高,y为宽
  public static int getArea(int x, int y) {
    int temp = x * y; // 使用变量temp记住运算结果
    return temp; // 将变量temp的值返回
  }
}

在上述代码中,定义了一个getArea()方法用于求矩形的面积,参数x和y分别用于接收调用方法时传入的高和宽,return语句用于返回计算所得的面积。在main()方法中通过调用getArea()方法,获得矩形的面积,并将结果打印。

从上图中可以看出,在程序运行期间,参数x和y相当于在内存中定义的两个变量。当调用getArea()方法时,传入的参数3和5分别赋值给变量x和y,并将x*y的结果通过return语句返回,整个方法的调用过程结束,变量x和y被释放。

1.3、练习

1.3.1、案例1

定义无返回值无参数方法,如打印3行,每行3个*号的矩形。

public static void printRect(){
  //打印3行星
  for (int i=0; i<3; i++) {
    //System.out.println("***"); 相当于是打印3颗星,换行
    //每行打印3颗星
    for (int j=0; j<3; j++) {
      System.out.print("*");  // ***
    }
    System.out.println();
  }
}

1.3.2、案例2

定义有返回值无参数方法,如键盘录入得到一个整数。

public static int getNumber(){
  Scanner sc = new Scanner(System.in);
  int number = sc.nextInt();
  return number;
}

1.3.3、案例3

无返回值有参数方法,如打印指定M行,每行N个*号的矩形

public static void printRect2(int m, int n){
  //打印M行星
  for (int i=0; i<m; i++) {
    //每行中打印N颗星
    for (int j=0; j<n; j++) {
      System.out.print("*");  
    }
    System.out.println();
  }
}

1.3.4、案例4

有返回值有参数方法,如求三个数的平均值。

public static double getAvg(double a, double b, double c) {
  double result = (a+b+c)/3;
  return result;
}

1.4、方法的重载

1.4.1、场景引入

我们假设要在程序中实现一个对数字求和的方法,由于参与求和数字的个数和类型都不确定,因此要针对不同的情况去设计不同的方法。接下来通过一个案例来实现对两个整数相加、对三个整数相加以及对两个小数相加的功能,具体实现如下所示:

public class MethodDemo02 {
  public static void main(String[] args) {
    // 下面是针对求和方法的调用
    int sum1 = add01(1, 2);
    int sum2 = add02(1, 2, 3);
    double sum3 = add03(1.2, 2.3);
    // 下面的代码是打印求和的结果
    System.out.println("sum1=" + sum1);
    System.out.println("sum2=" + sum2);
    System.out.println("sum3=" + sum3);
  }

  // 下面的方法实现了两个整数相加
  public static int add01(int x, int y) {
    return x + y;
  }
  // 下面的方法实现了三个整数相加
  public static int add02(int x, int y, int z) {
    return x + y + z;
  }
  // 下面的方法实现了两个小数相加
  public static double add03(double x, double y) {
    return x + y;
  }
}

1.4.2、问题说明

从上述代码不难看出,程序需要针对每一种求和的情况都定义一个方法,如果每个方法的名称都不相同,在调用时就很难分清哪种情况该调用哪个方法。

为了解决这个问题,Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。

1.4.3、方法重载

public class MethodDemo03 {
  public static void main(String[] args) {
    // 下面是针对求和方法的调用
    int sum1 = add(1, 2);
    int sum2 = add(1, 2, 3);
    double sum3 = add(1.2, 2.3);
    // 下面的代码是打印求和的结果
    System.out.println("sum1=" + sum1);
    System.out.println("sum2=" + sum2);
    System.out.println("sum3=" + sum3);
  }

  // 下面的方法实现了两个整数相加
  public static int add(int x, int y) {
    return x + y;
  }
  // 下面的方法实现了三个整数相加
  public static int add(int x, int y, int z) {
    return x + y + z;
  }
  // 下面的方法实现了两个小数相加
  public static double add(double x, double y) {
    return x + y;
  }
}

上述代码中定义了三个同名的add()方法,它们的参数个数或类型不同,从而形成了方法的重载。

在main()方法中调用add()方法时,通过传入不同的参数便可以确定调用哪个重载的方法。

如add(1,2)调用的是两个整数求和的方法。

值得注意的是,方法的重载与返回值类型无关,它只有两个条件,一是方法名相同,二是参数个数或参数类型不相同。

1.5、重载的注意事项

  • 重载方法参数必须不同:
    • 参数个数不同,如method(int x)与method(int x,int y)不同
    • 参数类型不同,如method(int x)与method(double x)不同g
    • 参数顺序不同,如method(int x,double y)与method(double x,int y)不同
  • 重载只与方法名与参数类型相关与返回值无关
    • 如void method(int x)与int method(int y)不是方法重载,不能同时存在
  • 重载与具体的变量标识符无关
    • 如method(int x)与method(int y)不是方法重载,不能同时存在

1.6、参数传递

1.6.1、说明

参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。这种传递方式,我们称为参数传递。

  • 在这里,定义方法时,参数列表中的变量,我们称为形式参数
  • 调用方法时,传入给方法的数值,我们称为实际参数

1.6.2、案例1

public class ArgumentsDemo01 {
  public static void main(String[] args) {
    int a=5;
    int b=10;
    change(a, b);//调用方法时,传入的数值称为实际参数
    System.out.println("a=" + a);
    System.out.println("b=" + b);
  }

  public static void change(int a, int b){//方法中指定的多个参数称为形式参数
    a=200;
    b=500;
  }
}

1.6.3、案例2

public class ArgumentsDemo02 {
  public static void main(String[] args) {
    int[] arr = { 1, 2, 3 };
    change(arr);// 调用方法时,传入的数值称为实际参数
    
    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
  }

  public static void change(int[] arr) {// 方法中指定的多个参数称为形式参数
    for (int i = 0; i < arr.length; i++) {
      arr[i] *= 2;
    }
  }
}  

  • 当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
  • 当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响

二、数组作为方法参数和返回值

2.1、数组作为方法参数

2.1.1、说明

数组作为方法参数传递,传递的参数是数组内存的地址。

2.1.2、代码

public static void main(String[] args) { 
    int[] arr = { 1, 3, 5, 7, 9 }; 
    //调用方法,传递数组 
    printArray(arr);
}
/* 创建方法,方法接收数组类型的参数 进行数组的遍历 */
public static void printArray(int[] arr) { 
    for (int i = 0; i < arr.length; i++) { 
        System.out.println(arr[i]); 
    } 
}

2.2、数组作为方法返回值

2.2.1、说明

数组作为方法的返回值,返回的是数组的内存地址。

2.2.2、代码

public static void main(String[] args) { 
    //调用方法,接收数组的返回值 
    //接收到的是数组的内存地址 
    int[] arr = getArray(); 
    for (int i = 0; i < arr.length; i++) { 
        System.out.println(arr[i]); 
    } 
}

public static int[] getArray() { 
    int[] arr = { 1, 3, 5, 7, 9 }; 
    //返回数组的地址,返回到调用者 
    return arr; 
}

2.2.3、图示

2.3、方法的参数类型区别

2.3.1、案例1

public static void main(String[] args) { 
    int a = 1; 
    int b = 2; 
    System.out.println(a); 
    System.out.println(b); 
    
    change(a, b); 
    
    System.out.println(a); 
    System.out.println(b); 
}

public static void change(int a, int b) { 
    a = a + b; 
    b = b + a; 
}

2.3.2、案例2

public static void main(String[] args) { 
    int[] arr = {1,3,5}; 
    System.out.println(arr[0]); 
    
    change(arr); 
    
    System.out.println(arr[0]); 
}

public static void change(int[] arr) { 
    arr[0] = 200; 
}

2.3.3、总结

# 方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.

标签:arr,Java,int,Day07,学习,参数,static,方法,public
From: https://www.cnblogs.com/swz20020720/p/17601653.html

相关文章

  • java 十六进制字符串转换为有符号整数
    StringhexString="FEF7";//十六进制字符串intintValue=Integer.parseInt(hexString,16);//将十六进制字符串转换为整数shortsignedValue=(short)intValue;//转换为短整型(16位有符号整数)intintValue=(bytes[1]&0xFF)<<8|(bytes[0]&0xFF);//合并......
  • GTD学习资料
    1理论GTD精要掘灵计划0010:被神化了的GTD,究竟能帮我们什么忙?小常识:GTD和时间管理没有半毛钱关系GetThingsDone–Part32实践GTD系列教程4:本草纲目的MLO系统实战总结GTD在滴答清单中的具体实践(模板实现)GTD经验分享:有效率的工作GettingThingsDone(GTD)Flowchart:ACompl......
  • 微信小程序学习笔记(完结)
    本笔记是小程序学习笔记,主要记录小程序の基础知识说明本笔记为观看慕课网微信小程序入门与实战-全新版、尚硅谷2021版微信小程序开发(零基础小程序开发入门到精通)这两个教学视频、并参照官方的微信开放文档记录整理而成两个教学视频主要就是是面向初学者......
  • Java内部类
    一、内部类的定义:定义在类中的类二、内部类的作用内部类可以访问外部类的所有数据,包括被【private修饰的私有数据】(1)为什么内部类可以访问外部类的所有成员变量内部类编译后会单独生成一份class文件,编译器会自动为内部类添加一个【外部类类型】的实例,内部类通过【外部类......
  • k8s 学习笔记之 Pod——Pod 的配置
    Pod的配置先研究pod.spec.containers属性,这也是pod配置中最为关键的一项配置。[root@k8s-master01~]#kubectlexplainpod.spec.containersKIND:PodVERSION:v1RESOURCE:containers<[]Object>#数组,代表可以有多个容器FIELDS:name<string>#容器名......
  • k8s 学习笔记之 Pod——Pod 的生命周期
    Pod生命周期我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程:pod创建过程运行初始化容器(initcontainer)过程运行主容器(maincontainer)容器启动后钩子(poststart)、容器终止前钩子(prestop)容器的存活性探测(livenessprobe)、就绪性探......
  • Drone自动化构建学习
    使用Drone进行自动化构建提到CI/CD,最有名的当然是jenkins,但是它好像太复杂了,不管是装在主机,还是装在docker里,都很难使用,更何况很多插件还很难下载。上手难度这么大,当然就不利于新手学习了,于是转而使用Drone,它可是相当轻量的产品了,本身就支持以容器提供服务。虽然只是简单的过程,......
  • k8s 学习笔记之 Pod——Pod 的介绍
    Pod的介绍Pod的结构每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类:用户程序所在的容器,数量可多可少Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个:可以以它为依据,评估整个Pod的健康状态可以在根容器上设置Ip地址,其它容器都此Ip(Pod......
  • 怀念中的java
     学了这门语言后一直没能做成项目,倒是安装环境,用记事本编辑的话,除了js最好做的就是java了。 以前学java的时候是一帮很有朝气的同学,在一个培训班,每天苦哈哈。从c开始学的语言,学完基础部分转入java。引入面向对象。后来引发了自己对面向对象长达好多好多年的思考。 老师说......
  • 老杜 JavaWeb 讲解(十七) ——JSP补充
    (十六)JSP补充相关视频:49-JSP的page指令以及九大内置对象和EL表达式指令指令的作用:指导JSP的翻译引擎如何工作(指导当前的JSP翻译引擎如何翻译JSP文件。)指令包括哪些呢?include指令:包含指令,在JSP中完成静态包含,很少用了。(这里不讲)taglib指令:引入标签库的指令。这个到JS......