我有这个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", "[email protected]");
contacts[1] = new Slumbook("2015-0006", "Fidel Castro", "Strong Man of Cuba", "Cuban",
"Cuba", "Lungon", "7863264", "Married", "Dead", "[email protected]");
}
}
当我尝试运行它时,它说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", "[email protected]");
contacts[1] = new Slumbook("2015-0006", "Fidel Castro", "Strong Man of Cuba", "Cuban", "Cuba", "Lungon", "7863264", "Married", "Dead", "[email protected]");
String con1 = contacts[0].viewToString();
System.out.println(con1);
}
但那不是我想要的
联系人不在方法autoAdd()的范围内。您应该将其作为参数传递,如下所示:
public static void autoAdd(Slumbook[] contacts){//body};
并称之为
autoAdd(contacts);
当我尝试运行它时,它说错误:“找不到符号”符号是变量
contacts
那就对了。您已将contacts
声明为main
的局部变量,这意味着它只能从main
方法的主体内访问。
您的替代方案是:
contacts
引用传递给autoAdd
方法作为参数。contacts
变量声明为static
类的(私有)SlumbookDriver
变量。这可能是最简单的,但这意味着您的应用中只有一个“联系人列表”。contacts
变量声明为SlumbookDriver
类的(私有)实例变量。然后你需要创建一个SlumbookDriver
实例,使autoAdd
成为非静态方法,依此类推。这将为您提供最面向对象的解决方案。哪个最好?
Slumbook[] contacts = new Slumbook[19];
在main方法中定义。所以它是一个方法局部变量。这意味着您无法在main方法之外访问它。
你能做的是
autoAdd
方法接受Slumbook[]
并在通话时将你的联系人传递给你。static
变量(类变量)