我正在做一个家庭作业,我需要在一个类“coinDispenser”中创建方法,并在主类“HW1”中调用它们
但是,我不确定这是如何工作的。这是我在coinDispenser.java中的代码示例:private int numNickles = 0;
然后在HW1.java中调用该方法:
System.out.println("There are "+numNickles+" nickles in the machine.")
但我总是得到错误“numNickles无法解析为变量”,它要我在HW1类中创建整数。
如何在HW1.java中调用整数?将整数更改为public int类型没有任何区别。
答案 0 :(得分:1)
好吧,你肯定无法从一个类访问另一个类的私有成员变量。要访问不同类中的公共成员,您需要创建静态变量并按类引用它,或者创建CoinDispenser实例然后引用该变量。
所以,在CoinDispenser中,它是:
public int numNickles = 0;
在HW1中,你有:
CoinDispenser cd = new CoinDispenser();
System.out.println("There are "+ cd.numNickles + " nickles in the machine.")
如果你做了静态变量,你也可以这样做:
CoinDispenser.numNickles
答案 1 :(得分:1)
要在另一个类中调用方法,您有两个选择。
选项1:
您可以将方法声明为static
,这意味着不需要在对象上调用它。
注意:如果您采用这种方式,(您不应该这样做;使用静态方法通常不好),您必须将numNickles
声明为static
,意味着无论您创建多少CoinDispenser
个对象,该字段只有一个实例。
示例:
static void methodToCallName(any arguments it takes) {
//...do some stuff...//
}
选项2:您可以使用包含该方法的new
关键字创建该类的实例,并调用该方法:
示例:的
// in some method in the HW1 class (Which is a horrible class name, see java conventions)
CoinDispenser dispenser = new CoinDispenser(any parameters here);
coinDispenser.whateverYourMethodIsCalled(any arguments it takes);
面向对象语言中的类的整体思想是将单独的事物分开。当您引用另一个类中定义的变量时,您必须告诉程序它在哪里。
我觉得你还没有真正了解面向对象意味着什么,你真的应该更多地了解它。你不能假装它;没有绕物体方向。你必须学会爱它。当然,它可以使简单的事情变得困难,但它会让事情变得简单。
关于你问题的第二部分......
请注意,numNickles
实际上应该是私密的,与其他用户所说的相反。
Java最佳实践提倡封装,这基本上是一个原则,即程序的其他部分应该只能看到它们需要的内容,并且每个类的内部工作不应该暴露给其他类。
你是如何实现这一目标的?简单;使用访问器和mutator方法(getter和setter)来访问和修改你的字段。
// Define your field like usual...
private int numNickles = 0;
// ...and add these two methods...
public void setNumNickles(int value) {
numNickles = value;
}
public int getNumNickles() {
return numNickles;
}
对于变量来说,这看起来似乎很多,但是许多IDE会为您自动完成这个过程,从长远来看,它可以帮助您避免许多令人沮丧的错误。习惯它,因为Java世界的其余部分都是这样做的。
答案 2 :(得分:0)
如果numNickes在另一个类中,则无法调用它,因为它的作用域是私有的。
如果要访问私有范围变量,则必须编写一个方法来返回它。惯例通常是
public int getNumNickles(){
return numNickles;
}
这是设计使用并允许保护您不想公开的变量。
那么你的输出就是 System.out.println(机器中有“+ myclass.getNumNickles()+”镍币。)
或者你可以将变量设为公共
public int numNickels;
但现在可以使用该类读取并写入任何人。
答案 3 :(得分:0)
您正在尝试从CoinDispenser类访问名为numNickles
的字段(BTW CoinDispenser是您的java类的正确名称)。您无法直接访问HW1类中的字段和方法。因此,正如MadProgrammer在您的问题的评论中指出的那样,请按照原样进行操作。
在你的HW1.java类中有类似的东西:
CoinDispenser cd = new CoinDispenser();
System.out.println("There are "+cd.getNumNickles()+" nickles in the machine.");
上面一行代码中的“cd”是CoinDispenser类的句柄。使用cd,您可以从使用上述行的任何类中访问(通过点击)字段和方法。此外,如果这些字段和方法是“私有的”,您仍然无法访问CoinDispenser类中的字段和方法。
答案 4 :(得分:0)
访问另一个类中private
字段的标准方法是使用getter
方法。
这就像
private int numNickles = 0;
public int getNumNickles () {
return numNickles;
}
同样有用的是setter
方法
public void setNumNickles (int numNickles) {
this.numNickles = numNickles;
}
许多IDE(例如Eclipse)会在您点击按钮后自动为您创建这些方法。
然后可以在CoinDispenser类的实例上调用这些方法。
CoinDispenser coinDispenser = new CoinDispenser ();
coinDispenser.setNumNickles (23);
System.out.println("There are "+ coinDispenser.getNumNickles() + " nickles in the machine.");
答案 5 :(得分:0)
Java是一种Object-Oriented Programming语言。这实际上意味着一切都基于对象的概念。这些对象是以 fields 和 methods 的形式提供数据的数据结构。您提供实现的每个类都需要一个实例的形式来实际执行某些操作。
以下示例显示,当您要创建班级的实例时,您需要使用 new
CoinDispenser(100)
拨打电话。在这种情况下,类CoinDispenser
的构造函数需要一个参数,即硬币数量。现在,要访问新制作的CoinDispenser的任何字段或方法,您需要使用variable.method()
调用该方法,因此在这种情况下coinDispenser.getCoins()
将检索我们图书的标题。
public class CoinDispenser {
private int coins = 100; // Set the amount of coins
public int getCoins() {
return coins;
}
}
public class HW1 {
public static void main(String[] args) {
CoinDispenser coinDispenser = new CoinDispenser(100);
System.out.println("I have " + coinDispenser.getCoins() + " left.");
}
}
注意:我们使用额外的方法getCoins()
(一个getter)来检索字段coins
的内容。详细了解访问级别here。
答案 6 :(得分:0)
首先,没有变量名numNickels会导致错误发生。 其次,要访问类coinDispenser的属性,您需要创建该类的对象,即
coinDispenser a=new coinDispenser();
通过这样做,您可以访问类coinDispenser的公共方法。考虑到属性numNickles是私有的,您有两个选项,即:
1.将numNickles更改为public,然后使用
a.numNickles
2。创建一个公共方法以在类coinDispenser
中获取私有属性public int getNumNickles() {return numNickles;}
并使用
从HW1访问它a.getNumNickles()