[英]why can'y I access a method from within another method
一个非常基本的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 !!!!
}
}
调用时,hw对象甚至不在范围内。 setupHello方法无法查看硬件对象。
一种选择是在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 !!!!
}
问题解决了!
该对象确实位于堆上,但只有main
知道位置。
要使setupHello
知道它在哪里,请将public void setupHello(){
更改为public void setupHello(HelloWorld hw){
并从sayHello1.setupHello();
对其进行调用sayHello1.setupHello();
sayHello1.setupHello(hw);
。
对象hw
在setupHello()方法的“作用域”中不存在,也没有传递给它。
将其添加为方法参数:
public void setupHello(HelloWorld hw)
并将其传递给方法:
sayHello1.setupHello(hw);
唯一的选择是使hw
和instance变量或“ field”,然后可以直接访问它。 (或将其设为静态,但这绝对不是我们想要的,即使在示例中从技术上讲也是可以的)。
这与变量hw的范围有关。 它是main方法的本地方法,因此无法从其他位置访问。
您可以做的是在主方法之外声明hw变量,或将其作为参数传递给下一个方法。
您实例化了main
范围内的hw
。 在该方法之外声明它以使其在整个类中可见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.