Java——方法

介绍Java中的方法,方法如何定义、使用、重载4

一、方法是什么


Java方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题的步骤的有序组合。
  • 方法包含于类或对象中。
  • 方法在程序中被创建,在其他地方被引用。

二、方法的优点


  • 程序更加简短清晰。
  • 利于进行程序的维护。
  • 可以提高程序开发的效率。
  • 提高代码的重用性。

三、方法如何使用


1、命名

  • 命名采取小驼峰形式命名,如sumNumber。第一个单词首字母小写,后面的单词首字母大写,不使用连字符。
  • 下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test<MethodUnderTest>_<state>,例如 testPop_emptyStack

2、定义

修饰符 返回值类型 方法名(参数类型 参数名){
		···
		方法体
		···
		return 返回值;
}

示例: 比较两个整型数字大小的方法

public static int maxNum(int a,int b) { //方法
    if (a > b)
        return a;
    else
        return b;
}
public static void main(String[] args) {
       System.out.println( maxNum(10,5)); // 调用方法
}

注:

  1. 方法定义时不能嵌套。
  2. 方法定义时的参数是“形参”,方法调用时的参数是“实参”。
  3. 方法必须定义在类中,位置在调用位置的上方或下方都可以。
  4. 方法只有在调用的时候才会执行方法体中的代码。

2.1 形参与实参

形参是定义方法时使用的一个变量,用来接收调用方法时传递的值。形参的值是实参值得一份拷贝。用下面的例子来进行说明。

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    swap(a, b);
    System.out.println("实参: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
    int tmp = x;
    x = y;
    y = tmp;
    System.out.println("形参: x = " + x + " y = " + y);
}

在这里插入图片描述
可以看到,形参的值发生了交换但实参并没有交换。因为这个调用过程是传值调用,可以使用数组解决这个问题,数组是引用类型。

public static void main(String[] args) {
    int[] arr = {10, 20};
    swap(arr);
    System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
    int tmp = arr[0];
    arr[0] = arr[1];
    arr[1] = tmp;
}

在这里插入图片描述

3、方法的重载

一个类中的两个方法拥有相同的名字,但是有不同的参数列表,编译器通过方法的签名判断应该调用哪个方法。
示例: 对比大小方法进行重载,使其能够比较不同类型的数据的大小。

//根据参数类型进行重载
public static int maxNum(int a,int b) { // 两个int类型比较,返回int类型
    if (a > b)
        return a;
    else
        return b;
}
public static double maxNum(double a,double b) { // 两个double类型比较,返回double类型
    if (a > b)
        return a;
    else
        return b;
}
public static float maxNum(float a,float b) { // 两个float类型比较,返回float类型
    if (a > b)
        return a;
    else
        return b;
}
//根据参数数量进行重载
public static double maxNum(double a,double b,double c) {
    if(maxNum(a,b)>c)
        return maxNum(a,b);
    else
        return c;
}
public static float maxNum(float a,float b,double c) {
    if(maxNum(a,b)>c)
        return maxNum(a,b);
    else
        return c;
}

3.1 方法签名

那么编译器是如何区分这些重载的方法呢?
编译器看到的是方法签名:经过编译器修改过的方法名称。格式:全路径+参数列表+返回值类型

public static int maxNum(int a,int b) {
    if (a > b)
        return a;
    else
        return b;
}
public static double maxNum(double a,double b) {
    if (a > b)
        return a;
    else
        return b;
}
public static float maxNum(float a,float b) {
    if (a > b)
        return a;
    else
        return b;
}

public static void main(String[] args) {
    maxNum(10,20);
    maxNum(12.5f,23.1f);
    maxNum(12.3,21.2);
}

编译运行过后查看该代码的字节码文件,便能看到他们的方法签名
在这里插入图片描述
在这里插入图片描述

特殊字符数据类型
Vvoid
Zboolean
Bbyte
Cchar
Sshort
Iint
Jlong
Ffloat
Ddouble
[数组(其后加上其它特殊字符,表示对应数据类型的数组,“ [ ”数量表示几维数组)
L引用类型,L开头,“ ; ”结尾,中间为引用类型的全类名

4、构造方法

  • 当对象被创建时,构造方法用来初始化该对象。构造方法与类名相同,但是没有返回值。
  • Java中自动提供默认的构造方法,默认构造方法和类的访问修饰符相同。
  • 当定义了自己的构造方法,默认构造方法就会失效。

示例:

// 一个简单的构造函数
class MyClass {
  int x;
 
  // 以下是构造函数
  MyClass() {
    x = 10;
  }
}

使用构造方法初始化对象:

public class Test {
   public static void main(String args[]) {
      MyClass t1 = new MyClass();
      MyClass t2 = new MyClass();
      System.out.println(t1.x + " " + t2.x);
   }
}

5、可变参数

可以应用在不确定某一参数的个数的情况之下。

  • 在方法声明中,在指定参数类型后加一个省略号(…) 。
  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
  • 语法格式:typeName... parameterName

示例:

public class TestMethod {
    public static void main(String args[]) {
        // 调用可变参数的方法
        sumNum(1.5, 2.5, 3.5, 4.5, 5.5);
        sumNum(1, 2, 3);
    }

    public static void sumNum( double... numbers) {
        double sum = 0;
        for (int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
        }
        System.out.println("数字和为:"+sum);
    }
}

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值