从其他类访问main方法中创建的对象

时间:2011-12-23 14:45:07

标签: java access-modifiers

嘿我正在尝试从另一个类访问我在main方法中创建的对象,但是当我在另一个类中引用它时,它无法识别。经过一些研究后,我认为这与访问修饰符有关,但我尝试将该对象公开,仅用于显示“删除无效修饰符”的注释。有什么指针吗?

很抱歉这是如此基本,但我只是一个初学者而且我发现这些东西很难。

很抱歉没有提及!我是用Java写的。这就是我所拥有的:

public static void main(String[] args) {

    Mainframe mainframe = new Mainframe();
    mainframe.initialiseMF();       
    LoginPanel lp = new LoginPanel();
    mainframe.add(lp);
}

public class Mainframe extends JFrame {

public Mainframe () {
    // Set size of mainframe
    setBounds(0, 0, 500, 500);

}

public void initialiseMF (){
    // Get the size of the screen
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

    // Determine the new location of the mainframe
    int w = getSize().width;
    int h = getSize().height;
    int x = (dim.width-w)/2;
    int y = (dim.height-h)/2;

    // Move the mainframe
    setLocation(x, y);
    setVisible(true);
}

}

我正在尝试在另一个类中执行此语句:

Container content = mainframe.getContentPane();   

2 个答案:

答案 0 :(得分:0)

请记住,mainframe对象是main()方法的本地对象,它是静态的。你不能在课外访问它。

可能这会更清洁。

public class Mainframe extends JFrame{
     public Mainframe(){
          initialiseMF ();
     }

     public void initialiseMF (){
          //do ur inits here
     }

}

然后这样做,

public class TheOtherClass{

    private Mainframe mainFrame;

    public TheOtherClass(){
        mainFrame = MainFrame.mainFrame; //although I would not suggest this, it will avoid the Main.mainFrame call
    }

    public void otherMethodFromOtherClass(JFrame mainFrame){
        Container content = mainFrame.getConentPane();
    }
}

答案 1 :(得分:0)

我不完全确定你对“对象”的意思,但我只是猜测你的意思是变量。

为了使类中声明的变量可以从外部访问(以某种方式,即直接或通过某种方法),它必须是成员变量而不是局部变量。

e.g。 local(方法 - 本地)变量:

//local variables are the ones that are declared inside a method
//their life and visibility is limited only within the block in which they are define.
public static void main(String[] args) { // args is also a local variable
    String localVar = "Access modifiers are not allowed for local variables.";
    //the reason that the access modifiers are not allowed is because
    //the local variables are not members of the class        
}

让班级成员privateprotected,包私有或public才有意义。

e.g。成员变量:

class AClass {
    private String memberVar = "A member variable can have access modifier.";
    //the access modifier will determine the visibility of that variable.

    public String getMemberVar() {
        return this.memberVar;
    }
} 
  1. private:仅在班级内可见。您可以使用一些公共方法使其可访问。通常称为getter方法。

  2. package-private:仅在包内可见。您可以再次使用一些公共方法在包外部访问它。

  3. protected:仅在类及其子类中可见(即使子类在包外,也无关紧要)。

  4. 公众:随处可见。