【问题标题】:Why Are the Instance Variables Declared in the Main Method?为什么在 main 方法中声明实例变量?
【发布时间】:2020-05-21 22:16:30
【问题描述】:

我正在 Codecademy 上学习 Java,最近完成了一个计算汽车贷款每月还款额的项目。问题是我不明白解决方案,Codecademy 论坛上没有人回答我的问题。

为什么实例变量是在主方法范围内创建的,而不是在类被声明之后?在这个项目之前我们没有看到任何这样的例子,我不明白。

代码如下:

//Calculates monthly car payment
public class CarLoan {
//Why aren't the variables created here rather than in the main method?
  public static void main(String[] args) {

    int carLoan = 10000;
    int loanLength = 3;
    int interestRate = 5;
    int downPayment = 2000;

    if (loanLength <=0 || interestRate <=0) {
      System.out.println("Error! You must take out a valid car loan.");
  } else if (downPayment >= carLoan) {
      System.out.println("The car can be paid in full.");
  } else {
      int remainingBalance = carLoan - downPayment;
      int months = loanLength * 12;
      int monthlyBalance = remainingBalance / months;
      int interest = (monthlyBalance * interestRate) / 100;
      int monthlyPayment = monthlyBalance + interest;
      System.out.println(monthlyPayment);
    }
  }
}

【问题讨论】:

  • 如果变量不需要存在于更广泛的范围内(即方法完成后不需要保留它们的值),则不需要在方法。
  • 没有什么能阻止您在那里创建变量。话虽如此,在将要使用它们的地方声明变量通常是一个好习惯。如果只在方法中使用,则在方法中声明。
  • 更明确地说:这些不是实例变量(又名字段),它们是局部变量,并且我很难相信您的 Java 培训指南还没有教过您有关局部变量的知识,如果它正在教您有关实例变量的知识。参见例如The Java™ Tutorials - Variables.
  • @Andreas 关于变量的课程只讨论了数据类型。下一课,面向对象的 java,在方法中提到了 java 变量,但它没有称它们为局部变量,也没有说任何关于它们的东西,只是它们不能在方法范围之外使用。这是课程的总结表:codecademy.com/learn/learn-java/modules/…

标签: java methods instance-variables main-method


【解决方案1】:

在方法中定义的变量是局部变量,它们属于方法的调用,而不是对象的实例。

其目的似乎是提供一个示例,让尚未了解构造函数、实例变量和方法的初学者可以理解。他们想教授局部变量声明、一些简单的计算和 if 语句,以及在进入其他内容之前打印到控制台。

作为练习,您可以更改 CarLoan 类以为其提供实例变量,只是为了了解另一种方法。保持变量值硬编码,创建一个计算每月付款的实例方法,并让 main 方法将结果打印到控制台。

【讨论】:

  • 感谢您的帮助。我只完成了这门课程的 39%,但它实际上已经介绍了构造函数、实例变量和方法。它还没有讨论局部变量,至少是那个名字。
  • @smlisk0630:是的,他们之所以不称它们为局部变量,可能是因为他们想限制他们对您施加的术语的数量。看起来这里的代码是为了让那些只学习过codecademy.com/learn/learn-java/modules/learn-java-variables而不是下一课的人理解的。
猜你喜欢
  • 1970-01-01
  • 2013-06-15
  • 2014-06-20
  • 2016-11-22
  • 2011-03-23
  • 2021-02-02
  • 2015-06-28
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多