Java技术培训姓名:张永健部门:银行核心软件开发二部(实施部)电话:13911198870邮箱:zhang_yj@giantstone.com2课程目录编程理论语言分类JAVA历史简介JAVA语言优缺点类型系统运算符控制结构JAVA面向对象编程编程理论——价值观沟通软件开发过程中,无处不在的沟通。程序员与代码程序员之间程序员与客户简单要解决的问题本身的内在复杂性,外在非必要的复杂性简单的相对性由复杂到简单的过程简单和沟通之间的相互作用3灵活灵活是衡量那些低效编码与设计实践的一把标尺程序是应该灵活,但只有在发生变化的时候才需如此灵活性的提高可能以复杂性的提高为代价沟通可以促进灵活性4编程理论——原则局部化影响最小重复将逻辑与数据捆绑对称性声明式表达(注解)变化率5语言的分类强类型VS弱类型强类型(strongtyping)和弱类型(weaktyping)决定了类型如何被实施或解读。很多的动态语言是强类型语言,例如:python,smalltalk。vbscript语言是一种弱类型特质的语言。”12”+3结果:”123”类型不总是黑与白,它是具有高度争议性的话题。静态类型VS动态类型静态类型:一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java和C是静态类型语言。动态类型:一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript和Python是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。6强类型和静态类型给JAVA带来的苦恼与价值让编译器有更多的信息,能够早点找出bug。良好的IDE工具支持。繁琐的语法。例如:变量和参数声明类型,类型转化。程序代码更长,需要花更多的时间理解,维护或加强。写程序/编译周期动态,反射风格的编程方面。(java反射API)7JAVA历史简介(一)Java既是一个完整的平台,也是一门语言。Java语言是1995年由JamesGosling在SunMicrosystems公司设计,作为Java平台的组成部分之一的语言。Java平台除了语言之外,还有两个组成部分,虚拟机(JVM)和类库。Java语言参考了C语言和C++的设计,因此在代码整体风格上与它们比较类似。不过与C++相比,Java语言设计的更为小巧,简单和可靠。Java的类型分为两种:类(class)和基本类型(primitivetype),并没有C++中的struct和union类型。同时,Java还提供了boolean类型,并对布尔类型的定义和使用作出了限制。此外,Java中也不允许开发人员进行运算符重载,但提供如synchronize等进行并发控制的语言特性。在面向对象类型系统的设计中,Java不允许C++中的多重继承,因为许多人认为多重继承所带了许多复杂性和混乱,可谓弊大于利。不过Java允许开发人员定义“接口”,即一种“契约”而不包含实现,这在一定程度上也可以带来部分多重继承的优点。8JAVA历史简介(二)总体而言,Java语言去除了C++中大量的复杂或是不安全的特性,这使的Java成为了一门灵活而强大,同时又更为小巧,简单和可靠的语言。从现在的角度看,Java语言大大降低了C++本身所带来的复杂度,让编程工作变的更为简单,具有很高的历史意义。910JAVA发布时间表1996年1月23日JDK1.01997年2月19日JDK1.11998年12月8日J2SE1.22000年5月8日J2SE1.32002年2月6日J2SE1.42004年9月30日J2SE5.02006年12月11日JAVASE6至今JAVASE6upate2111JDK1.5新增功能泛型注解自动拆箱(Autoboxing)枚举动态参数新的foreach语句新的并发工具包12JavaSE6新增功能脚本语言支持大幅度提升性能改进Web服务支持(JAX-WS)支持JDBC4.0设计JAXB到2.0版本。(JAXB(JavaArchitectureforXMLBinding简称JAXB)允许Java开发人员将Java类映射为XML表示方式)图形界面的改进13JAVA语言的缺点许多框架设计用来简化JAVA项目开发,的确让JAVA开发者更具有生产力,但是也让学习的曲线增加,初学java者难以负荷。编译期异常与类型检查可以提高安全性,但是让时间和语法的成本增加。JAVA不适合表现结果性数据,这使得JAVA过度依赖XML,因此造成额外的复杂度和体制暴增。JAVA的许多折中设计,像基本类型,让JAVA更不好学习,更不好写。JAVA比C++动态,但是远远比不上smalltalk动态。Java开发者正发现元编程,但是他们无法用够快的速度执行这样的想法。JAVA比其他直译式语言,动态语言,编译和部署周期更长。JAVA语言的优点JAVA在需要的地方提供了更多的结构。例如:提供接口。JAVA减少了指针的必要性,让软件更稳定,更好阅读。垃圾收集更容易,因为JVM自动处理不用的内存。JAVA允许更好的封装机制,简化了程序代码的使用。JAVA消除了一些问题,像嵌套的引用文件以及宏。JVM具有空前的可移植性。JAVA的元模型,通过类对象来描述JAVA类型,允许我们使用相当精巧的反射编程(reflectiveprogramming)。14JAVA类型系统数据类型基本类型引用数据类型整型:byte,short,int,long浮点型:float,double布尔型:boolean字符型:char数组类接口枚举……基本类型带来的不便错误的写法:ArrayListlist=newArrayList();list.add(5);//cannotcompileinti=(int)list.get(0);//cannotcompileinthash=3.hashCode();//cannotcompile正确的写法(jdk1.4):ArrayListlist=newArrayList();list.add(Integer.valueOf(5));inti=((Integer)list.get(0)).intValue();inthash=Integer.valueOf(3).hashCode();16基本类型带来的不便JDK1.5自动拆箱ArrayListlist=newArrayList();list.add(5);inti=(Integer)list.get(0);inthash=Integer.valueOf(3).hashCode();为什么保持基本类型吸引C++开发者效率问题17数组带来的困挠数组的错误初始化int[]numbers={1,2,3};//cannotcompile数组正确的初始化int[]numbers=newint[]{1,2,3};数组作为参数函数:publicvoidsay(String[]names){}调用:say(newString[]{hello,world});18数组带来的困挠JDK1.5带来了可变参数函数:publicvoidsay(String...names){}调用:say(hello,world)19JDK1.5带来的枚举JDK1.4publicstaticfinalStringreadColor=red;publicstaticfinalStringblackColor=black;publicstaticvoidprintColor(String...names){}printColor(readColor,blackColor);JDK1.5枚举publicenumColor{red,black}publicstaticvoidprintColor(Colorc){}printColor(Color.red);20引用类型Final关键字的使用函数参数的传递函数参数作为返回值(JAVAIO)publicintread(byteb[],intoff,intlen)throwsIOException;21运算符算术运算符与逻辑运算符整数/整数结果为整数¼-------------0¾-------------05/3-------------1精度计算避免使用float,double.可以使用BigDecimal1.32-0.49---------------------0.830000000000000122位运算符的使用率很低表达式1&&表达式2如果表达式1为false,表达式2不会被计算。使用括号来区分运算符的先后顺序(1+2)*3-523控制结构功能偏弱的switch语句。Switch选择条件只能是int和char类型。intnumber=1;switch(number){case1:case2:}JDK1.5foreach语句24ListStringlist=newArrayListString();list.add(hello);for(inti=0;ilist.size();i++){Stringhello=list.get(0);System.out.println(hello);}for(Stringname:list){System.out.println(name);}25break和continue语句相同点break除了可以用在switch语句中之外,亦可以用于循环语句中,这时它与continue语句一样,对循环的执行起限定转向的作用不同点continue语句只结束本次循环,而不是终止整个循环的执行break语句则是结束整个循环语句的执行26面向对象历史简介对象作为编程实体最早是于1960年代由Simula67语言引入思维。在分析式程序中,我们将真实世界的对象映射到抽象的对象,这叫做“模拟”。Simula不仅引入了“类”的概念,还应用了实例这一思想——这可能是这些概念的最早应用。20世纪70年代施乐PARC研究所发明的Smalltalk语言将面向对象程序设计的概念定义为,在基础运算中,对对象和消息的广泛应用。Smalltalk的创建者深受Simula67的主要思想影响,但Smalltalk中的对象是完全动态的——它们可以被创建、修改并销毁,这与Simula中的静态对象有所区别。此外,Smalltalk还引入了继承性的思想,它因此一举超越了不可创建实例的程序设计模型和不具备继承性的Simula。面向对象程序设计在80年代成为了一种主导思想,这主要应归功于C++。一种说法是,GUI的引入极大地推动了面向对象程序设计的发展。90年代开始,Java语言成为了广为应用的语言,除了它与C和C++语法上的近似性。Java的可移植性是它的成功中不可磨灭的一步,因为这一特性,已吸引了庞大的程序员群的投入。2728面向对象编程定义面向对象程序设计(Object-orientedprogramming,缩写:OOP)指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(ObjectOrientedDesign,简称OOD)方面的知识。面向对象基本特征数据抽象(封装)封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流与交互!继承继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化。多态多态通过分离做什么和怎么做,从另一个角度将接口和实现分离。多态不但能够