如果在方法体里有副作用,则可能会让读代码的别人——也包括几个月后的自己——理解错误。代码规范说白了,就是让代码书写的横无际涯的可能性受到限制,让人的书写和阅读有个附着点,不致发散。Java这块没有大张旗鼓地使用出参的习惯,可以看成默认的禁区,一般应该不要突破。
其实方法的语义在某个时期某个领域曾经是重灾区,就是处理用户请求的方法,在以Servlet(没用到返回值)、Struts1(封装得比较死)、Struts2(没用到参数)为主流的时代。后来SpringMVC成为主流,大家才意识到把编程元素用到它们本来的职责上可以这么爽。这在《Struts2技术内幕》里有过很精彩的叙述,我就不多说了。
作者:祁达方
链接:https://www.zhihu.com/question/54846610/answer/141368454
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
当Java中函数中,想要实现output parameter时,对应的参数,不能是Immutable,即不能是,不可更改的,
而String就是Immutable,所以要换用StringBuilder之类的,Mutable的类型的变量,去实现对应的output parameter。
参考:http://stackoverflow.com/questions/2824910/how-to-use-an-output-parameter-in-java
示例:
public
Boolean extractSingleStr(String pattern, String extractFrom, StringBuilder extractedStr) {
Pattern
strP = Pattern.compile(pattern)
Matcher
foundStr = strP.matcher(extractFrom)
Boolean
found = foundStr.find()
if(found)
{
extractedStr.append(foundStr.group(1))
}
return
found
}
使用:
StringBuilder
extractedTitle = new
StringBuilder()
if(extractSingleStr("<p\\s+class=\"mid_tit\">(.+?)</p>",
respHtml, extractedTitle))
{
etUrlOrId.setText(extractedTitle)
}
Jdbc 调用存储过程: callablestatement 调用 java 中的存储过程,这是相当固定的: class.forname (... connection conn = drivermanager.getconnection (.../* * * p 是要调用的存储过程的名称,存储过程的4个参数,4?Cont.preparecall (“{ call p (?,?,?,?) } ")告诉 jdbc 哪些参数是用 java.sql.types 指定的输出参数。第四个呢?输出参数,类型是什么特定写入类型后面的整数 * 类型,这取决于存储过程参数定义的方式。*/cstmt registeroutparameter (3 types) ,一个整数)。第一个参数是 cstmt.registeroutparameter (4,types.integer) /* * * ?第二个呢?第三个是输入参数,第四个是输出参数,第四个是输入和输出 * ,第一个设置为3,第二个设置为4,第四个设置为5 * 没有设置第三个参数,因为它是输出参数 */cstmt.setint (1,3) cstmt.setint (2,4) cstmt.int (4,5) //execution/cstmt。Execute () int three = cstmt.getint (3) int three = cstmt.getint (3) int three = cstmt.getint (3) system.out.println (3) int four = cstmt.getint (4) int four = cstmt.getint (4) system.out.println (4) //在使用它之后不要忘记关闭它。Close () jdbc 调用存储过程,掌握这个程序就足够了。创建或替换过程 p (v _ a in number,v _ b number,v _ ret out number,v _ temp in out number)是 beginif (v _ a