美丽涵涵童装店--说我博客名字,给你们打折!
随笔 - 82  文章 - 266  trackbacks - 0
<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567


点击这里给杨爱友发消息
美丽涵涵童装店
说我博客名字,给你们打折!

常用链接

留言簿(6)

随笔分类

随笔档案

文章档案

好友的BLOG

搜索

  •  

最新评论

阅读排行榜

评论排行榜

----------------------------------------------------------------------------------------------------
在Java语言中,判断两个对象是否相等有两种方法:
1.判断两个对象的内存地址是否相同;
2.判断两个对象的值是否相同。
‘==’运算符就是判断内存地址是否相同的;Object类中的equals()方法也是根据内存地址来判断,所以说如果一个类没有覆盖Object类中的equals()方法,那么用‘==’和 equals()是等同的;但Java API中的一些类覆盖了Object类的equals()方法,实现按‘值’进行比较。这些类包括:
String、Date、Java所有包装类(基本数据类型包装类);
----------------------------------------------------------------------------------------------------
Java集合类之Set集:

它最像数学中的集合—无序的;不能有重复元素。它有两个实现类:HashSet和TreeSet。
HashSet类按照哈希酸法来存/取集合中的对象,存:根据对象的哈希码类计算对象应该存放的位置。注意,HashSet集合里的元素如果覆盖了Object类中的equals()方法,那么也应该覆盖Object类中的HashCode()方法,否则两个对象相等(用equals()方法判断),却有不同的哈希码,从而把两个对象存储到集合的不同地方,是HashSet不能正常工作。换过来说,HashSet里添加的对象不能重复,依据是两个对象的hashCode不同 。
TreeSet类实现了SortedSet接口,能对集合中的对象排序。
1.自然排序
TreeSet调用ComparaTo()方法比较对象的大小,进行排序。
向TreeSet里加入的对象必须满足两个前提:一,同类型,否则无法排序;二,实现了Comparable接口,否则无法调用ComparaTo()方法。有一条不满足将会抛出ClassCastException。
Set<Role> roleSet = new HashSet<Role>();
for(int i = 0;i < roles.length;i++){
 Role role = new Role();
 role = (Role)session.get(Role.class,roles[i]);
 roleSet.add(role);//如果是TreeSet添加第二个对象时会出错
}
开始我用的是TreeSet,用短点调试,每循环到第二次就会报错-类型转换异常,无意间换成了HashSet对了,但是不知道原因,查了些网站都是泛泛介绍下两者的区别,一个有序,一个无序,但都没深入的去介绍,知道今天看了孙卫琴‘孙卫琴精通Hibernate才豁然开朗。原因就是我的Role类没有实现Comparable接口,不能进行对象的比较,无从排序。
学习一个新知识,死记可以记住一周,看懂可以记得一月,而写出来一年忘不了,及时进行总结,坚持写blog是一个很好的习惯,深刻领悟到。
2.客户化排序
用户可以先创建一个实现了java.util.Comparator接口的类xxxComparator()来指定具体的排序方式,如下构造TreeSet实例:Set set = new TreeSet(new xxxComparator());可以实现按xxxComparator()中定义的排序方式排序。
用Hibernate来做持久化框架时最好每个PO都重写equals()和hashCode()方法,并且应该按照业务主键来比较/计算。为什么不按照主键来比较计算,请参考孙卫琴精通Hibernate第15.1节的介绍。

Java集合类之List:
list最大的特点对象以线性方式存储,可以插人重复元素;他的实现类有ArrayList和LinkedList,ArrayList以大小可变的数组形式存储对象,LinkedList以链表数据结构来存储对象;还一个类似ArrayList的Vector,唯一的区别是Vector采用了同步机制?
--------------------------------------------------------------------------------------------------
AJAX不是一种新技术,而是一种新模式,是几中技术的组合。它是异步JS+XML的组合。
AJAX速度为什么会快?因为整个页面不刷新,刷新的只是提交的表单范围,其他范围的数据不用重新去请求服务器。
AJAX采用异步机制,当用户发送http请求后,浏览器不会被挂起,等着服务器响应,而是继续对用户与页面进行响应,并在服务器响应达到时进行处理。在服务器端,把对客户端的响应序列化成XML,并把XML写入HttpServletResponse。回到客户端时,调用注册在xmlHttpRequest上的回调函数,处理服务器返回的XML,最后,根据服务器返回的数据,用javaScript操纵页面的HTML DOM,把用户截面刷新。

DWR简单说就是一个引擎,他把服务器端JAVA对象中的方法公开给javascript,就好象在本地调用方法一样快捷。有了DWR,系统中不必再出现AJAX请求-响应循环代码,这意味着客户端再也不需要处理XMLHttpRequest对象,不必处理服务器端的响应,不用编写对象序列化代码,不用自己编码生成XML文件。
---------------------------------------------------------------------------------------------------
jtds连接sqlserver时出现java.sql.SQLException: "Network error IOException: Connection refused: connect"异常,折腾了半天突然想起一个叫SPX的东西,找了个sp4装上,再试,好了。哎,已经是第二次栽在这里了,也听说过SP3 、SP4的重要性,但因为我第一次接触数据库、第一份工作没有用到SP*之类的东西,经常忽视掉它,到现在依然不明白为什么我以前不装SP*也能正常运行。
又花了我俩小时时间。

利用struts开发项目,报错java.lang.IllegalArgumentException: Resources cannot be null.
原因之一是因为找不到formBean里定义的form类,其一是路径错,其二是你的form类没有继承Struts的ActionForm,我属于第二种情况,忘记写上extends ActionForm。
又花我俩小时。

在eclipse里书写代码更容易发现错误,但它的速度实在慢,所以可以折中,对于一些重要的文件,比如xml,先在editPlus里编写好,再从eclipse里打开,看看是否有错误。
资源文件:不必要做国际化时是没用的。
尽量在高层捕获异常,但这样的话每个地方都要捕获异常,如果在低层捕获异常,那么调用它的每个地方都不用捕获,使代码简洁易读。到底哪种好呢?
---------------------------------------------------------------------------------------------------
web.xml里的hibernateFilter段:

 <filter>
  <filter-name>hibernateFilter</filter-name>
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  <init-param>
   <param-name>sessionFactoryBeanName</param-name>
   <param-value>sessionFactory</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>hibernateFilter</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>hibernateFilter</filter-name>
  <servlet-name>dwr-invoker</servlet-name>
 </filter-mapping>
作用:当用hibernate查询时,查询完毕后session关闭,此时在结果集里是没有子表里的信息的,当取其结果集中子表信息时session再次被打开,查询子表信息,此功能就由这一段来实现。

加了这一段有时会出现以下异常:
 Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition

错误解决办法:

 <init-param>
   <param-name>singleSession</param-name>
   <param-value>false</param-value>
  </init-param>
不解是什么原理。
只知道这样可能会出现数据库连接数过多异常。
--------------------------------------------------------------------------------------------
提问:
1.Object类中hashCode()方法如何定义的呢,哈希码如果计算的?
--------------------------------------------------------------------------------------------------

java中有自带的正则表达式引擎,位于java.util.regex包。里面包括两个类Pattern、Matcher。
1.书写用于匹配的表达式;
 String regEx="a|f";
2.将正则表达式编译为Pattern的实例,得到一个匹配模式。
 Pattern p=Pattern.compile(regEx);
3.调用匹配模式的matcher(str)方法得到一个匹配器
 Matcher m=p.matcher(str);
matcher只是得到了一个包含“正则表达式”和“字符串信息”匹配器的实例,并没有进行任何的匹配、查找动作。而对字符串的匹配及其他操作都在此匹配器 m 上进行。
使用举例:
 boolean result=m.find();
查找是否有匹配项;
 String newStr = m.replaceAll("p");
将匹配子串都替换为"p";注意原来字符串的内容并没有改变,因为字符串本身是不可边量,所以字符串内容不会改变。
---------------------------------------------------------------------------------------------
java中的流分为两中:字节流、字符流。分别由四个抽象类来表示InputStream、outputStream、Reader和Writer,其他种类的流都是由他们派生出来的。
其他类如:BufferedReader是Reader的一个子类,它具有缓冲的功能,避免频繁得从物理设备中读取信息;
若目的地是文件需要用FileWriter来包装,若要在写过程缓冲需要用BufferedWriter包装,若要格式化输出需要再用PrintWriter包装。
最基本的方法有read和write,其他用得最多的是readLine()方法。

posted on 2007-06-21 12:33 杨爱友 阅读(510) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
美丽涵涵童装店
亲,说我博客名字,给你们打折!