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本质就是一个多线程,这也是很多初学者不
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
package barchartdemo1;
import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.Numbe ......
为寻求java代码的性能优化,从网上搜到利用final关键字进行编译时inline优化的方法,但是真的有效吗?实际测试中发现未必,甚至性能影响巨大,最终放弃了使用final优化的想法。
测试环境:Windows XP SP2,JDK 1.6.0_15-b03,Eclipse 3.5 SR1。
package test;
public class Test {
public static void main(St ......
最近找工作做笔试题发现很重要,就自己写了一点,和大家分享
import java.util.Stack;
import java.util.HashMap;
public class BinTree {
private char date;
private BinTree lchild;
private BinTree rchild;
public BinTree(char c) {
date = c;
}
// 先序遍历递归
public static void preOrder(Bi ......
在编程的时候,经常遇到要判断一个字符串中的字符是否是数字(0-9)
下面我给大家介绍几种实现方法
1.使用Character.isDigit(char)判断
String str = "123abc";
if (!"".equals(str)) {
char num[] = str.toCharArray();//把字符串转换为字符数组
StringBuffer title = new StringBuffer();//使用S ......