我在工厂模式中尝试了一个例子。这给了我ArrayIndexOutOfBoundsException。有人能解释一下吗
java.lang.ArrayIndexOutOfBoundsException: 0 at com.factory.SalutationFactory.main(SalutationFactory.java:10)
这是我的课程。
package com.factory;
public class SalutationFactory {
public static void main(String[] args) {
try
{
SalutationFactory factory = new SalutationFactory();
factory.getPerson(args[0], args[1]);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public Person getPerson(String name, String gender){
if(gender.equals("M"))
return new Male(name);
else if(gender.equals("F"))
return new Female(name);
else
return null;
}
}
package com.factory;
public class Person {
private String name;
private String gender;
public String getName(){
return name;
}
public String getGender(){
return gender;
}
}
package com.factory;
public class Female extends Person {
public Female(String fullname){
System.out.println("Hello Ms " + fullname);
}
}
package com.factory;
public class Male extends Person {
public Male(String fullname){
System.out.println("Hello Mr " + fullname);
}
}
由于 开发
答案 0 :(得分:4)
因为这是使用数组的唯一一行:
factory.getPerson(args[0], args[1]);
我怀疑你没有提供2个命令行参数。你需要这样的东西:
$ java com.factory.SalutationFactory Smith M
答案 1 :(得分:2)
factory.getPerson(args[0], args[1]);
这里使用命令行参数,因此在运行此应用程序时,您必须传递命令行参数
使用
运行java SolutionFactory Santosh M
此处 Santosh 将分配到 args [0] , M 将分配给 args [1]
如果没有传递任何命令行参数,你运行这个程序,那么 args的长度将零并且在 main()里面你正在调用 args [0] ,这会导致 ArrayIndexOutOfBounds 异常
答案 2 :(得分:0)
我尝试了相同的示例,在尝试此处之后是解决方案。创建此代码。
String []pin =new String[4];
pin[0]="M";
pin[1]="F";
Factory factory = new Factory();
factory.getPerson(pin[0],pin[1]);
这将起作用
你的出局应该是“女性”。
答案 3 :(得分:0)
在使用它们之前,您必须检查null或对象。只需添加一行
即可if (args.length >= 2)
factory.getPerson(args[0], args[1]);
/* else
Add reminder to provide at least 2 arguments. */