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

时间:2011-05-13 23:16:56

标签: java methods

一个非常基本的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 !!!!
    }    
} 

5 个答案:

答案 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。仅在该方法之外声明它以使其对整个类可见。