1、 请指出下列代码段中的错误或不足之处(下面的代码段都可以成功编译),并说明原因。
(1) 组
String s1 = "abc";
String s2 = "fde";
String s3 = "gbc";
String s = s1+s2+s3; (2)组
if (formBean.getStatusId().equals("930")) {
}(3)组
public void f(){
DBean db = null;
Connection con = null;
try {
db = new DBean();
db.connect();
con = db.getConnection();
.....
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void g(){
f();
}(4)组
UserTransaction transaction = null;
try {
PolicyDAO.create(...);//insert a record
transaction = Trans.getUserTransaction();
transaction.begin();
....
PolicyDAO.update();//update the record
transaction.commit();
}catch (Exception e) {
transaction.rollback();
throw e;
}
(1) 组
String s1 = "abc";
String s2 = "fde";
String s3 = "gbc";
String s = s1+s2+s3; (2)组
if (formBean.getStatusId().equals("930")) {
}(3)组
public void f(){
DBean db = null;
Connection con = null;
try {
db = new DBean();
db.connect();
con = db.getConnection();
.....
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void g(){
f();
}(4)组
UserTransaction transaction = null;
try {
PolicyDAO.create(...);//insert a record
transaction = Trans.getUserTransaction();
transaction.begin();
....
PolicyDAO.update();//update the record
transaction.commit();
}catch (Exception e) {
transaction.rollback();
throw e;
}
if (formBean.getStatusId().equals("930")) {
}应该写成if (formBean.getStatusId()!=null&&formBean.getStatusId().equals("930")) {
}要不可能抛空指针(3)组
db = new DBean();
最好改成单例模式 ,
(4)组PolicyDAO.create(...);//insert a record 也应该加到事物控制里吧以上仅供参考,我是刚学习java的
2。判断null
3。finally里close
4。事务第一个要调begin
String s2 = "fde";
String s3 = "gbc";
String s = s1+s2+s3;
String类型生成后是不会改变的 所以s1+s2="abcfde"也会被保存到内存中建议用StringBuffer 他是可变的
String s1 = "abc";
String s2 = "fde";
String s3 = "gbc";
StringBuffer s = new StringBuffer();
s = s.append(s1).append(s2).append(s3);
组2:
if (null != formBean && null != formBean.getStatusId() && ("930").equals(formBean.getStatusId())) {
}
组3:
增加数据库连接池的模块,将数据库连接封装。
组4:
在try-catch模块语句增加finally语句,用来关闭连接等操作!
UserTransaction transaction = null;
try {
transaction = Trans.getUserTransaction();
transaction.begin();
....
PolicyDAO.create(...);//insert a record //把这个也加到事物控制中
PolicyDAO.update();//update the record
transaction.commit();
}catch (Exception e) {
transaction.rollback();
throw e;
}
}catch (Exception e) {
if(null ! = transaction) {
transaction.rollback();
}
throw e;
}
第二组,写成if("930".equals(formBean.getStatusId()) {}//否则当formBean.getStatusId()得到null时,会报空指针异常第三组,把conn.close()放到finally中,因为这样,不管发生什么情况,都会关闭。上面的程序当发生异常后,conn就不会关闭。
第四组,应该把回滚的代码放到catch中,这样就会保证数据的完整性!
上面说的各有道理吧。只是觉得都不太完整。
String 是以对象形式存在的,多个String对象被new出来之后存在于内存当中,其实String的效率是高于StringBuffer的,但是由于内存的占有给gc带来负担,从全局来讲是不推荐使用String来实现可变字符串的,因为这样的系统可能久了之后容易出现系统缓慢或者其他问题。而equals方法,一般推荐将确定的字符串放在前面,这样可以避免NULL指针异常。后面两道我和各位理解的也差不多,谢谢各位了。