一个非常基本的java问题!我想要了解物体如何相互作用。我知道对象是实例化的,并且可以使用.operator访问它们的方法。我假设当我实例化一个对象时,它位于Heap上,该包中的任何类都可以使用(Objectname.methodName)方法访问任何对象方法。
我的问题:当我在main()中实例化对象并直接尝试一个方法时,没有问题,但是,当我在main中实例化对象,但尝试从另一个方法访问该方法时,在main()之外 - 我有问题。在方法setupHello中,它给出了一个错误,因为没有识别对象hw。
(我第一次使用Eclipse,所以它可能是一个包问题,但我不这么认为。)
谢谢。
public class SayHelloToWorld {
public static void main (String [] args){
SayHelloToWorld sayHello1 = new SayHelloToWorld();
HelloWorld hw = new HelloWorld();
hw.sayHello(); // no problem here
sayHello1.setupHello();
}//end main
public void setupHello(){
hw.sayHello(); // problem here !!!!
}
}
答案 0 :(得分:2)
hw对象在调用时甚至不在范围内。 setupHello方法无法看到hw对象。
一种选择是在main之外声明对象并使其成为静态。
static HelloWorld hw; // Declare object here
public static void main (String [] args){
SayHelloToWorld sayHello1 = new SayHelloToWorld();
hw = new HelloWorld();
hw.sayHello(); // no problem here
sayHello1.setupHello();
}//end main
public void setupHello(){
hw.sayHello(); // problem here !!!!
}
或编辑setupHello以接受HelloWorld对象作为参数...
public static void main (String [] args){
SayHelloToWorld sayHello1 = new SayHelloToWorld();
HelloWorld hw = new HelloWorld();
hw.sayHello(); // no problem here
sayHello1.setupHello(hw);
}//end main
public void setupHello(HelloWorld hw){
hw.sayHello(); // problem here !!!!
}
问题解决了!
答案 1 :(得分:1)
对象确实位于堆上但只有main
知道在哪里
让setupHello
知道public void setupHello(){
改为public void setupHello(HelloWorld hw){
到sayHello1.setupHello();
以及从sayHello1.setupHello(hw);
改为{{1}}。
答案 2 :(得分:1)
对象hw
不存在于setupHello()方法的“范围”内,并且未传递给它。
将其添加为方法参数:
public void setupHello(HelloWorld hw)
并将其传递给方法:
sayHello1.setupHello(hw);
唯一的选择是制作hw
和实例变量,或“字段”,然后您可以直接访问它。 (或者说它是静态的,但这绝对不是理想的,尽管它在技术上可以用于示例)。
答案 3 :(得分:0)
这与变量hw的范围有关。它是main方法的本地方法,因此无法从其他地方访问。
您可以做的是在主方法之外声明hw变量或将其作为参数传递给下一个方法。
答案 4 :(得分:0)
您在hw
范围内实例化了main
。仅在该方法之外声明它以使其对整个类可见。