繁体   English   中英

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

[英]Java calling object in method outside of main

我有一个简单的问题,我已经坚持了一段时间,我找不到答案。 基本上,我正在创建一个对象并尝试访问变量而不使用静态变量,因为我被告知这是错误的方法。 以下是该问题的一些示例代码。 我在第一个类中收到一个无法解析为变量的错误。 我希望能够做的是在main之外的其他方法中访问t.name ,以及在其他类中也是如此。 为了解决这个问题,我将使用Test2.name并在Test2类中使变量为static,如果我错了,请纠正我,但我认为这是错误的方法。 任何帮助将不胜感激=)

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;
  } 
}

我看到其他人已经发布了代码片段,但是他们实际上没有发布为什么这样做有用(在撰写本文时)。

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

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范围内。

您可以将测试对象的引用作为方法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方法中,您只能访问静态方法而无需引用。

将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);
  }
}

为您的目的使用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初始化它们。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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