注册会员
发表于 2023-7-18 15:21:37
本帖最后由 猛龙 于 2023-7-18 15:24 编辑
方法存在于类中,因此标准 Java 样板代码适用: package com.opensource.example;public class Example { // 在此写代码}在这样一个简单的单文件应用程序中,包定义并不是绝对必要的,但它是一个很好的习惯,而且大多数 IDE 都强制执行它。 默认情况下,Java 会寻找在类中运行的 main 方法。方法可以是公有的或私有的,也可以是静态的或非静态的,但 main 方法必须是公有的、静态的,Java 编译器才能识别和使用它。当方法是公有的时,它可以从类外部执行。要在程序启动时调用 Example 类,其 main 方法必须是可访问的,因此将其设置为 public。 下面是两个方法的简单演示:一个 main 方法在调用 Example 类时默认执行,另一个 report 方法接受 main 的输入并执行简单操作。 为了模拟任意数据输入,我使用了 if-then 语句,该语句根据你启动应用程序的时间在两个字符串之间进行选择。换句话说,main 方法首先设置一些数据(在现实生活中,这些数据可以来自用户输入,也可以来自应用程序其他地方的其他方法),然后 “调用” report方法,将处理后的数据作为输入提供: package com.opensource.example;public class Example { public static void main(String[] args) { // 生成一些数据 long myTime = System.currentTimeMillis(); String weather; if ( myTime%2 == 0 ) { weather = "party"; } else { weather = "apocalypse"; } // 调用其他方法 report(weather); } private static void report(String day) { System.out.printf("Welcome to the zombie %s\n", day); }}运行代码: $ java ./Example.javaWelcome to the zombie apocalypse$ java ./Example.javaWelcome to the zombie party请注意,同一 report 方法有两个不同的结果。当然,在这个简单的演示中,不需要第二种方法。模拟数据生成的 if-then 语句可能生成了相同的结果。但是,当一个方法执行一项复杂的任务时,比如将图像调整为缩略图,然后使用调整后的图像在屏幕上生成小部件,那么附加组件的“费用”就很有意义了。 何时使用 Java 方法很难知道何时使用方法,何时只将数据发送到 Java 流 或循环中。如果你面临这个决定,答案通常是使用一种方法。原因如下:
函数式编程利用方法作为执行任务的主要构造。创建一个方法,该方法接受一种数据,处理该数据,并输出新数据。将许多方法串在一起,你就拥有了一个动态且功能强大的应用程序。像 C 和 Lua 这样的编程语言就是这种编码风格的例子。 用代码完成任务的另一种方式是 Java 使用的面向对象模型。在面向对象编程中,方法是模板的组成部分。你可以创建对象,而不是将数据从一个方法发送到另一个方法,并可以通过使用它们的方法来更改它们。 从面向对象的角度来看,这是一个简单的 “僵尸末日” 演示程序。在函数方法中,我使用一种方法生成数据,另一种方法使用该数据执行操作。面向对象的等价物是具有表示工作单元的类。这个示例应用程序向用户显示一条当天的消息,宣布这一天会有僵尸派对或是僵尸末日。编写一个“天”对象,然后查询该对象以了解其特性是有意义的。作为演示面向对象构造的不同方面的借口,新的示例应用程序还将统计有多少僵尸出现在派对上(或末日)。 Java 为每个类使用一个文件,因此要创建的第一个文件是 Day.Java,它用作 Day 对象: package com.opensource.example;import java.util.Random;// 类public class Day { public static String weather; public int count;// 构造方法 public Day() { long myTime = System.currentTimeMillis(); if ( myTime%2 == 0 ) { weather = "paradise"; } else { weather = "apocalypse"; } }// 方法 public String report() { return weather; } public int counter() { Random rand = new Random(); count = count + rand.nextInt(100); return(count); }}在“类”部分中,创建了两个域:天象 weather 和计数 count。weather 是静态的。在一天的过程中(在这种假想的情况下),weather 不会改变。要么是派对 paradise,要么是末日 apocalypse,持续了一整天。然而,僵尸的数量在一天中会增加。 在“构造方法”部分,确定当天的天象。它是作为一个 构造方法 完成的,因为它只在类最初被调用时发生一次。 在“方法”部分,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 apocalypseWelcome to a zombie apocalypseThere are 35 zombies out today.UPDATE: 67 zombies. UPDATE: 149 zombies.无论调用 report 方法多少次,weather 都保持不变,但调用 counter 方法的次数越多,僵尸的数量就会增加。 Java 方法方法(或函数)是编程中的重要组成。在 Java 中,你可以将它们作为函数式编程的单个类的一部分使用,也可以在面向对象编程的类之间使用它们。两种类型的编程对于解决同一个问题有不同的视角,因此没有对与错之分。通过反复尝试,积累一点经验,你会知道哪一个最适合某个特定的问题。 |