类方法与主要方法

时间:2011-07-21 20:55:15

标签: java methods

我试图搜索我认为我在寻找的东西,但最后,我没有看到任何适用于我所询问的内容。所以,对不起,如果这是一个常见问题。我根本不知道我在找什么:)

我目前正处于我的第一个java编程课程中。我开始意识到我对使用方法创建类的概念感到困惑,并且使用了一个带有方法的主方法。

这里的区别究竟是什么?它如何比其他方式更好?什么情况需要主要而不是类的方法?

如果有人能揭开神秘面纱,我真的很感激。这将有助于我理解我的最终项目 - 一个基本的Craps游戏,它将包含一个Shooter类,Die类和一个Craps类(显然包含main)。

6 个答案:

答案 0 :(得分:4)

基本上这是分离的问题。您可以创建可重用性的类。如果所有内容都在主类中,那么您的代码将无法维护。主类用作应用程序的起点。如果您在主类中执行了所有操作,则无法利用所有面向对象编程为您提供的功能。进入课程后,您将了解更多相关信息。但基本上你将创建的每个类都将承担单一责任。即使是主要班级,其职责是运行该计划。

顺便说一句,祝你班上好运。也许它会给你在赌场的优势。

答案 1 :(得分:4)

您没有“主要”方法。所有方法都是类方法,唯一的区别是'静态'方法(v.g.,main)不需要实例化一个新对象(通过'new'语句)来使用它们。

换句话说:

public class MyClass {
  public static void myStaticMethod() {
  }

  public void myInstanceMethod() {
  }
}

你可以做到

MyClass.myStaticMethod()

但是为了使用myInstanceMethod,您必须创建一个对象

(new MyClass).myInstanceMethod;

通常你做的最后一件事是

MyClass myObject = new MyClass();
myObject.myInstanceMethod();

请注意,您也可以

myObject.myStaticMethod();

但它与做

完全相同
myClass.myStaticMethod();

并且第一种方式被认为是糟糕的风格并且通常会导致编译器警告。


@Miranda因为只有静态方法会丢失所有面向对象的部分,而你只需要使用Java就像使用普通的C一样。

在对象中,您既有状态又有方法。在类中,您存储对象状态和方法。例如,通常你可以创建一个“Card”类,创建一张卡片“new Card('K',”Leaf“)”并有方法来操作它(“uncoverCard()”)。

一旦你有了你想要的对象的引用,你就可以使用它的方法,并且你知道你只影响这个对象,并且你正在使用正确的方法版本(因为你正在使用为这个课程。)

从程序编程切换到OO编程在开始时似乎很难。继续尝试,查看教程代码并在需要时征求意见,您很快就会理解它。

答案 2 :(得分:3)

Java-Application的入口点是它的主要方法:

public static void main(String[] args){
  // Do stuff here
}

这种方法与其他方法的不同之处在于:

  1. 您的申请的入口点,因此它将是第一个 应该在这里完成调用方法和基本初始化。
  2. 这是一个static - 方法,可以在不创建的情况下访问它 持有它的类的实例。
  3. 这个static - 事情最好说明如下:

    public class Test{
    
        public int addOne(int number){
            return number++;
        }
    
        public static int drawOne(int number){
            return number--;
        }
    
    }
    
    // Create our Int:
    int value = 12;
    
    // This will work because the method
    // is a static one:
    System.out.println( Test.drawOne(value) ); // Outputs 11
    
    // This won't work because it's a non-
    // static method:
    System.out.println( Test.addOne(value) ); // Error
    
    // But this will work:
    Test ourTest = new Test();
    System.out.println( ourTest.addOne(value) ); // Outputs 13
    

    用Java编写的应用程序通常只有一个main-Method,它声明应用程序首次启动的位置。

    如果你想做变量,对象等的东西,你会想要创建自己的方法/类,但它们不是主要方法。

答案 3 :(得分:2)

首先,方法里面不能有其他方法。每个方法都必须是Class的一部分。 main方法(实际上是您正在讨论的主要方法)与任何其他方法之间的区别在于程序的执行从main方法开始。

方法表示已组合在一起的功能或一组指令。类是一组定义实体的方法和变量(如Shooter,Die)。

所以你将拥有一个Die类,它将包含仅包含特定方法的方法,一个Shooter类,其中包含特定于Shooter的方法和一个Craps类,游戏将从该类开始,利用Die的方法和Shooter课程来完成游戏。

答案 4 :(得分:1)

我相信这里的其他一些人能够比我更好地解释这一点,但我会试一试。

因此,正如您所知,您的主要方法是您的程序的入口点。这是第一件被执行的事情。你可以在同一个类中添加其他方法,但这些方法都是静态方法,因为你无法实例化一个包含main的类(至少我认为你不能;我从未尝试过)。 / p>

创建类和定义方法的目的是使您可以从该类创建对象。例如,在您的情况下,您创建一个Die类。然后,您可以从该类创建Die对象。将类视为一种模型或模具,您可以创建对象。创建这些对象后,每个对象都有自己的数据成员(在类中定义的变量)。让我们在你的Die类中定义两个变量,die1和die2,你创建的每个Die对象都有一个die1和die2变量,但每个Die对象可以为这些变量保存不同的值。

现在,假设您在die类中创建一个修改这些变量的方法(一个setter方法)并让它调用它public void setDie1(int value)然后你可以通过在Die上调用该方法来修改die1变量的值像myDieObject.setDie1(3)这样的对象。

总而言之,如果您只是将方法放在与main方法相同的类中,那么您将无法从同一个类创建多个对象。

这可能是一个棘手的概念,一开始就要弄清楚,但随着你了解更多,它会迅速清理。我希望这有帮助!

答案 5 :(得分:0)

主要方法

这是运行 Java 应用程序所需的唯一方法。该方法必须具有非常具体的签名 public static void main(String[] args)。它需要此特定签名的原因是 Java 虚拟机 (JVM) 需要找到它才能执行您的程序。 JVM 是您安装在计算机上以运行程序的 Java 运行时“东西”。更准确地说,Java 运行时环境 (JRE) 包含 JVM。 String[] args 是该方法在执行程序时从命令提示符接受的 0 个或多个参数。简单的程序通常不需要从命令提示符传递任何参数。

可能让像您这样的初级 Java 程序员感到困惑的是,似乎许多项目在每个 .java 文件中都有主要方法。这不是必需的。这样做是为了让每个类都可以与其依赖项隔离地运行。在一个项目(应用程序)中,只需要一个类就有一个 main 方法。我希望澄清 ma​​in 方法。

其他方法

ma​​in 方法以外的方法是可选的。如果需要,您可以将 100% 的程序逻辑放在 main 中。但是,你可以理解这个问题。如果这样做,您的代码将只能执行非常特定的步骤序列。回到模块化编程之前的日子,这就是完成的方式。所以,如果你需要编写一个稍微不同的程序,你需要编写一个新程序。它不是很有效,但它仍然有效。在“模块化编程”成为一种东西之后的几年里快进,现在您必须编写必须对事件做出反应的程序。例如,用户将鼠标悬停在按钮上。事件的问题在于事件是不可预测的。您不仅不知道事件何时会发生,而且您也无法预测它们将发生的顺序。因此,将所有逻辑包含在单个函数(即 main)中是行不通的,并且在 main 中编译“不同”的步骤序列也可能行不通,因为您无法预测 WHEN 和 HOW。

方法允许您按照规定的顺序封装非常小的执行单元。假设是,无论何时情况需要,都必须执行相同的步骤序列。因此,您将代码模块化并提取那些您知道将始终按该顺序执行的小序列并将其放入某种“方法”中,以便您可以在需要时调用该步骤序列。

示例

没有命令行参数的简单程序

public class MyProgram {
    public static void main(String[] args) {
       System.out.println("Hello World!");
    }
}

当您从命令提示符执行编译后的单元时,您将输入 java MyProgram,然后在控制台中您将看到“Hello World!”

public class MyProgram {
    public static void main(String[] args) {
       System.out.println("Hello " + args[0]);
    }
}

但是,在上面的程序中,如果不提供参数,执行时会抛出异常。但是,如果您至少传递一个参数,它将显示第一个参数并忽略其余参数。例如,java MyProgram Hector Fontanez 将显示“Hello Hector”

在这两个示例中,JVM 都调用了 main 方法来执行。

public class MyProgram {
    public static void main(String[] args) {
       showGreeting("Hello " + args[0]);
    }
    public static void showGreeting(String greeting) {
        System.out.println(greeting);
    }
}

在最后一个示例中,我创建了一个名为 showGreeting 的函数。与 main 方法相反,我作为程序员决定何时何地调用此函数,而不是 JVM。在函数中,我提取了我认为该方法需要执行以“显示问候”的功能。我知道我的例子只有一行。但是你明白了。随着我的程序的增长,我可以多次从程序的其他部分调用 showGreeting,我认为,作为一名程序员,我的应用程序完成所需的工作是必要的。不仅如此,从 main 方法中,传递的参数不一定与可以从程序的其他部分传递的参数相同。

最后,您需要了解什么是静态和非静态方法,还要了解 publicprotectedprivate 和默认(无关键字)访问修饰符的作用。我有一个博客,其中解释了所有这些。我不会把链接放在我的博客上,因为我不想让人们认为我在“自我推销”——这实际上是我今天评论的另一篇文章(虽然不是关于我的)。