面向对象程序设计主讲:房道伟daowei_fang@163.com第1章概述1.1历史沿革1.2Java语言的特点1.3Java语言与面向对象编程1.4Java语言与因特网1.5Java程序开发工具第1章Java语言概述(续)1.6Java应用程序和Java小应用程序1.7Java程序书写规范1.8Java虚拟机原理1.1历史沿革SunGreenJamesGosling(Java之父)OakJava,1995年5月23日1.1历史沿革(续)1996年初,Java1.0,JDK1.01998年12月,Java1.2(Java2)JavaSE,JavaEE,JavaME1.1历史沿革(续)Java1.5(Java5.0)对Java2作了重大改进,特别是添加了泛型类型,增强了多线程编程能力等。2006年底,发布了Java6。2006年,为了避免语言命名与语言版本号给人们造成的困惑,Java2这一命名被弃用。2010年Oracle收购Sun1.2Java语言的特点简单性面向对象分布性解释型健壮性安全性1.2Java语言的特点(续)体系结构中立可移植性高性能多线程动态性简洁性Java由C++衍生而来,其语言风格与C++十分类似。Java比C++简单,抛弃了C++中一些不是绝对必要的东西,如头文件、指针、结构、联合、隐式的类型转换和操作符重载等。安全性Java语言中,一切对内存访问都是通过对象实例变量实现的,防止用户在网络系统或分布系统环境下使用特洛伊木马等手段访问对象的私有成员。Java语言不支持C的内存单元指针,通过符号指针来引用内存,符号指针由Java运行系统在运行时具体解释为实际的内存地址。Java语言提供了内存管理机制,有一个自动搜集“内存垃圾”程序。Java在字节码的传输过程中使用了公开密钥加密机制(PKC)。而在运行环境提供了四级安全性保障机制:-字节码校验器-类装载器-运行时内存布局-文件访问限制动态性Java程序基本组成单元是类,在运行中Java的类是动态装载的。只要Java在分布式系统中动态地维护应用程序及其支持类库间的一致性,就可以避免像C++类库升级,相应的应用程序都需重新编译的问题。Java语言滞后联编机制充分利用面向对象编程风格的优点,真正做到即插即用的模块功能。可移植性用Java语言编写的程序可以不经任何改动就可以在不同的硬件或软件平台上执行,即Java编译器所生成的可执行代码是基于一种抽象的处理器──Java虚拟机(JavaVirualMachine)实现的。Java程序的运行,首先要经过编译,再进行解释执行,这两个过程实现的。Java编译器所生成的代码叫做字节码指令代码,它与硬件体系结构无关。在运行过程中,则由针对运行系统硬件体系结构的Java解释器,将字节码转换成该系统相对应的指令。其它特性高性能性虽然Java是解释执行语言,但它编译生成的字节码与机器码十分接近,它的执行效率非常接近于C或C++生成的机器码执行效率。多线程它自身的多线程性,可以利用系统的空闲执行一些常规处理;提供对多线程的语言级支持,提高程序执行效率。分布式Java是一个适用于网络的语言。它提供的类库支持TCP/IP协议,可以通过URL地址访问网络上其它的对象。1.3Java语言与面向对象编程封装–类–对象继承–父类与子类–单继承与多继承多态–方法覆盖、接口实现–动态绑定面向对象:类、对象和实体计算机逻辑的实现对象类抽象实例化映射抽象抽象数据类实体计算机世界概念世界现实世界Java语言具有真正的面向对象语言的特点,除了数值、布尔和字符三种基本的数据类型外,其它类型都是对象。它支持封装、多态性和继承。-封装就是将对象内的数据和代码联编起来,形成一个对象;-多态性是指一个接口,有多个内在实现形式表示;-继承是指某一对象直接使用另一对象的所有属性和方法的过程,Java只支持单重继承,但支持接口,一个类可以实现多个接口。利用接口可以得到多继承的优点,又没有多继承混乱、复杂的问题。面向对象:以电灯泡为例在这个例子中,类名为Light,可向Light对象发出的请求包括打开、关闭、变亮和变暗。通过Lightlt简单的说明了一个名字或变量(lt),即为Light对象创建了一个句柄;用new关键字创建对象,即实例化对象。Lighton()off()brighten()dim()类名方法Lightlt=newLight();lt.on();面向对象:多态性Circlec=newCircle();Trianglet=newTriangle();Linel=newLine();doStuff(c);doStuff(t);doStuff(l);几何形状draw()erase()直线draw()erase()矩形draw()erase()圆draw()erase()voiddoStuff(shapes){s.erase();//…s.draw();}动态绑定(后期绑定)1.4Java语言与因特网Java语言是优秀的因特网编程语言。Java语言能开发客户端小应用程序。JavaWeb。1.5Java程序开发工具Eclipse、NetBeans、JBuilderJCreatorJavaStandardEditionDevelopmentKit(JDK)1.5.1安装和配置JDK下载JDK–安装JDK配置JDK–PATH–CLASSPATHJDK的参数设置在窗口模式下,也可以配置path参数–在“我的电脑”点右键,选择“属性”–在“高级”标签里面点环境变量JDK的参数设置现在就可以进行环境变量的编辑了JDK的参数设置对classpath的设置–classpath是Java的参数,告诉Java虚拟机在哪个目录装载相关的类–设置方法同path1.5.2JDK中的关键程序编译程序javac解释程序javaapplet查看程序appletviewerJava编译器:javacJava编译器本身就是一个Java语言编写的应用程序。它与其它的编译语言不同,它的作用是把Java源程序(.java文件)编译生成Java字节码(.class文件)。这种字节代码与机器代码类似,却不针对具体的机器。编译格式为:javac[options]source_filejavacsource_name.javaoptions有如下选项:-classpath路径;路径;...:指定javac在编译过程中,查找出现的某个类定义搜索路径表,路径间以“;”分隔;-d目录;目录;...:指定类文件存放的路径,目录间由“;”分隔;Java解释器:java编译后的字节代码是不能直接在机器上运行的,是通过Java解释器java解释执行。其调用格式为:java[interpreteroptions]classname[programarguments]其中,interpreteroptions有如下选项:-classpathpath:设置定义类搜索路径;classname是类名,是扩展名为*.class的文件的*部分,即要执行的程序。Java解释器:java(续)在要执行的程序中必须包含一个main()方法,程序的执行是从main()开始的。programarguments部分,是输入保存在main()方法中的args[]数组中的参数,main()方法格式如下:publicstaticvoidmain(Stringargs[])Java解释器实质上是字节码解释器,指定一个类文件名,它会自动装载程序中需要的类文件,通过检查机制确定一个类是否合法,确保解释执行的字节码不会破坏Java语言的约定。小应用程序观察器:AppletViewerapplet是用Java编写的一类小程序,它能在小应用程序观察器AppletViewer或在支持Java的浏览器上执行。小应用程序观察器的作用是下载HTML文档中的applet,其调用格式为:appletviewer[-debug]urls其中,-debug为可选项,它的作用是小应用程序观察器将由JDb(Java调试器)内部启动,以便可以调试被HTML文档中所引用的applet。urls为Internet网上资源的名称和地址标识表。1.6Java应用程序Java有两类应用程序:一类是由Java解释器控制执行的Javaapplication;Javaapplication是可独立运行的Java程序,它由一个或多个类组成,其中必须有一个类中定义了main()方法,main()方法就像C语言的main函数一样是Javaapplication运行的起始点。另一类是嵌入到Web页面中,由Java兼容浏览器控制执行Javaapplet。application程序编写与运行步骤(一)1.首先创建一个Java的application源程序(.java文件)为创建一个名为HelloWorldApp.java的文件,则可在任何字符编辑器上输入并保存下列Java源程序代码:importjava.io.*;classHelloWorldApp{publicstaticvoidmain(Stringargs[]){System.out.println(Hello,World!);}}其实质是创建一个名为HelloWorldApp类,并把它保存在与它名字相同的文件中(即HelloWorldApp.java文件)。application程序编写与运行步骤(二)2.第二步是对已创建好的Java源程序(.java)进行编译。该步骤是用Java编译器对Java源程序(.java)进行编译生成对应的字节代码程序(.class)。如果编译成功,会得到一个有相同文件名的带.class扩展名的字节码文件。其命令格式如下:javacHelloWorldApp.java如果编译中不出现错误,将会得到一个名为HelloWorldApp.class文件。编译选项使用的是缺省方式。application程序编写与运行步骤(三)3.最后就可以解释执行已编译成功的字节码程序(.class)用Java解释器java对Java字节码程序(.class)解释执行。在上例得到了HelloWorldApp.class文件,现在可以用java解释执行了,其命令格式如下:javaHelloWorldApp运行的结果,将会在标准输出设备上输出:Hello,World!Java解释器在解释执行时,解释处理的是类名,而不是文件名,所以在解释器java后面跟随的是类名,而不能写成文件名的形式(HelloWorldApp.class)。其选项也使用的缺省方式。例1-1简单的Java应用程序编译运行源代码applet程序编写与运行步骤(一)1.创建Java的applet源程序(.java文件)用字符编辑器输入相应的applet的源程序,它的程序中并不需要一个main()方法必须有一个类是系统类Applet的子类,就是必须有一个类的类头部分以extendsApplet结尾。其中,Applet是父类名,它可以是系统类,或者是其它已存在的用户自定义类;extends是关键字,代表新定义的类是父类的子类。applet程序编写与运行步骤(一)续1.创建Java的applet源程序(.java文件)下面的例子是创建并保存在HTML目录中的一个文件名为HelloJavaApp.java的applet小应用程序。importjava.awt.Graphics;importjava.applet.Applet;publicclassHelloJavaAppextendsApplet{publicvoidpaint(Graphicsg){g.drawString(Hello,JavaAppletWorld!,50,25)