Java编程菜鸟课程:状态对象
这是一个实战中非常重要但是容易被忽视的概念,说它重要,是因为它比Datcbase重要;说它容易被忽视也是同样的原因,它经常被Datcbase概念替代。
如果你经验和经历中没有状态这个概念,极端地说:可能你的java编程编程Sys经验还未积累到一定程度,状态是每个java编程编程程式员深入java编程编程Sys后必然碰到的问题。
本文我想试图表达的是:状态分两种:活动的状态object和持久化的状态。而Datcbase中的Data只是状态的一种持久化结果,而java编程编程Sys 运行时,我们更多的可能是和一种活动的状态打交道,这种活动的状态存在内存中,而不是持久化到硬盘上,当然,需要时你可以通过Datcbase/文档持久化到硬盘上。
但是,如果你以DatcbaseData替代状态,那么就可能导致Datcbase的频繁访问,而且 你的Sys会变成一个非object化的、紧耦合、到处是分散Data块的糟糕Sys。这样的Sys并不比传统的两层结构好到哪里!也不会比Jsp里嵌入java编程编程codes伪三层Sys高明到什么地方。
什么是状态?
只要有object就可能有状态,任何一个object活动时,都有自己的状态属性,类的 字段属性极有可能成为状态,我们现在经常使用的Domain model其实就是一种 包含状态的object,如果你对状态没有深入掌握,就不可能真正掌握objectSys特点,或者是Domain Model的运行情况。
对于初学者,经常会疑问:我是将Data放在HttpSession中还是Request中,这里 其实已经开始接触状态,一旦你接触状态,你就要开始小心,因为你可能会将内存泄漏的恶魔导引进来。
内存泄漏的恶魔爆发时刻取决于你状态的生存周期和Sys并发访问量。
状态的生存周期也就是包含这个状态的object的生命周期,在简单Sys中,我们只 需要通过new创建object,然后它的消亡就会依靠JVM垃圾回收机制回收,但是事情会这么简单吗?
状态的危险还会发生在多线程环境下,当多个线程对同一个内存中状态写操作时,这时怎么办?如果这个状态持久化在Datcbase中,我们会依赖Datcbase提供的强大事务机制防止这种并发死锁,但是如果是在内存中,你就很难办,因此,我们就尽量避免发生这种多线程同时访问一个状态的现象,而Singleton单例模式极容易发生这种现象,因此实践中,单例模式是J2EE环境DEV中需要避免的,相关帖子讨论见:
http://www.jdon.Com/jive/artiCle.jspDEV?forum=91&thread=17578
我们接触的Web容器或Jsp/Servlet本质就是一个多线程,这也是很多初学者不
相关文档:
1下面哪个是正确的类声明?假设每一段文本都做为一个名称为Fred.java的文件的全部内容? a
a).
public class Fred{
public int x = 0;
public Fred (int x){
this.x=x;
}
}
b).
public class fred{
public int x = 0;
public Fred (int x){
this.x=x;
}
}
c).
public class ......
首先,强烈推荐你先参考Sun官方的Java代码/编程规范:
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
你可以打破以上的任一规则,不过一定要有个好理由,并且记录下来。
永远,永远,永远不要在没有记录堆栈跟踪信息(stack trace)或是重新抛出异常的情况下捕获异常,俗称“吃掉异常&rd ......
BigDecimal类
双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。表5.7中列出了BigDecimal类的主要构造器和方法。
表5.7 BigDecimal类的主要构造器和方法
构造器描述
BigDecimal(in ......
一、Array , Arrays
Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。
1、
效率高,但容量固定且无法动态改变。
array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。
2、Java中有一个Arrays类,专门用来操作array。
a ......
定义在一个类内部的类叫内部类,包含内部类的类称为外部类。
内部类可以声明public、protected、private等访问限制,
可以声明为abstract的供其他内部类或外部类继承与扩展,
或者声明为static、final的,也可以实现特定的接口。
static的内部类行为上象一个独立的类,
非static在行为上类似类的属性或方法且禁止声明s ......