日期:2014-05-17  浏览次数:20768 次

java 初始化问题
public class Session 
{
String tableName = "_Student";
HashMap<String, String> cfs = new HashMap<String, String>();

String[] reflectNames = new String[cfs.size()]; ???
public Session()
{
cfs.put("_id", "id");
cfs.put("_name", "name");
cfs.put("_age", "age");
}

public void save(Student s) throws Exception
{
String sql = createSQL();

Connection ct = null;
String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=hibernate";

Class.forName(driver);
// ct = DriverManager.getConnection(url,"","");
// PreparedStatement ps = ct.prepareStatement(sql);



// ps.close();
// ct.close();
}

private String createSQL() 
{
/**
* 取出所有的key值 */
String columnNames = "";
int index = 0;
for(String key:cfs.keySet())
{
String v = cfs.get(key);
v = Character.toUpperCase(v.charAt(0))+v.substring(1); //把第一个字符转成大写,并且加上以后的字符
System.out.println(v);
this.reflectNames[index++] = "get"+v; ???
columnNames += key+",";
}
columnNames = columnNames.substring(0,columnNames.length()-1);

/**
* 设置所有的?
*/
String values = "";
for(int i=0;i<cfs.size();i++)
{
values +="?,";
}
values = values.substring(0,values.length()-1); System.out.println(values);

String sql = "insert into "+tableName+" ("+columnNames+") values("+values+")";
System.out.println(sql);
return sql;
}

}

麻烦大家给帮个忙: 我在上面有两处打的"???"这个标记,是我疑惑的地方
  首先我创建了我自己写的一个session对象,
在执行时,String[] reflectNames = new String[cfs.size()]; 这条语句应该是初始化成员变量的时候就会执行的,但是为什么我在下面使用这个数组的时候会发生异常:
  IdException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at com.main.Session.createSQL(Session.java:68)
at com.main.Session.save(Session.java:33)
at com.main.StudentTest.main(StudentTest.java:16)


------解决方案--------------------
cfs.size() = 0 啊,

所以reflectNames是长度为0的空数值,
你给它的第1个元素赋值,当然报错了。
------解决方案--------------------
是初始化了,但是初始长度为0啊,因为你map里面现在是没有对象的,所以map的size为0,从而你数组的length也为0.但是你却要给数组赋值,如何能不报错??