资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,Java程序开发,java语言概述,重庆大学计算机学院,Java语言概述,Java语言发展简史,Java的特点(为什么要学习java),Java与C的比较,Java运行环境(三个实现机制),Java开发环境,Java程序分类与举例,Java程序结构,Java程序编码规范,JDK文档,2,CSC,CQU,Java发展简史,Java前传(19911995),Java的幼年时期(19951998),Java的青少年时期(19982004),Java的壮年时期(2004至今),1991年,1995年,1998年,2004年,3,CSC,CQU,Java前传-1,1991,年,当初Sun公司的,JamesGosling,领导开,展了一个名为“Green”的项目,主要是为家用电子产品开发一个分布式代码系统,开拓,消费类电子产品市场,发明OAK语言,后改名为Java,希望用于,控制,嵌入在有,线电视交换盒、PDA等的微处理器.,17个月后,即1993年,整个系统完成了,但是,,交互式电视和PDA市场开始滑坡,,该项目没有取,得成功,。,4,CSC,CQU,Java前传-2,转机,新发明的Java语言获得了sun的总裁McNealy的赏识,1994年下半年,Internet迅猛发展,工业界对适合在网络,异构环境下使用的语言有一种非常急迫的,需求,JamesGosling,决定改变Green项目的发展方向,对Java语,言进行了改造,1995年编写了互动性及强的Applet程序,从此就乘着互联网的快车迅猛发展,5,CSC,CQU,Java的幼年时期(19951998),1995年5月23,日在SunWorld95大会上,正式,发布,Java和HotJava浏览器。,有很多公司先后获得了Java许可证,如Netscape,,Oracle等,Sun也成立了专门的部门JavaSoft,1996,年1月23日发布了,JDK1.0,,包括开发环境和,运行环境,1997,年2月18日发布了,JDK1.1,,增加JIT(即时编,译)编译器,提升了性能。,受硬件环境和技术原因,,应用领域有限,。,6,CSC,CQU,Java的青少年时期(19982004),1998年,Java已经走过了3个年头,开始走出,摇篮,去独闯世界了,1998,年12月4日,发布了JDK1.2,标志Java2,时代的开始,Java发生了革命性的变化,1999年,被分成了JavaSE,JavaEE,JavaME,三大块,提供了丰富的API(JSP,Servlet,,EJB等),走向了,企业级计算,2000年5月8日,又发布了JDK1.3,在此基础,上,应用服务器得到了广泛的应用,2002,年,发布了JDK1.4,性能有了质的飞跃,,很多大公司都参与了进来,如IBM,HP,,Oracle,Adobe,Applet,DEC,Toshiba,,Microsoft,7,CSC,CQU,Java的壮年时期(2004至今),至此,Java对一些高级的语言特性(如泛型、增强,的for语句)不支持,2004,年10月,Sun发布了JDK1.5(外号叫Tiger),,增加了易用性和新语言特性,产品版本号改为了,5.0,增加了新的API(如并发)和更新了企业级规,范(如EJB3,JSF等)。,2006年,,发布了JDK6(外号“,野马,”),提高了,性能、易用性。,2008年又发布了,JavaFX,,Java又回到了“,桌面”,2011年发布JDK7.0,增强多核并行计算,,开源,。,2014年3月发布java8.0,引入闭包,进一步增强并,行计算,提供了更高的开发效率。,8,CSC,CQU,2015年8月份编程语言排行榜,Gosling,11,CSC,CQU,Java平台-不断扩展的计算平台,桌面计算:JavaPlatform,StandardEdition,企业计算:JavaPlatform,EnterpriseEdition,嵌入计算:JavaPlatform,MicroEdition,JAVAEEJAVASEJAVAME,JAVASE目前的版本是8,12,CSC,CQU,不同版本之间的关系,13,CSC,CQU,android,CSC,CQU,Java的基本特点-1,1.,简单,Java的风格类似于C+,因而对C+程序员而言非常容,易掌握Java编程技术,更简洁优美(,引起了一些同学的困惑,),Java摒弃了C+中容易引发程序错误的地方,如指针操,作和内存管理,2.,面向对象,在Java中任何东西都是对象,因此,重点集中在数,据以及对数据的操作方法,完全面向对象(分析问题、解决问题),15,CSC,CQU,Java的基本特点-2,3.,分布式,Java提供了包容广泛的API库,可处理像HTTP和FTP这样,的TCP/IP协议。Java应用程序可通过一个特定的URL来,打开并访问对象,就像访问本地文件系统那样简单,直,接支持Socket编程、RMI,4.,健壮性,Java在编译和运行程序时都要对可能出现的问题进行检,查,它提供自动垃圾收集来进行内存管理,面向对象的异常处理机制,16,CSC,CQU,Java的基本特点-3,5.,安全,Java语言提供的安全,编译器提供的安全,类加载器(划分名称空间,装载类),字节码校验器(代码符合JVM规范、代码不破坏系统完,整性、代码不会引起操作数栈上溢或下溢、所有操作,代码的参数类型的准确性、无非法数据转换(整数到指,针的转换),6.,解释执行,编译器javac将处理.java源文件生成类文件,类文件可通过名称为java的加载实用程序解释执行,,将Java字节码转换为机器可执行代码。,17,CSC,CQU,Java的基本特点-4,7.,体系结构中立,Java程序被编译成一种与体系结构无关的字节代码,只要安装了Java虚拟机,Java程序可以在任意的处理器,上运行,应用程序层,Java应用程序,Java应用程序,Java应用程序,Java平台层,Java虚拟机,Java虚拟机,Java虚拟机,操作系统层,UNIXLinux,Windows,RTOS,硬件层,SPARC,X86,MIPSPPC,18,CSC,CQU,Java的基本特点-5,8.,可移植性,源代码级(数据类型等,编译规则),目标代码级,9.,高性能,通过JIT编译器首先将字节码编译成原生代码,将结果,缓存下来,然后在需要时调用它们。,(启动时比较慢,自动内存管理),GoogleAndroid虚拟机进一步优化字节码,19,CSC,CQU,Java的基本特点-6,10.,多线程,Java语言内置支持多线程的功能,Java类库提供了Thread类,11.,动态,Java自身的设计使它适合于一个不断发展的环境,在Java类库中可以自由地加入新的方法和实例变量而不,会影响用户程序的执行,执行的动态性,根据需要载入,20,CSC,CQU,Java与C的比较,1.,全局变量,2.,无条件转移指令,指针,3.,4.,内存管理,5.,数据类型的一致性,6.,类型转换,7.,头文件,8.,结构和联合,9.,10.,面向对象的特性,预处理,21,CSC,CQU,Javavs.C+性能,vs.C+性能,23,CSC,CQU,Java程序的运行环境(JRE),Java是解释执行的高级编程语言,编译,执行,编译型源程序连接可执行程序EXE,操,作,系,统,裸,解释,执行,机,编译,解,Java源程序,字节码程序,释,器,.java,.class,Java虚拟机,24,CSC,CQU,JDK、JRE、JVM关系,JDK,Java开发工具,辅助程序,Java.exe,javac.exe等,JRE(JDK的一个子目录),JavaAPI,Jvm.dll,其他*.dll,25,CSC,CQU,Java的三个实现机制,1.,Java虚拟机(JVM),2.,垃圾收集机制(,GC,),3.,代码安全性检测,26,CSC,CQU,Java虚拟机(5-1),在一台计算机上由软件模拟的假想的计算机。,基于下层的操作系统和硬件平台,可以在上,面执行Java的字节码程序。,Java程序的代码存储在class文件中(也称为,字节码文件)。,Java编译器针对Java虚拟机产生class文件,,因此是独立于平台的。,Java解释器负责将Java程序的代码在特定的,平台上运行。,27,CSC,CQU,Java虚拟机(5-2),Java虚拟机的建立需要针对不同的软硬件平台做专,门的实现:,应用程序层,Java应用程序,Java应用程序,Java应用程序,Java平台层,Java虚拟机,Java虚拟机,Java虚拟机,操作系统层,UNIXLinux,Windows,RTOS,硬件层,SPARC,X86,MIPSPPC,28,CSC,CQU,Java虚拟机(5-3),Java虚拟机定义了:,指令集,寄存器集,类文件结构,堆栈,垃圾收集堆,内存区域,29,CSC,CQU,Java虚拟机(5-4),Java虚拟机的执行过程有三个典型特点:,1.,多线程:JAVA虚拟机支持多个线程的同时运行,,这些线程独立地执行JAVA代码,处理公共数据,区和私有栈中的数据。,动态连接:JAVA程序之所以适合在网络上运,行,一个重要原因是JAVA虚拟机的动态连接特,2.,性。,例外处理:JAVA虚拟机提供了可靠的例外处,理(或叫异常处理)。,3.,30,CSC,CQU,Java虚拟机(5-5)-,实时编译器,使用“实时(JustInTime)”,编译器,也称为JIT编,译器。可以提高Java代码的执行速度。,SUN公司在Java2发行版中提供了JIT编译器,JIT,编译器是Java虚拟机的一部分。,JIT的主要用途是将字节码指令集转换为针对某一特,定微处理器的机器代码指令。,31,CSC,CQU,自动垃圾收集(GC),在其他语言中,由程序员负责无用,空间的回收,如C+;,Java语言提供了一个系统级线程对,内存使用进行跟踪,定期检测出不,再使用的内存,并自动回收。,32,CSC,CQU,垃圾收集2-1,Java虚拟机使用两个独立的堆内存,分别用于,静态内存分配和动态内存分配。,其中一个是非垃圾收集堆内存,用于存储所有类定,义、常量池和方法表。,另一个堆内存再分为两个可以根据要求往不同方向,扩展的小块。,用于垃圾收集的算法适用于存放在动态堆内存,中的对象。,33,CSC,CQU,垃圾收集2-2,垃圾收集器将在收集对象实例之前调用finalize,()方法。,即使显式调用垃圾收集(System.gc()方法,它,也不能保证立即运行。,垃圾收集线程的运行优先级很低所以可能经常会,被中断。,34,CSC,CQU,代码安全性,字节码的运行要经过三步:,1.,加载代码:由classloader完成;,2.,校验代码:由bytecodeverifier完,成;,3.,执行代码:由runtimeinterpreter,完成。,35,CSC,CQU,Java运行时环境,编译时,运行时,.java,类加载器,(源代码),网络,字节码校验器,解释器,JIT代码,生成器,.class,(字节码),硬件,36,CSC,CQU,Java应用程序接口(JavaAPI),基本部分:对象,字符串,线程,数组,输入和,输出,系统属性,日期与时间等。,Math,反射,集合框架,并发,Jar,JAXP,,JDBC,AWT,Swing,多媒体,Java2D,Applet,网络:URLs,TCP和UDP套接字,IP地址。,国际化:帮助世界各地用户编写本地化的程序。,安全性:包括电子签名、公用/私用键字管理、访,问控制和认证。,软件组件:即JavaBeans,可插入到现存的组件,中.,对象序列化:通过远程方法调用(RMI)维持对,37,象的持久性和通讯。,CSC,CQU,Java的开发编辑环境,JDK是有助于程序员开发Java程序的Java开发,工具包包括:,开发类(Lib),编译器(javac.exe),Java运行时环境(JRE),解析器(java.exe),运行类,动态链接库,38,CSC,CQU,JDK(JRE)下载和安装,IDEA(14.1),IBMRational系列开发工具,42,CSC,CQU,常见的Java产品类型,桌面应用程序,EclipseNetBeans等开发工具,Applet,在浏览器中执行,jdk提供了很多例子,Web应用程序,基于网络的应用程序,ICBC网上银行,电子商务,应用最广的就是这一块,应用服务器,使用java技术提供服务的软件,一般是web程序,中间件,组件的,运行环境。,Tomcat,Resin,Websphere,Weblogic等,数据库,Oracle,DB2,,Cloudscape,HSQL等。,嵌入式:J2MEAndroid,43,CSC,CQU,Java程序分类,JavaApplication,以,main(),方法作为程序入口,由Java解释器加载执行。,JavaApplet,没有main(),方法作为程序入口,由浏览器或,appletviewer加载执行。,JavaServlet(JSP),由服务器调用,Service,()方法执行,EJB,J2ME等,44,CSC,CQU,JavaApplication程序基本结构,import语句,class,主类名称,publicstaticvoidmain(Stringargs),方法体,45,CSC,CQU,Java应用程序(Application)举例,publicclassHelloWorldApp,publicstaticvoidmain(Stringargs),System.out.println(HelloWorld!);,46,CSC,CQU,HelloWorldApp应用程序分析,main()方法,JavaApplication程序的入口是,main(),方法。它有,固定的书写格式:,publicstaticvoidmain(Stringargs),除了这个,没有其他形式。注意辨别,47,CSC,CQU,HelloWorldApp应用程序分析,程序内容,由方法体实现程序要完成的功能,方法,体由一条条语句组成,本例中只有一条,语句:,System.out.println(HelloWorld!);,48,CSC,CQU,HelloWorldApp应用程序分析,注释,与C+相同,一行中/,/*,后的内容为注释,,和*/,中的内容也是注释,例如:,publicclassHelloWorldApp/公共类,publicstaticvoidmain(Stringargs),/*这是,主方法*/,49,CSC,CQU,JavaApplication的编译,在命令行中使用Javac命令,例如:,C:java,javacHelloWorldApp.java,源文件名为HelloWorldApp.java,注意:,文件,名必须与公共类名相同,;由javac编译器编译源程序,,产生字节码文件(.class文件)。本例中产生,HelloWorldApp.class文件。,50,CSC,CQU,JavaApplication的运行,在命令行中使用Java命令,例如:,C:java,javaHelloWorldApp,此命令将启动Java虚拟机,,由java解释器解释执行。,51,CSC,CQU,Java小应用程序(Applet)举例,importjava.awt.Graphics;,importjava.applet.Applet;,publicclassHelloWorldAppextendsApplet,publicStrings;,publicvoid,init(),s=newString(“Hello,World”);,publicvoid,paint(Graphicsg),g.drawString(s,25,25);,52,CSC,CQU,HelloWorldAppApplet结构分析,类定义,所有的JavaApplet也都是类(class),,而且必须是,Applet,类的子类;用关键,字extends来实现继承:,publicclassHelloWorldApp,extendsApplet,53,CSC,CQU,HelloWorldAppApplet结构分析,方法定义,在JavaApplet中没有main()方法,这,是JavaApplet与JavaApplication之,间的主要区别之一。,Applet类实现了,许多方法,构造了一个窗口程序的主,要框架,,用户只须重写所需的方法即,可,系统将自动调用,例如init(),,start(),stop()等方法。,54,CSC,CQU,HelloWorldAppApplet结构分析,类库支持,程序中用到了类库中的一些方法,因,此必须在程序中进行声明。,在Java中,,用import来输入包或类,,本例中便输,入了java.awt.Graphics和,java.applet.Applet类:,importjava.awt.Graphics;,importjava.applet.Applet;,55,CSC,CQU,编译JavaApplet,在命令行中使用Javac命令,例如,C:javajavacHelloWorldApp.java,源文件名为HelloWorldApp.java,,注意:文件名必须与公共类名相同;,由javac编译器编译源程序,产生字节,码文件(.class文件)。本例中产生,HelloWorldApp.class文件。,56,CSC,CQU,运行JavaApplet,JavaApplet不能直接执行,需要编写HTML文,件,把Applet嵌入其中,例如编辑example.html,文件:,57,CSC,CQU,运行JavaApplet,用appletviewer来运行,在命令行,中敲入如下命令:,C:javaappletviewerexample.html,在支持Java的浏览器上运行,例如,在IE或Netscape中浏览,example.html文件,58,CSC,CQU,Java程序结构,命名,如果.java文件包含一个public类,它必需按该类名,命名。,类个数,一个源文件中最多只能有一个public类。其它类的,个数不限。,59,CSC,CQU,Java程序结构,结构,package语句,import语句/0或多个,必须放在所有类定义之前,publicclassDefinition/0或1个,/0或1个,必须放在文件开始,/文件名必须与该类的类名完全相同,classDefinition,interfaceDefinition,/0或多个,/0或多个,60,CSC,CQU,Java程序结构示例,1.,package,javacqu.helloworld;,import,java.awt.*;,import,javacqu.newcentury;,publicclass,HelloWroldApp/01个,class,TheFirstClass,class,TheSecondClass,2.,3.,4.,5.,6.,7.,8.,interface,TheFirstInterface,9.,61,CSC,CQU,package语句,包对应于文件系统中的目录,目的是把编译生产,的.class文件放入该目录,例如:,packageedu.cqu;,对应于目录“$classpath,educqu,”,如果,“,educqu,”不存在,则创建该目录,例如:,C:javajavac-dc:java,HelloWorldApp.java,则生成的HelloWorldApp.class文件将放在,“c:java,educqu,”中,62,CSC,CQU,package语句,如果程序中没有package语句,或者有,package语句但是在编译时不用-d选,项,则生成的.class文件放入当前目录.,一般叫做“defaultpackage”,63,CSC,CQU,import语句,在程序中用到了标准类库或自定义包中的类,需要用,import语句来声明.可以声明导入一个类,例如:,importjava.util.Date;,但是需要在,环境变量,中设置类路径:,classpath=/usr/lib/jvm/java-8-jdk/lib/tools.jar;,或者在开发环境中设置构建路径,也可以声明导入一个包的所有类:,importjava.util.*;,理解classpath,64,CSC,CQU,Java编码规范,包名:全小写,一般为名词,如:,packageedu.cqu,类名:首字母大写,每个单词的首字母大写,如:,classHelloWorldApp,接口名:同类名,如:interfaceAccountBook,方法名:一般为动词,小写字母开头,每个单词的首,字母大写,如:balanceAccount,变量名:一般为名词如length,bigMouse,常量名:基本类型的常量名全大写,如:,HEAD_COUNT,65,CSC,CQU,简单Java程序举例1,从控制台读入数据,66,CSC,CQU,代码1(传统版),1.,importjava.io.*;/引入该程序需要的类所在的包,2.,publicclassSimpleInput,3.,publicstaticvoidmain(Stringargs)throwsIOException,4.,Strings;,5.,BufferedReaderir=newBufferedReader(,6.,newInputStreamReader(System.in);,7.,s=ir.readLine();,8.,System.out.println(Inputvalueis:+s);,doubled=Double.parseDouble(s);/将s转换成double型,9.,10.,System.out.println(Inputvaluechanged,11.,afterdoubled:+Math.sqrt(d);,12.,13.,67,CSC,CQU,代码2(改进版),在JDK5.0中提供了java.util.Scanner类,可以直接从输入流读,取简单数据。例如,1.,importjava.util.Scanner;,2.,publicclassTestScanner,3.,publicstaticvoidmain(Stringargs),4.,Scannercin=newScanner(System.in);,5.,inta=cin.nextInt(),b=cin.nextInt();,6.,System.out.println(a+b);,7.,System.out.printf(+Math.PI);,8.,System.out.format(%4d%4d,a,b);,9.,System.out.format(Piisapproximately%f,Math.PI);,10.,11.,68,CSC,CQU,简单Java程序举例2,从m个数中抽出n个数,试计算中奖的概率。该例演,示如何从可视化组件输入数据并转换成整形数据,,然后从命令窗口输出数据。,69,CSC,CQU,代码,/Proba.java,1.,importjavax.swing.*;,2.,publicclassProba,3.,publicstaticvoidmain(Stringargs),4.,Stringinput=,JOptionPane.showInputDialog(你希望抽取多少个数?);,5.,6.,intk=Integer.parseInt(input);,7.,input=JOptionPane.showInputDialog(“一共有多少个数?,);,8.,intn=Integer.parseInt(input);,9.,intresult=1;,10.,for(inti=1;i=k;i+),11.,result=result*(n-i+1)/i;,12.,System.out.println(你中奖的几率是1/+result+);,13.,14.,15.,16.,System.exit(0);,70,CSC,CQU,JavaAPI文档1,71,CSC,CQU,JavaAPI文档2,72,CSC,CQU,JavaAPI文档3,选择,包,可查看相应帮,助,选择包中的,接口或类,73,CSC,CQU,
展开阅读全文