Java 方法

方法是解决某些特定问题的一种方式. Java 也是如此, 同时他融入了逻辑和循环控制, 让一些复杂, 重复的, 繁琐的问题的解决成为了可能. 同样我们可以轻松的修改代码让 Java 方法来解决适配更多的问题中的特殊情况.在本节中我们将学习如何在Java中定义和使用方法.

什么是 Java 的方法

方法是一块代码, 语句合集或代码的组合, 用于解决特定的问题或操作.

写方法的主要目的在于解决一些通用的问题, 这样我们就不用一遍一遍的重复一段相同的代码来解决一组类似的问题了.

方法其实是一种抽象的解决问题的方式, 他将问题中的各种情况抽象成参数, 通过调用方法时输入不同的参数, 来解决同一类特定的问题或完成同一类操作.

我们之前定义和使用过的最多的方法是:

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

这是 Java 中默认的执行Java程序的入口方法.

如何声明一个方法

在使用方法前, 我们首先要学会声明一个方法(也可以叫定义一个方法), 一个方法的声明需要声明他的可见性, 返回值, 名称, 参数等 , 我们先来看Java方法的定义图:

Java 方法

 

现在我们来解释各个部分

访问修饰符

访问修饰符通常有 public, protected, private 以及默认访问修饰符(无指定的访问修饰符), 他们控制了方法在Java中的可见性(别的方法和类能不能看到, 调用这个方法), 详情请参见后面的 Java 修饰符 一节

返回类型

返回类型是方法返回的数据类型, 他可以是基础数据类型, 数组, 一类对象, 如果我们啥也不返回, 就使用 void 关键词.

方法名

方法的名称, 这是一类标识符, 使用时应当符合标识符的使用规则. 方法的名称最好与其实现的功能相关, 以便于使用者看到这个方法名称, 就知道这个方法是要做解决什么问题的.

参数列表

置于圆括号中, 用逗号 "," 分割的, 指定类型的标识符的列表. 方法的参数与方法中的本地变量类似, 只不过"这种变量"的初始化过程是在调用方法时就已经完成了的.

参数的个数, 类型, 取决于方法的需要, 但是要注意:

  • 参数列表可以为空, 也就是不提供参数.
  • 参数的个数也可以是不确定的, 详情参见 Java 的不定项参数 .

方法签名

每个方法都有方法签名, 他由方法名参数列表构成. 每个方法签名在类中都是唯一的, 这里的唯一, 要这么理解:

  • 同一个方法名加相同的参数列表(类型一致, 无关参数列表中的名称)的组合在同一个类中只能出现一次.
  • 同一个方法名+不同类型的参数列表, 可以都出现在同一个类中.

方法体

花括号中声明的就是方法体, 方法体是方法的具体实现, 他通过给定的参数列表, 从外部获取必要的参数来解决问题, 返回指定的类型 或 只做处理返回 void

什么是构造方法

构造方法是一类特殊的方法, 用于在类初始化的时候, 做一些初始化工作的方法, 例如初始化类的一些属性的值. 构造方法也是方法, 也可以提供参数列表, 因此让类的初始化基于外部环境变化而变化成为了可能. 构造方法的特殊性表现如下:

  • 构造方法的方法名必须与类同名
  • 构造方法无需也不能声明返回类型, 同样也无需在方法中做返回操作
  • 创建类实例的时候, 构造方法会自动被调用

同时要注意, 构造方法不是必须的:

  • 若没有定义构造方法, Java 编译器会自动为类提供一个没有参数的构造方法
  • 若定义了构造方法, 编译器将不再提供构造方法

声明方法的例子

经过上面初步的了解, 我们已经知道一个方法的声明需要那些要素了, 现在我们用例子来加深我们对声明方法的理解:

public class Yi21MethodDemo {

    static class MyInteger {

        private int value = 0;

        public MyInteger(int value) {
            this.value = value;
        }

        public int add(int a) {
            return value + a;
        }

        public int multi(int a) {
            return value * a;
        }

        @Override
        public String toString() {
            return "Value: " + String.valueOf(value);
        }
    }

    public static void main(String[] args) {
        MyInteger integer = new MyInteger(25);
        System.out.println(integer.add(75));
        System.out.println(integer.multi(4));
        System.out.println(integer);
    }
}

在上面的例子中, 我们定义了一个类 MyInteger , 这是我们自己的整型封装类, 定义了一个属性 value 用于实际存放整数的值值. 然后我们定义了4个方法:

  1. MyInteger 构造方法, 初始化了 value 的值
  2. add 方法, 将 value 的值与提供的整型参数 a 相加返回一个整数
  3. multi 方法, 将 value 的值与提供的整型参数 a 相乘返回一个整数
  4. toString 方法, 返回当前 value 的字符串类的值, 这也是一个特殊的方法, 是当我们尝试把一个类作为字符串时使用的时候自动调用的

之后我们通过 MethodDemo 类的 main 方法调用:

  1. 声明了一个 MyInteger 类型的变量 integer, 初始化的值得为25, 这里调用了  MyInteger 的构造方法, 这个对象 value 的就会在构造方法中被修改成 25
  2. 调用了 MyIntegeradd 方法, 计算过程相当于 25 + 75, 并输出
  3. 调用了 MyInteger 的 multi 方法, 计算过程相当于 25 * 4, 并输出
  4. 直接将 integer 变量作为字符串输出, 这里会自动调用 MyInteger 的 toString 的方法

经过说明, 我们不难理解, 以上代码的执行结果会如下:

100
100      
Value: 25

静态方法, 抽象方法

静态方法

使用 static 修饰符修饰的方法, 我们称之为静态方法, 静态方法不需要将类初始化, 可直接通过类名调用. 我们经常用到的 main(String[] args) 方法就是一个典型的静态方法.

抽象方法

使用 abstract 修饰符修饰的方法, 我们称之为抽象方法, 抽象方法是没方法体的方法, 他只能存在于抽象类中(abstract 修饰符修饰的类). 抽象方法无法被直接调用, 如果我们要使用一个抽象类, 必须先实现他下面包含的所有抽象方法. 

以上就是 Java 方法 的全部内容了, 下一节请看 什么是Java的包