我有这个Java代码
public class SlumbookDriver{
public static void main(String args[]){
Slumbook[] contacts = new Slumbook[19];
autoAdd();
String con1 = contacts[0].viewToString();
System.out.println(con1);
}
使用方法autoAdd就像这样
public static void autoAdd(){
contacts[0] = new Slumbook("2014-0002", "Karl Marx", "Karly", "German", "Cologne",
"House", "2358681", "Single", "N/A", "Karl_Marx@yahoo.com");
contacts[1] = new Slumbook("2015-0006", "Fidel Castro", "Strong Man of Cuba", "Cuban",
"Cuba", "Lungon", "7863264", "Married", "Dead", "FidelCatro@msn.com");
}
}
当我尝试运行它时,它表示error: Cannot find Symbol
符号为variable contacts
,如果我在主内部分配数组,则代码正常工作,如下所示:
public class SlumbookDriver{
public static void main(String args[]){
Slumbook[] contacts = new Slumbook[19];
contacts[0] = new Slumbook("2014-0002", "Karl Marx", "Karly", "German", "Cologne",
"House", "2358681", "Single", "N/A", "Karl_Marx@yahoo.com");
contacts[1] = new Slumbook("2015-0006", "Fidel Castro", "Strong Man of Cuba", "Cuban", "Cuba", "Lungon", "7863264", "Married", "Dead", "FidelCatro@msn.com");
String con1 = contacts[0].viewToString();
System.out.println(con1);
}
但那不是我想要的
答案 0 :(得分:4)
联系人不在方法autoAdd()的范围内。您应该将其作为参数传递:
public static void autoAdd(Slumbook[] contacts){//body};
并称之为
autoAdd(contacts);
答案 1 :(得分:1)
当我尝试运行它时,它说错误:"找不到符号"符号是变量
contacts
那是对的。您已将contacts
声明为main
的局部变量,这意味着它只能在main
方法的正文中进行访问。
您的替代方案是:
将contacts
引用传递给autoAdd
方法作为参数。
将contacts
变量声明为static
类的(私有)SlumbookDriver
变量。这可能是最简单的,但这意味着只有一个"联系人列表"在你的应用程序中。
将contacts
变量声明为SlumbookDriver
类的(私有)实例变量。然后,您需要创建SlumbookDriver
实例,使autoAdd
成为非静态方法,依此类推。这将为您提供最面向对象的解决方案。
哪个最好?
对于小型应用程序(比如一百行左右的代码),它几乎没有什么实际意义。文体考虑是另一回事......但我会留给你的老师解释。
对于更大的应用程序,由于各种原因,第三种选择是最好的。例如,使用静态的代码在较大的应用程序中更难重用(例如嵌入),并且更难以测试。此外,它使继承和多态性,以及其他Java语言功能更难以有效使用。
答案 2 :(得分:0)
Slumbook[] contacts = new Slumbook[19];
是在main方法中定义的。所以它是方法本地变量。这意味着您无法在主方法之外访问它。
你可以做的是
autoAdd
方法更改为接受Slumbook[]
,并在致电时将您的联系人传递给该联系人。 static
变量(类变量)autoAdd
方法和联系人varaibles实例