我有一个简单的问题,我已经坚持了一段时间,我找不到答案。基本上,我正在创建一个对象并尝试访问变量而不使用静态变量,因为我被告知这是错误的方法。以下是该问题的一些示例代码。我在第一个类中收到一个无法解析为变量的错误。我希望能够做的是在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}}
答案 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
是访问它们的唯一方法。并setter
或constructor
来初始化它们。
答案 4 :(得分:0)
我认为越少静电越好 我将实例化Test并在其实例上调用displayName,然后将Test2的实例传递给displayName。 但它确实取决于总体目标是什么