摘要: DataSource用来取代DriverManager来获取Connection;通过DataSource获得Connection速度很快;通过DataSource获得的Connection都是已经被包裹过的(不是驱动原来的连接),他的close方法已经被修改。一般DataSource内部会用一个连接池来缓存Connection,这样可以大幅度提高数据库的访问速度;连接池可以理解成一个能够存放Connection的Collection;我们的程序只和DataSource打交道,不会直接访问连接池;使用装饰模式的Connection(核心代码)class MyConnection impleme 阅读全文
posted @ 2011-12-16 16:23 残星 阅读(2202) 评论(0) 推荐(1) 编辑
摘要: 组合模式(Composite)将对象组合成树型结构以表示“部分-整体”的层次结构,Composite使得客户对单个对象和符合对象的使用具有一致性。Component(抽象构件接口)-为组合的对象声明接口-在某些情况下实现从此接口派生出的所有类共有的默认行为-定义一登上接口可以访问及管理它的多个子部件Leaf(叶部件)-在组合中表示叶结点对象,叶节点没有子节点-定义组合中接口对象的行为Composite(组合类)-定义有子节点(子部件)的部件的行为-存储子节点(子部件)-在Component接口中实现与子部件相关的操作Client(客户端)-通过Component接口控制组合部件的对象组合模式有 阅读全文
posted @ 2011-12-15 12:44 残星 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 命令模式(Command)把一个请求或者操作封装到一个对象中,从而达到用不同的请来对客户端进行参数化的目标;对请求排队或记录请求日志,以及支持可撤消的操作。命令模式的构成1.客户角色:创建一个具体命令对象,并确定其所接收者//客户角色public class Client {public static void main(String[] args) {Receiver receiver=new Receiver();Command command=new ConcreteCommand(receiver);Invoker invoker=new Invoker(command);invoke 阅读全文
posted @ 2011-12-15 12:35 残星 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 1、AWT、Swing事件模型所采用的模式:缺省的适配器模式public class AwtApp {public static void main(String[] args) {Frame frame=new Frame("title");frame.addMouseMotionListener(new MouseMotionAdapter(){@Overridepublic void mouseMoved(MouseEvent e){System.out.println("x:"+e.getX()+"\ty:"+e.getY() 阅读全文
posted @ 2011-12-14 21:57 残星 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 适配器(Adapter)模式把一个类的接口变换成客户端所希望的另一种接口,从而使原本因接口原因不匹配而无法工作的两个类能够一起工作。适配器(Adapter)模式的构成目标抽象角色(Target):定义客户要用的特定领域的接口适配器(Adapter):调用另一个接口,作为一个转换器适配器(Adaptee):定义一个接口,Adapter需要接入客户端(Client):协同对象符合Adapter适配器适配器的分类有三种类型的适配器模式public interface Target {public void method1();}public class Adaptee {public void me 阅读全文
posted @ 2011-12-14 20:06 残星 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 存储过程CallableStatement(从PreparedStatement扩展来)cs=connection.prepareCall("{call psname(?,?,?)}");cs.registerOutParameter(index,Types.INTEGER);cs.getXXX(i,XXXX);cs.executeUpdate();int id=cs.getInt(index);前端工具下数据库上右击-->Create New Procedure/Function-->Name:"...."-->Create PROC 阅读全文
posted @ 2011-12-14 16:11 残星 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 1.JUnit在TestCase中应用了模板方法模式:public void runBare() throws Throwable{ setUp(); try{ runTest(); }finally{ tearDown(); }}2.JUnit在TestCase类中应用了适配器(Adapter)模式:public void runBare()throws Throwable{ Throwable exception = null; setUp(); try { runTest(); } catch (Throwable running) { ... 阅读全文
posted @ 2011-12-14 16:08 残星 阅读(1042) 评论(0) 推荐(0) 编辑
摘要: 模板方法模式(Template Method)定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤。使用场合1)一次性实现一个算法的不变部分,并且将可变的行为留给子类来完成。2)各子类公共的行为应该被提取出来并集中到一个公共父类中以避免代码的重复。首先识别现有代码的不同之处,并且把不同部分分离为新的操作,最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。3)控制子类的扩展。模板方法模式的组成父类角色:提供模板public abstract class AbstractClass {public void templa 阅读全文
posted @ 2011-12-14 13:53 残星 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 1.JUnit4全面引入Annotation来执行我们编写的测试2.JUnit4并不要求测试类继承TestCase父类3.在一个测试类中,所有被@Test注解所修饰的public,void方法都是testcase,可以被JUnit所执行。4.虽然JUnit4并不要求测试方法名以test开头,但我们最好还是按照JUnit3.8的要求那样,以test作为测试方法的开头。5.在JUnit4中,通过@Before注解实现与JUnit3.8中的SetUp方法同样的功能,通过@After注解实现与JUnit3.8中的tearDown同样的功能。6.JUnit4中,可以使用@BeforeClass与Afte 阅读全文
posted @ 2011-12-14 12:18 残星 阅读(2129) 评论(0) 推荐(0) 编辑
摘要: 事务(SavePoint)当只想撤销事务中的部分操作时可使用SavePointSavePoint sp=connection.setSavepoint();connection.rollerbak(sp);connection.commit();事务(ACID)原子性(atomicity):组成事务的语句形成了一个逻辑单元,不能只执行其中的一部分。一至性(consistency):在事务处理执行前后,数据库是一至的(数据库数据完整性约束)。隔离性(isolcation):一个事务处理对另一个事务处理的影响。持续性(durability):事务处理的效果能够被永久保存下来。connection. 阅读全文
posted @ 2011-12-13 18:19 残星 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 为什么使用Annotation在JAVA应用中,我们常遇到一些需要使用模版代码的情况。例如,为了编写一个 web service,我们必须提供一对接口和实现作为模版代码。如果使用annotation对远程访问的方法代码进行修饰的话,这个模版就能够使用工具自动生成。另外,一些API需要使用与程序代码同时维护的附属文件。例如EJB需要一个部署描述符。此时在程序中使用annotation来维护这些附属文件的信息将十分便利而且减少了错误。Annotation工作方式从Java5.0版发布以来,5.0平台提供了一个正式的annotation功能:允许开发者定义、使用自己的annotation类型。此功能 阅读全文
posted @ 2011-12-12 21:28 残星 阅读(1152) 评论(0) 推荐(0) 编辑
摘要: 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用 代理模式一般涉及到的角色有 §抽象角色:声明真实对象和代理对象的共同接口§代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装§真实角色:代理角色所代表的真实对象,是我们最终要引用的对象参见程序Subject.java// 抽象角色 阅读全文
posted @ 2011-12-12 13:52 残星 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 1.从Object层次来说两者是相同的,都是比较内存地址,也就是说,都是比较两个引用是否指向同一个对象,是则返回true,否则返回false。equals:public boolean equals(Object obj){ return (this==obj);//比较两个对象的内存地址是否一致。}2.但很多类Overwrite了equals方法:如:String类:public boolean equals(Object anObject){if (this==anObject){ return true;}if(anObject instanceof String){ String... 阅读全文
posted @ 2011-12-11 22:10 残星 阅读(222) 评论(0) 推荐(0) 编辑
摘要: Java 语言的反射机制在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。Java 反射机制主要提供了以下功能在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个对象的方法Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的 阅读全文
posted @ 2011-12-11 10:12 残星 阅读(691) 评论(0) 推荐(0) 编辑
摘要: 一、JDK1.51.scanner的用法:public class ScannerTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// boolean i=sc.nextBoolean();// byte i=sc.nextByte();// short i=sc.nextShort();// int i = sc.nextInt();// long i=sc.nextLong();// float i=sc.nextFloat();// double i=sc.nextDoub 阅读全文
posted @ 2011-12-10 16:03 残星 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 1.进入表:use jdbc;2.查询表结构:show create table jdbc.user;3.存放长文本用TEXT类型。4.存放二进制数据用BLOB。5.分页select id,name,money,birthday from user limit 150,10 --从150开始取10条记录6.修改表的引擎使之支持事务处理。前入MySQL前端工具-->Tools-->MySQL Administrator-->StartupVariables-->General Parameters-->Default storage:InnoDB; 阅读全文
posted @ 2011-12-10 09:43 残星 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 连接数据的步骤注册驱动 (只做一次)建立连接(Connection)创建执行SQL的语句(Statement)执行语句处理执行结果(ResultSet)释放资源一、工具类Class.forName(“com.mysql.jdbc.Driver”);推荐这种方式,不会对具体的驱动类产生依赖。DriverManager.registerDriver(com.mysql.jdbc.Driver);会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。System.setProperty(“jdbc.drivers”, “driver1:driver2”);虽然不会对具体的 阅读全文
posted @ 2011-12-09 13:44 残星 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 优点:(1)跨平台(大部分平台上都有Java虚拟机),许多平台(计算机+操作系统)上都有各自的Java虚拟机(java VM),Java虚拟机不跨平台,要分别编写。编译生成的中间代码,由统一的Java虚拟机指令组成。(2)代码可移动(与HTML相结合)。(3)完全面向对象。(4)编出来的程序不易出错(没有指针,内存垃圾自动回收,不会产生内存泄漏)。Java与C++的区别:(1)完全面向对象:无全局变量、无结构和联合、自动回收内存垃圾。结构体:C++:struct student{char name[9];char sex[2];short age;}stud1,stud2;struct stu 阅读全文
posted @ 2011-12-08 17:21 残星 阅读(727) 评论(0) 推荐(0) 编辑
摘要: 1.从代码把一部分重复的代码提取出来成为独立的方法。选中代码-->右击-->Refactor-->Extract Method-->填入Method name-->OK2.提示信息:alt+/3.格式化代码:ctrl+shft+f4.注释:ctrl+/,ctrl+shft+/5.快速对多个相同的名字进行重命名:ctrl+1-->Rename in file.6.查看继承类:ctrl+T7.查找文件:ctrl+shift+RCtrl+D: 删除当前行Ctrl+Q: 定位到最后编辑的地方Ctrl+Shift+/: 在代码窗口中是这种/*~*/注释,在JSP文件窗 阅读全文
posted @ 2011-12-08 16:28 残星 阅读(1333) 评论(0) 推荐(0) 编辑
摘要: 一、在MyEclipse提供了对Junit的支持(无需引用第三方库):单击项目右键-->properties-->Java Build Path-->Libraries-->Add Library-->Junit-->next-->选择版本:Junit3/Junit4-->Finish-->OK二、使用Junit的最佳实践:1、新建一个名为test的Source Folder,用于存放测试类源代码。项目右键-->New-->Source Folder-->Folder Name:test-->finish.在测试目录 阅读全文
posted @ 2011-12-07 21:32 残星 阅读(1903) 评论(0) 推荐(0) 编辑