2023年2月28日大约 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中只存在值传递,对于- 基本类型、- 引用类型均是如此,因此方法中对某个传递过来的参数进行赋值操作的时候,均不会影响原来的值 【参考文章】
- 对于引用类型,直接在方法中修改了它的具体属性,外部会发生改变的原因是在 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);
  }
}重载
方法名相同,参数列表不同的方法
- 同一个作用域下,并且方法名称相同
- 函数参数 类型不同 或者 个数不同 或者 顺序不同,与方法 参数名、返回值、访问修饰符 无关
- 可变参数作为参数的重载方法不会被优先调用
