主要方法之外的方法中的Java调用对象

时间:2012-06-23 08:42:48

标签: java variables object syntax

我有一个简单的问题,我已经坚持了一段时间,我找不到答案。基本上,我正在创建一个对象并尝试访问变量而不使用静态变量,因为我被告知这是错误的方法。以下是该问题的一些示例代码。我在第一个类中收到一个无法解析为变量的错误。我希望能够做的是在main之外的其他方法中访问t.name,也可以在其他类中访问Test2.name。为了解决这个问题,我会使用Test2并在public class Test { public static void main(String[] args) { Test2 t = new Test2("Joe"); } public void displayName() { System.out.println("Name2: " + t.name); } } public class Test2 { String name; public Test2 (String nm) { name = nm; } } 类中使变量变为静态,如果我错了,请纠正我,但我认为这是错误的方法。任何帮助将不胜感激=)

{{1}}

5 个答案:

答案 0 :(得分:6)

我看到其他人发布了代码片段,但他们实际上没有发布任何有效的原因(在撰写本文时)。

您收到编译错误的原因是您的方法

public static void main(String[] args) {

    Test2 t = new Test2("Joe");         
}

变量t的范围就是那种方法。您将Test2 t定义为仅在main(String[] args)方法中,因此您只能在该方法中使用变量t。但是,如果您要将变量设置为字段,则创建Test类的新实例

public class Test {
Test2 t;
public static void main(String[] args) {
    Test test = new Test();
    test.t = new Test2("Joe");  
   test.displayName();
}

public void displayName() {
    System.out.println("Name2: " + t.name);
}
}

然后您不应再收到任何编译错误,因为您声明变量t在类Test范围内。

答案 1 :(得分:2)

您可以将测试对象的引用作为方法displayName的参数:

public class Test {

    public static void main(String[] args) {    
        Test2 t = new Test2("Joe");         
        displayName(t);
    }

    public static void displayName(Test2 test) {
        System.out.println("Name2: " + test.name);
    }
}

注意:我还使displayName成为静态方法。在main方法中,您只能在不参考的情况下访问静态方法。

答案 2 :(得分:1)

将Test类修改为此

public class Test {
  private static Test2 t;

  public static void main(String[] args) {
    t = new Test2("Joe");         
  }

  public void displayName() {
    System.out.println("Name2: " + t.name);
  }
}

答案 3 :(得分:0)

为您的目的使用getter。这是您的问题的一个侧面解决方案,但通常这是您应该如何使用getter来检索实例变量。

public class Test {


public static void main(String[] args) {

    Test2 t = new Test2("Joe");         
    displayName(t);
}

public static void displayName(Test2 test) {
    System.out.println(test.getName());
}
}



public class Test2 
{
private String name;

public Test2 (String nm)
{
    name = nm;
}   

public String getName()
{
     return name;
}
}

永远记住,班级中的变量应为private。这可以保护它免受来自课外的访问。因此,getter是访问它们的唯一方法。并setterconstructor来初始化它们。

答案 4 :(得分:0)

我认为越少静电越好 我将实例化Test并在其实例上调用displayName,然后将Test2的实例传递给displayName。 但它确实取决于总体目标是什么