繁体   English   中英

为什么我不能从另一个方法中访问一个方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM