《JAVA技术培训陈华海.ppt》由会员分享,可在线阅读,更多相关《JAVA技术培训陈华海.ppt(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java技术培训技术培训姓名:张永健姓名:张永健部门:银行核心软件开发二部(实施部)部门:银行核心软件开发二部(实施部)电话:电话:邮箱:邮箱:2课程目录课程目录n编程理论编程理论n语言分类语言分类nJAVA历史简介历史简介nJAVA语言优缺点语言优缺点n类型系统类型系统n运算符运算符n控制结构控制结构nJAVA面向对象编程面向对象编程编程理论编程理论价值观价值观n沟通沟通软件开发过程中,无处不在的沟通。程序员与代码程序员之间程序员与客户n简单简单要解决的问题本身的内在复杂性,外在非必要的复杂性简单的相对性由复杂到简单的过程简单和沟通之间的相互作用 3n灵活灵活灵活是衡量那些低效编码与设计实践
2、的一把标尺程序是应该灵活,但只有在发生变化的时候才需如此灵活性的提高可能以复杂性的提高为代价沟通可以促进灵活性4编程理论编程理论原则原则n局部化影响局部化影响n最小重复最小重复n将逻辑与数据捆绑将逻辑与数据捆绑n对称性对称性n声明式表达(注解)声明式表达(注解)n变化率变化率5语言的分类语言的分类n强类型强类型VS弱类型弱类型强类型(strong typing)和弱类型(weak typing)决定了类型如何被实施或解读。很多的动态语言是强类型语言,例如:python,smalltalk。vbscript语言是一种弱类型特质的语言。”12”+3 结果:”123”类型不总是黑与白,它是具有高度争
3、议性的话题。n静态类型静态类型VS动态类型动态类型静态类型:静态类型:一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java 和 C 是静态类型语言。动态类型:动态类型:一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。6强类型和静态类型给强类型和静态类型给JAVA带来的苦恼与价值带来的苦恼与价值n让编译器有更多的信息,能够早点找出让编译器有更多的信息,能够早点找出bug。n良好的良好的IDE工具支持。工具支持。n繁琐的语
4、法。例如:变量和参数声明类型,类型转化。繁琐的语法。例如:变量和参数声明类型,类型转化。n程序代码更长,需要花更多的时间理解,维护或加强。程序代码更长,需要花更多的时间理解,维护或加强。n写程序写程序/编译周期编译周期n动态,反射风格的编程方面。(动态,反射风格的编程方面。(java反射反射API)7JAVA历史简介(一)历史简介(一)nJava既是一个完整的平台,也是一门语言。Java语言是1995年由James Gosling在Sun Microsystems公司设计,作为Java平台的组成部分之一的语言。Java平台除了语言之外,还有两个组成部分,虚拟机(JVM)和类库。nJava语言参
5、考了C语言和C+的设计,因此在代码整体风格上与它们比较类似。不过与C+相比,Java语言设计的更为小巧,简单和可靠。Java的 类型分为两种:类(class)和基本类型(primitive type),并没有C+中的struct和union类型。同时,Java还提供了boolean类型,并对布尔类型的定义和使用作出了限制。此 外,Java中也不允许开发人员进行运算符重载,但提供如synchronize等进行并发控制的语言特性。n在面向对象类型系统的设计中,Java不允许C+中的多重继承,因为许多人认为多重继承所带了许多复杂性和混乱,可谓弊大于利。不过Java允许开发人员定义“接口”,即一种“契
6、约”而不包含实现,这在一定程度上也可以带来部分多重继承的优点。8JAVA历史简介(二)历史简介(二)n总体而言,Java语言去除了C+中大量的复杂或是不安全的特性,这使的Java成为了一门灵活而强大,同时又更为小巧,简单和可靠的语言。从现在的角度看,Java语言大大降低了C+本身所带来的复杂度,让编程工作变的更为简单,具有很高的历史意义。910JAVA发布时间表发布时间表n1996年年1月月23日日 JDK1.0n1997年年2月月19日日 JDK1.1n1998年年12月月8日日 J2SE1.2n2000年年5月月8日日 J2SE1.3n2002年年2月月6日日 J2SE1.4n2004年年
7、9月月30日日 J2SE5.0n2006年年12月月11日日 JAVA SE 6n至今至今 JAVA SE 6 upate2111JDK1.5新增功能新增功能n泛型泛型n注解注解n自动拆箱自动拆箱(Autoboxing)n枚举枚举n动态参数动态参数n新的新的foreach语句语句n新的并发工具包新的并发工具包12Java SE 6新增功能新增功能n脚本语言支持脚本语言支持n大幅度提升性能大幅度提升性能n改进改进Web服务支持服务支持(JAX-WS)n支持支持JDBC4.0n设计设计JAXB到到2.0版本。(版本。(JAXB(Java Architecture for XML Binding简称
8、简称JAXB)允许)允许Java开发人员将开发人员将Java类类映射为映射为XML表示方式)表示方式)n图形界面的改进图形界面的改进13JAVA语言的缺点语言的缺点n许多框架设计用来简化许多框架设计用来简化JAVA项目开发,的确让项目开发,的确让JAVA开发者更开发者更具有生产力,但是也让学习的曲线增加,初学具有生产力,但是也让学习的曲线增加,初学java者难以负荷。者难以负荷。n编译期异常与类型检查可以提高安全性,但是让时间和语法的编译期异常与类型检查可以提高安全性,但是让时间和语法的成本增加。成本增加。nJAVA不适合表现结果性数据,这使得不适合表现结果性数据,这使得JAVA过度依赖过度依
9、赖XML,因,因此造成额外的复杂度和体制暴增。此造成额外的复杂度和体制暴增。nJAVA的许多折中设计,像基本类型,让的许多折中设计,像基本类型,让JAVA更不好学习,更更不好学习,更不好写。不好写。nJAVA比比C+动态,但是远远比不上动态,但是远远比不上smalltalk动态。动态。Java开发开发者正发现元编程,但是他们无法用够快的速度执行这样的想法。者正发现元编程,但是他们无法用够快的速度执行这样的想法。nJAVA比其他直译式语言,动态语言,编译和部署周期更长。比其他直译式语言,动态语言,编译和部署周期更长。JAVA语言的优点语言的优点nJAVA在需要的地方提供了更多的结构。例如:提供接
10、口。在需要的地方提供了更多的结构。例如:提供接口。nJAVA减少了指针的必要性,让软件更稳定,更好阅读。减少了指针的必要性,让软件更稳定,更好阅读。n垃圾收集更容易,因为垃圾收集更容易,因为JVM自动处理不用的内存。自动处理不用的内存。nJAVA允许更好的封装机制,简化了程序代码的使用。允许更好的封装机制,简化了程序代码的使用。nJAVA消除了一些问题,像嵌套的引用文件以及宏。消除了一些问题,像嵌套的引用文件以及宏。nJVM具有空前的可移植性。具有空前的可移植性。nJAVA的元模型的元模型,通过类对象来描述通过类对象来描述JAVA类型,允许我们使用相当精类型,允许我们使用相当精巧的反射编程(巧
11、的反射编程(reflective programming)。14JAVA类型系统类型系统数据类型数据类型数据类型数据类型 基本类型基本类型基本类型基本类型 引用数据引用数据引用数据引用数据类型类型类型类型 整型整型整型整型 :byte,short,int,long:byte,short,int,long浮点型浮点型浮点型浮点型:float,double:float,double布尔型布尔型布尔型布尔型:boolean:boolean字符型字符型字符型字符型:char:char数组数组数组数组类类类类 接口接口枚举枚举基本类型带来的不便基本类型带来的不便n错误的写法:错误的写法:ArrayLis
12、t list=new ArrayList();list.add(5);/cannot compile int i=(int)list.get(0);/cannot compile int hash=3.hashCode();/cannot compilen正确的写法正确的写法(jdk1.4):ArrayList list=new ArrayList();list.add(Integer.valueOf(5);int i=(Integer)list.get(0).intValue();int hash=Integer.valueOf(3).hashCode();16基本类型带来的不便基本类型带来
13、的不便nJDK1.5自动拆箱自动拆箱ArrayList list=new ArrayList();list.add(5);int i=(Integer)list.get(0);int hash=Integer.valueOf(3).hashCode();n为什么保持基本类型为什么保持基本类型吸引C+开发者 效率问题17数组带来的困挠数组带来的困挠n数组的错误初始化数组的错误初始化int numbers=1,2,3;/cannot compile n数组正确的初始化数组正确的初始化int numbers=new int1,2,3;n数组作为参数数组作为参数 函数:public void say(
14、String names)调用:say(new Stringhello,world);18数组带来的困挠数组带来的困挠nJDK1.5带来了可变参数带来了可变参数函数:public void say(String.names)调用:say(hello,world)19JDK1.5带来的枚举带来的枚举nJDK1.4public static final String readColor=red;public static final String blackColor=black;public static void printColor(String.names)printColor(readC
15、olor,blackColor);nJDK1.5枚举枚举public enum Colorred,blackpublic static void printColor(Color c)printColor(Color.red);20引用类型引用类型nFinal关键字的使用关键字的使用n函数参数的传递函数参数的传递n函数参数作为返回值(函数参数作为返回值(JAVA IO)public int read(byte b,int off,int len)throws IOException;21运算符运算符n算术运算符与逻辑运算符算术运算符与逻辑运算符n整数整数/整数结果为整数整数结果为整数 -0 -
16、0 5/3 -1n精度计算避免使用精度计算避免使用float,double.可以使用可以使用BigDecimal1.32-0.49 -0.8300000000000001 22n位运算符的使用率很低位运算符的使用率很低n表达式表达式1&表达式表达式2 如果表达式如果表达式1为为false,表达式,表达式2不会被计算。不会被计算。n使用括号来区分运算符的先后顺序使用括号来区分运算符的先后顺序(1+2)*3-523控制结构控制结构n功能偏弱的功能偏弱的switch语句。语句。Switch选择条件只能是选择条件只能是int和和char类型。类型。int number=1;switch(number)
17、case 1:case 2:nJDK1.5 foreach语句语句 24List list=new ArrayList();list.add(hello);for(int i=0;ilist.size();i+)String hello=list.get(0);System.out.println(hello);for(String name:list)System.out.println(name);25break和和 continue语句语句n相同点相同点 breakbreak除了可以用在除了可以用在switchswitch语句中之外,亦可以用于语句中之外,亦可以用于循环语句中,这时它与循
18、环语句中,这时它与continuecontinue语句一样,对循环的语句一样,对循环的执行起限定转向的作用执行起限定转向的作用n不同点不同点 continue continue 语句只结束本次循环,而不是终止整个循语句只结束本次循环,而不是终止整个循环的执行环的执行 breakbreak语句则是结束整个循环语句的执行语句则是结束整个循环语句的执行 26面向对象历史简介面向对象历史简介n对象作为编程实体最早是于1960年代由Simula 67语言引入思维。在分析式程序中,我们将真实世界的对象映射到抽象的对象,这叫做“模拟”。Simula不仅引入了“类”的概念,还应用了实例这一思想这可能是这些概念
19、的最早应用。n20世纪70年代施乐PARC研究所发明的Smalltalk语言将面向对象程序设计的概念定义为,在基础运算中,对对象和消息的广泛应用。Smalltalk的创建者深受Simula 67的主要思想影响,但Smalltalk中的对象是完全动态的它们可以被创建、修改并销毁,这与Simula中的静态对象有所区别。此外,Smalltalk还引入了继承性的思想,它因此一举超越了不可创建实例的程序设计模型和不具备继承性的Simula。n面向对象程序设计在80年代成为了一种主导思想,这主要应归功于C+。一种说法是,GUI的引入极大地推动了面向对象程序设计的发展。n90年代开始,Java语言成为了广为
20、应用的语言,除了它与C和C+语法上的近似性。Java的可移植性是它的成功中不可磨灭的一步,因为这一特性,已吸引了庞大的程序员群的投入。2728面向对象编程定义面向对象编程定义n面向对象程序设计(面向对象程序设计(Object-oriented programming,缩,缩写:写:OOP)指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Orient
21、ed Design,简称OOD)方面的知识。面向对象基本特征面向对象基本特征n数据抽象(封装)数据抽象(封装)封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流与交互!n继承继承继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化。n多态多态多态通过分离做什么和怎么做,从另一个角度将接口和实现分离。多态不但能够改善代码的组织结构和可读性,还能够创建可扩展的程序即无论在项目最初创建时还是在需要添加新功能时都可以“生长”的程
22、序。29JAVA面向对象编程面向对象编程-封装封装n函数是最小的封装单位。函数是最小的封装单位。nclass,abstract,interface。n访问级别访问级别.(public protected default privated)n静态类,静态方法。静态类,静态方法。n静态引入(静态引入(JDK1.5)n原则:原则:把可变的和不可变区分开。把可变的和不可变区分开。正确的位置上做正确的事情。正确的位置上做正确的事情。30方法设计(一)方法设计(一)n使用可以变参数使用可以变参数npublic void println(String.strs)nfor(String s:strs)nSys
23、tem.out.println(s);nn3132方法设计(二)方法设计(二)n检查参数的有效性检查参数的有效性npublic void println(String.strs)nif(strs=null)nthrow new NullPointerException();nnfor(String s:strs)nSystem.out.println(s);nn方法设计(三)方法设计(三)n返回长度为0的数组或者是集合,而不是null。n遵守普遍接受的命名惯例。n给方法取个有意义的名字。n给方法适当的有意义的注释。33对象初始化对象初始化n默认的构造函数默认的构造函数 如果你没有定义默认的构造
24、函数,那么编译的时候就生成一个默认的构造函数,并且默认调用父类的默认的构造函数。n类的属性会有默认的初始化值,而局部变量是没有的。n对象是如何初始化顺序对象是如何初始化顺序(1)从父类到子类的静态变量和静态代码块依次被初始化。(2)父类的非静态变量和非静态代码块依次被初始化,接着执行父亲 的构造函数。(3)子类的非静态变量和非静态代码块依次被初始化,接着执行子类的构造函数。34JAVA面向对象编程面向对象编程-继承继承nextends,implmentsnfinal的使用的使用n原则:原则:明确需要继承明确需要继承继承体系不予过深继承体系不予过深组合优先于继承组合优先于继承35JAVA面向对象
25、编程面向对象编程-多态多态n覆写存在的一些不容易注意到的细节覆写存在的一些不容易注意到的细节1.是否可以改变父类被覆写方法的访问权限?2.是否要抛出父类方法抛出的异常?3.返回值是否可以是父类方法返回值的子类n答案如下答案如下1.之类覆写只能扩大父类方法的访问权限,而不能缩小。2.子类覆写可以不抛出父类方法抛出的异常。3.子类可以抛出父类方法抛出的异常的子类。4.子类不能抛出父类方法抛出的异常的父类。5.子类方法的返回值可以是父类方法返回值的子类。36函数函数的重载的重载n1.方法签名只包括方法名和参数,方法的返回值和所抛出的异常是不包括在内。n2.在设计方法重载的时候要慎重考虑。37final用法总结用法总结n1.修饰类,该类不能被继承。n2.修饰方法,该方法不能被覆写。n3.修饰属性,该属性不能被重新赋值。n4.修饰方法参数,该参数不能被重新赋值。n5.对于多线程编程的意义。38推荐学习书籍推荐学习书籍n Java编程思想nEffective Javan编码大全3940谢谢 谢谢!
限制150内