如何使整个类的实例范围存在于整个类中

时间:2011-07-13 15:48:45

标签: java object scope instance main

是否可以通过整个主类存在主类实例的范围?我试图从我的对象类中运行方法,但方法是在主类中。 简化的主类看起来像这样

    public static void main (String[] args)
{
    MyMain x = new MyMain ();
}

    public void change()
{
    System.out.println("whatever");
}

    MyMain()
{
    System.out.println("--1--");
}

现在如果我想从对象调用方法public void change,我通常会使用x.change();或MyMain.x.change;在对象中,但x的范围显然没有到达对象。有没有办法让对象的范围更大,而只说MyMain x = new MyMain();一次?

3 个答案:

答案 0 :(得分:2)

使x成为静态变量:

private static MyMain x = new MyMain();

或使更改函数为静态,因此您不需要实例来调用它:

public static void change() { ...

答案 1 :(得分:0)

我会将主对象作为依赖项传递给其他对象。或者更好地隔离接口(类似于IChangeable)并传递它而不是实际对象。

作为一种解决方法,您可以将主对象设为Singleton

答案 2 :(得分:0)

您必须选择扩大范围。要么将MyMain的引用传递给应该从那里调用方法的每个对象,要么添加一个保存MyMain的静态变量。

第一种方法可以轻松完成,因为它可能会创建所有其他对象。因此,编写new Foo(this)而不是new Foo()会很容易。这称为控制反转。

另一种方法实际上会引入一个全局变量。这种模式称为单例模式。 看这里实现:(首先来自谷歌) http://radio-weblogs.com/0122027/stories/2003/10/20/implementingTheSingletonPatternInJava.html