如何在 Java 中使用方法

在本便捷教程中,了解 Java 中方法的定义、如何使用方法以及何时使用方法。
还没有读者喜欢这个。
What is your favorite open source Java IDE?

Pixabay。CC0。

Java 中的方法(在许多其他编程语言中称为“函数”)是一段代码,它被组合在一起并标记为可重用。方法很有用,因为它们允许您执行相同的操作或一系列操作,而无需重写相同的代码,这不仅意味着您可以减少工作量,还意味着在出现问题时需要维护和调试的代码更少。

方法存在于类中,因此标准的 Java 样板代码适用

package com.opensource.example;

public class Example {
  // code here
}

在像这样的简单单文件应用程序中,包定义不是绝对必要的,但养成这种习惯是很好的,并且大多数 IDE 都会强制执行它。

默认情况下,Java 会在一个类中查找要运行的 main 方法。方法可以设置为 public 或 private,以及 static 或 non-static,但 main 方法必须是 public 和 static,Java 编译器才能识别和使用它。当方法是 public 时,它可以从类外部执行。要在程序启动时调用 Example 类,其 main 方法必须是可访问的,因此将其设置为 public

这是一个演示两个方法的简单示例:一个 main 方法,它在调用 Example 类时默认执行,另一个 report 方法,它接受来自 main 的输入并执行一个简单的操作。

为了模拟任意数据输入,我使用了一个 if-then 语句,该语句根据您启动应用程序的时间在两个字符串之间进行选择。换句话说,main 方法首先设置一些数据(在现实生活中,这些数据可能来自用户输入,或者来自应用程序中其他地方的某些其他方法),然后“调用”report 方法,提供处理后的数据作为输入

package com.opensource.example;

public class Example {
  public static void main(String[] args) {
    // generate some data
    long myTime = System.currentTimeMillis();
    String weather;

    if ( myTime%2 == 0 ) {
      weather = "party";
    } else {
      weather = "apocalypse";
    }

    // call the other method
    report(weather);
  }

  private static void report(String day) {
    System.out.printf("Welcome to the zombie %s\n", day);
  }
}

运行代码

$ java ./Example.java
Welcome to the zombie apocalypse
$ java ./Example.java
Welcome to the zombie party

请注意,同一个 report 方法产生了两个不同的结果。当然,在这个简单的演示中,不需要第二个方法。同样的结果也可以从模拟数据生成的 if-then 语句中生成。但是,当一个方法执行复杂的任务时,例如将图像调整大小为缩略图,然后在屏幕上使用该调整大小后的图像生成小部件,那么额外组件的“成本”就变得非常有意义。

何时使用 Java 方法

很难知道何时使用方法,以及何时只将数据发送到 Java Stream 或循环中。如果您面临这个决定,答案通常是使用方法。原因如下:

  • 方法很廉价。它们不会给您的代码增加处理开销。
  • 方法减少了代码的行数。
  • 方法是具体的。通常更容易找到名为 resizeImage 的方法,而不是在从驱动器加载图像的函数中的某个循环中找到隐藏的代码。
  • 方法是可重用的。当您第一次编写一个方法时,您可能认为它只对您的应用程序中的一项任务有用。但是,随着应用程序的增长,您可能会发现自己正在使用您认为“完成”的方法。

函数式与面向对象编程

函数式编程使用方法作为执行任务的主要构造。您创建一个方法,该方法接受一种数据、处理该数据并输出新数据。将许多方法串在一起,您就拥有了一个动态且功能强大的应用程序。像 C 和 Lua 这样的编程语言就是这种编码风格的示例。

另一种考虑使用代码完成任务的方法是面向对象模型,Java 使用的就是这种模型。在面向对象编程中,方法是模板的组成部分。您不是将数据从一个方法发送到另一个方法,而是创建对象,可以选择通过使用它们的方法来更改它们。

这是从面向对象的角度来看的同一个简单的僵尸末日演示程序。在函数式方法中,我使用一个方法来生成数据,另一个方法来使用该数据执行操作。面向对象的等效方法是拥有一个表示工作单元的类。这个示例应用程序向用户展示每日消息,宣布这一天是僵尸派对还是僵尸末日。编程一个“day”对象,然后查询该天以了解其特征是有意义的。作为演示面向对象构造的不同方面的借口,新的示例应用程序还将计算有多少僵尸参加了派对(或末日)。

Java 对每个类使用一个文件,因此要创建的第一个文件是 Day.java,它充当 Day 对象

package com.opensource.example;

import java.util.Random;

// Class
public class Day {
    public static String weather;
    public int count;

// Constructor
  public Day() {
    long myTime = System.currentTimeMillis();

    if ( myTime%2 == 0 ) {
      weather = "paradise";
    } else {
      weather = "apocalypse";
    }
  }

// Methods
  public String report() {
      return weather;
  }

  public int counter() {
    Random rand = new Random();
    count = count + rand.nextInt(100);

    return(count);
    }
}

Class 部分,创建了两个字段:weathercount。Weather 是静态的。在一天(在这个虚构的情况下)中,天气不会改变。要么是派对,要么是末日,而且持续一整天。然而,僵尸的数量在一整天中都在增加。

Constructor 部分,确定了当天的天气。它是作为 constructor 完成的,因为它意味着只发生一次,即在类最初被调用时。

Methods 部分,report 方法仅返回构造函数确定和设置的天气报告。然而,counter 方法生成一个随机数并将其添加到当前的僵尸计数中。

换句话说,这个类做了三件非常不同的事情:

  • 表示应用程序定义的“天”。
  • 为当天设置不变的天气报告。
  • 为当天设置不断增加的僵尸计数。

为了使用所有这些,创建第二个文件

package com.opensource.example;

public class Example {
  public static void main(String[] args) {
    Day myDay = new Day();
    String foo = myDay.report();
    String bar = myDay.report();

    System.out.printf("Welcome to a zombie %s\n", foo);
    System.out.printf("Welcome to a zombie %s\n", bar);
    System.out.printf("There are %d zombies out today.\n", myDay.counter());
    System.out.printf("UPDATE: %d zombies. ", myDay.counter());
    System.out.printf("UPDATE: %d zombies. ", myDay.counter());
  }
}

因为现在有两个文件,所以最容易使用 Java IDE 运行代码,但如果您不想使用 IDE,您可以创建自己的 JAR 文件。运行代码以查看结果

Welcome to a zombie apocalypse
Welcome to a zombie apocalypse
There are 35 zombies out today.
UPDATE: 67 zombies. UPDATE: 149 zombies.

“天气”保持不变,无论 report 方法被调用多少次,但当您调用 counter 方法的次数越多,失控的僵尸数量就越多。

Java 方法

方法(或函数)是编程中重要的构造。在 Java 中,您可以将它们用作单个类的一部分进行函数式风格的编码,也可以跨类使用它们进行面向对象的代码。两种编码风格都是解决同一问题的不同视角,因此没有对错之分。通过反复试验,并在积累一些经验之后,您将了解哪种风格最适合特定问题。

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时进行。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.