跳至主要內容

方法

Yang大约 3 分钟JavaJava基础

方法是用来解决一类问题的代码的有序组合,是一个功能模块

  • 语法格式:访问修饰符 返回类型 方法名(参数列表){ 方法体 }

  • main:特殊的方法,程序执行的入口

访问修饰符

方法允许被访问的权限范围,分类如下,详细描述在 面向对象 - 封装 笔记文件里

  • 不写修饰符
  • public:公开的
  • protected:受保护的
  • private:私有的

分类

根据方法是否带参数、是否返回值,分为四类

无参无返回

// 打印星号分隔符
public class TestDemo {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
        testDemo.printStar();
    }

    public void printStar() {
        System.out.println("*******************");
    }
}

无参带返回

// 获取当前时间
import java.util.Date;
import java.text.SimpleDateFormat;

public class TestDemo {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
        System.out.println(testDemo.getCurrentTime());
    }

    public String getCurrentTime() {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年-月-日 时-分-秒
        String dateStr = sdf.format(date);
        return dateStr;
    }
}

带参无返回

// 打印矩形面积
public class TestDemo {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
        testDemo.printArea(4, 2);
    }

    public void printArea(float x, float y) {
        System.out.println("矩形的面积为:" + x * y);
    }
}

带参带返回

// 获取矩形面积
public class TestDemo {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
        float area = testDemo.getRectArea(4, 2);
        System.out.println("矩形的面积为:" + area);
    }

    public float getRectArea(float x, float y) {
        return x * y;
    }
}

参数

传参类型

  • 当参数是基本数据类型时,方法不能修改实际参数的值
  • 当参数是引用类型时,方法通过地址引用改变了实际参数对象的内容
    • java 中只存在值传递,对于 基本类型引用类型 均是如此,因此方法中对某个传递过来的参数进行赋值操作的时候,均不会影响原来的值 【参考文章】open in new window
    • 对于引用类型,直接在方法中修改了它的具体属性,外部会发生改变的原因是在 java 中引用类型的值是地址,在方法调用过程中,传递的是一份地址的拷贝,但是原引用和拷贝的引用依旧指向的是堆中的同一份值,因此,这份值做了改变,原来的对象本身就发生了变化

可变参数

允许在调用方法时传入不定长度的参数

实际上是 Java 的一个语法糖,本质上还是基于数组的实现

  • 多个参数时,可变参数要放在参数列表的最后(一个方法中只能有一个可变参数)
  • 当可变参数作为方法参数,方法调用时可以传入0个或多个参数,传入数组也可以。数组作为方法参数,方法调用时只能传入数组
// 求不定数量整数的和
public class TestDemo {
  public static void main(String[] args) {
    TestDemo testDemo = new TestDemo();
    testDemo.sum(1);
    testDemo.sum(1, 2);
    testDemo.sum(1, 2, 3);
  }

  public void sum(int... n) {
    int sum = 0;
    for (int i : n) {
      sum += i;
    }
    System.out.println(sum);
  }
}

重载

方法名相同,参数列表不同的方法

  • 同一个作用域下,并且方法名称相同
  • 函数参数 类型不同 或者 个数不同 或者 顺序不同,与方法 参数名、返回值、访问修饰符 无关
  • 可变参数作为参数的重载方法不会被优先调用
上次编辑于:
贡献者: sunzhenyang