1JAVA编程要点和编程规范杭州新世纪2011年7月朱宝君2内容JAVA编程要点123JAVA编程规范Q/A3Java2的版本划分Java2J2MEJ2SEJ2EE4Java语言的主要特性平台无关性简单性面向对象分布式、动态性、可靠性、安全性……多线程5面向对象三大特性•封装•继承•多态6封装(Encapsulation)•封装:将方法和数据组织在一起,隐藏其具体实现而对外体现出公共的接口–数据封装,提供公共接口访问–方法封装,不用影响调用者变量方法7继承(Inheritance)广义地说,继承是指能够直接获得已有的性质和特性,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享父类中定义的数据和方法的机制。共性部分继承部分个性部分父类子类8继承的作用使软件系统具有开放性更好地进行抽象与分类实现代码的复用提高可维护性9Java接口实现多重继承单一继承指明了子类和父类的层次关系和各自的行为。多重继承是指一个类有多个父类,这使得类的层次关系不清楚。接口则把方法的定义同类的层次区分开来,通过接口可以在运行中动态地定位所调用的方法,同时一个类可以实现多个接口,使得接口提供了比多重继承更简单、更灵活的功能。10多态•编译多态重载•运行多态–Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。11例子•类Parent•publicclassParent{•publicParent(){•System.out.print(1);•}•publicvoidprint(){•printOne();•System.out.print(2);•}•publicvoidprintOne(){•System.out.print(3);••}•}•类:Clild•publicclassClildextendsParent{•publicClild(){•System.out.print(4);•}•publicvoidprintOne(){•System.out.print(5);•}•publicstaticvoidmain(Stringarg[]){•Clildc=newClild();•c.print();•}•}12面向接口编程•要依赖于抽象,不要依赖于实现•方便代码复用,无需关注细节•便于团队协同开发,无编译依赖•考虑你的设计中什么可能发生变化,找到一个系统的可变因素13数据类型•数据类型的分类如下所示:数据类型基本数据类型复合数据类型数值型字符型:char布尔型:boolean整型:byte,short,int,long实型:float,double类:class数组和字符串接口:interface14字符串和字符串缓冲区Java平台提供两个类String和StringBuffer,它们用于存储和操作字符串-由多个字符组成的字符数据。String类用于其值不能改变的字符串;StringBuffer类用于被修改的字符串,通常用来动态的构造字符数据。字符串是常量,比字符串缓冲区更高效,而且字符串可以被共享。15数据类型每个变量都必须有一个数据类型.一个变量的数据类型决定了它能容纳的值和在它上面可以进行什么操作。Java编程语言有两大类数据类型:原始类型(primitive)引用类(reference)16实例化•new–new只能实现具体类的实例化,不适合于接口编程–强类型•newInstanceClassc=Class.forName(“A”);factory=(AInterface)c.newInstance();伸缩性、可扩展性、复用性弱类型17对象、类与实体的关系对象类计算机逻辑的实现映射计算机世界实例化抽象实体抽象数据类现实世界概念世界抽象18接口(Interface)接口和类一样也是一种类型,也同样包含一些方法的定义。但与类不同的是:接口中所定义的所有方法都是抽象方法(即没有实现的方法)。接口中所定义的方法由实现(implement)该接口的类来实现,一个类可以同时实现多个接口接口机制使Java的面向对象编程变得更加灵活。解决了单重继承带来的问题接口定义了对象的行为模型,相当于一个协议。实现接口的各个类负责实现接口所定义的行为。虽然实现细节各不相同,但对用户来说是一样的行为。19接口功能不能简单扩大例如:要加个报股价的方法在接口里,此时所有实现它的类不能正常工作。publicinterfaceStockWatcher{finalStringsunTicker=SUNW;finalStringoracleTicker=ORCL;finalStringciscoTicker=CSCO;voidvalueChanged(StringtickerSymbol,doublenewValue);voidcurrentValue(StringtickerSymbol,doublenewValue);}20用继承来扩大接口如果需要增加接口的功能,可以利用继承来实现:publicinterfaceStockTrackerextendsStockWatcher{voidcurrentValue(StringtickerSymbol,doublenewValue);}21抽象类与接口接口不可以实现任何方法,而抽象类可以;类可以实现多个接口,但父类仅只有一个;接口和继承无关,不是类层次结构的一部分。无关的类可以实现相同接口。•接口是设计的结果•抽象类是重构的结果•应用场景–优先定义接口–如果有多个接口实现有公用的部分,则使用抽象类,然后继承它。22反射机制•Reflection是Java程序开发语言的特征之一•运行时加载、探知、使用编译期间完全未知的classes。•Java程序可以加载一个运行时才得知名称的class,获悉其完整构造,并生成其对象实体、或对其fields设值、或唤起其methods123反射例子•publicObjectgetBean(StringclassName){•Objectresult=;•try{•//获取类映射•Classcls=Class.forName(className);•//实例化•Objectbo=cls.newInstance();•//获取方法映射•Methodmethod=cls.getMethod(getDataMap,newClass[]{});•//根据方法映射和实例类调用方法•result=method.invoke(bo,null);24什么是异常?异常(Exception)又称为例外,是指在程序运行过程中发生的非正常事件,这些事件的发生会影响程序的正常执行。如:进行数学中“无意义”的运算,例如除数为零、对负数求对数平方根等对数组进行操作时,超出了数组的最大下标程序所需进行的I/O操作不能正常执行,如所需访问的文件不存在内存耗尽无法进行类的实例化JVM崩溃25为什么要异常处理?对于任何语言的程序设计而言,错误的发生总是不可避免的为了加强程序的健壮性,程序设计时,必须充分考虑错误发生的可能性,并建立相应的处理机制。26异常•可以使用try、catch、throw、throws和finally来管理Java异常处理。要监控的程序语句包含在try块内catch块中的代码用于捕获和处理异常。在方法返回之前绝对必须执行的代码应放置在finally块中•要手动引发异常,使用关键字throw。任何被抛到方法外部的异常都必须用throws子句指定•多重catch和嵌套try-catch的使用•自定义异常的编写和使用27异常对象在Java语言中,我们用异常对象来表示不同的异常。所谓Java异常对象就是一个存放着相关错误信息的对象,如果方法运行时产生了异常,该方法就可以抛出一个异常对象为了表示不同种类的异常,Java语言中定义了许多异常类。28方法调用堆栈中异常对象的传递当某一方法中的一个语句抛出一个异常时,如果该方法中没有处理该异常的语句,那么该方法就会中止执行,并将这个异常传递给堆栈中的下一层方法,直到某一方法中含有处理该异常的语句为止。如果该异常被传递至主方法,而主方法中仍然没有处理该异常的语句,则异常将会被抛至JVM,程序中断。main()methodA()methodB()methodC()调用传递29手动引发异常指定由方法引发的异常tryfinallycatchthrowsthrow处理异常要监控的程序语句包含在此块中以合理的方式捕获和处理异常释放资源等30Java中的异常类在Java语言中,任何的异常对象都是Throwable类的直接子类或间接子类的实例。Java的类库已经提供了一些常见的异常类,如果这些异常类不能够满足要求,用户也可以创建自己的异常类。ThrowableExceptionRuntimeExceptionIOExceptionNullPointerExceptionArithmeticException……FileNotFoundException…………ErrorVirtualMachineError……31SERVLET•request中封装的是请求信息•response中封装的是响应信息•session32对象的串行化所谓对象串行化是指读写对象的过程,其关键之处在于以串行的流的形式来表示结构化的对象。为了实现完整对象的输入输出,java.io包中提供了两个类:ObjectOutputStream和ObjectInputStream。这两个流类与其他的字节流类的功能类似,其特殊之处在于通过它们可以读写对象。对象的串行化通常在下面两个方式下使用:远程方法调用(RMI)——在远程方法调用时,需要在客户机与服务器之间传递各种对象。对象持久性保存——允许对象在创建它们的程序的生命周期结束后仍然存在保存,供以后的程序调用。33Serializable接口并非所有对象都是可串行化的,如果要对某对象进行串行化,该对象的类必须实现Serializable接口Serializable接口是一个空接口,也就是说,它不包含任何方法的声明,该接口的作用只是表明这个类的对象可以被串行化34数据库连接池•直连–创建连接需要耗费时间–保持连接打开状态的代价很大•连接池–数据库连接池:Connectionpooling,它是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。•数据库连接池运行机制–从连接池获取或创建可用连接;–使用完毕之后,把连接返还给连接池;–在系统关闭前,断开所有连接并释放连接占用的系统资源;35事务•原子性–对数据修改操作要么全部执行,要么完全不执行•一致性–当事务完成时,必须使所有数据都具有一致的状态•孤立性–中间状态对其他事务不可见•持久性–已完成的结果的状态是持久的36MVC框架37设计模式•掌握常用的设计模式•单例、工厂、模板等等Nowcreateit从现在开始创造无限未来JAVA编程规范参见JAVA编程规范Nowcreateit从现在开始创造无限未来数据库设计规范•参见数据库设计规范Nowcreateit从现在开始创造无限未来感谢您对杭州新世纪的长期关注与支持!