1 / 180

Java 的发展历史

Java 的发展历史. 1 Java 的起源 Java 是 Sun 公司1995年正式推出的新一代面向对象程序设计语言, 特别适合于 Internet 应用程序开发, 具有平台无关性。 Java 来自于1991年 Sun 公司的一个叫 Green 的项目, 其原先的目的是为家用消费电子产品开发一个分布式代码系统, 可以把 E-mail 发给电冰箱、 电视机等家用电器, 对它们进行控制。开始, 准备采用 C++, 但 C++ 太复杂, 安全性差, 最后基于 C++ 开发了一种新的语言 Oak(Java 的前身), Oak 是一种用于网络的精巧而安全的语言。

garth-guy
Download Presentation

Java 的发展历史

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java的发展历史 1 Java的起源 Java是Sun公司1995年正式推出的新一代面向对象程序设计语言, 特别适合于Internet应用程序开发, 具有平台无关性。 Java来自于1991年Sun公司的一个叫Green的项目, 其原先的目的是为家用消费电子产品开发一个分布式代码系统, 可以把E-mail发给电冰箱、 电视机等家用电器, 对它们进行控制。开始, 准备采用C++, 但C++太复杂, 安全性差, 最后基于C++开发了一种新的语言Oak(Java的前身), Oak是一种用于网络的精巧而安全的语言。 1994年下半年, Internet的快速发展, 促进了Java语言研制的进展, Green项目组成员用Java编制了HotJava 浏览器, 触发了Java进军Internet,使得它逐渐成为Internet上受欢迎的开发与编程语言,现已发展成为一种重要的Internet平台。

  2. 2 关于Java 的大事

  3. Java风云人物

  4. Java著名产品

  5. 3 Java语言的特点 • 简单易学: 1)风格类似于C++, 基本语法与C语言类似; 2)摒弃了C++中容易引发程序错误的地方, 如指针和内存管理; 3)提供了丰富的类库。 • 面向对象:支持静态和动态风格的代码继承及重用,是完全 面向对象的, 它不支持类似C语言那样的面向过程 的程序设计技术。 • 解释执行:Java解释器(运行系统)能直接运行目标代码指令。 • 平台无关:Java源程序被编译成一种高层次的与机器无关的 byte-code格式语言, 被设计在Java虚拟机上运行。

  6. 性能优异:Java可以在运行时直接将目标代码翻译成机器指令, Sun用直接解释器一秒钟内可调用300,000个过程, 翻译目标代码的速度与C/C++的性能没什么区别。 • 分布式:Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此, Java应用程序可凭借URL打开并访问网络上的对象, 其访问方式与访问本地文件系统几乎完全相同。 • 可移植:Java应用程序可以在配备了Java解释器和运行环境的任何计算机 系统上运行, 通过定义独立于平台的基本数据类型及其运算, Java数据得以在任何硬件平台上保持一致。 • 多线程:Java提供的多线程功能使得在一个程序里可同时执行多个小任务。 多线程带来的好处是可以有更好的 交互性能和实时控制性能。

  7. 健壮:Java致力于检查程序在编译和运行时的错误。 类型检查帮助检查出许多开发早期出现的错误。 Java自已操纵内存减少了内存出错的可能性。 Java还实现了真数组, 避免了覆盖数据的可能。 • 安全:Java的安全性可从两个方面得到保证。一方面, 在Java语言里, 象指针和释放内存等C++功能被删除, 避免了非法内存操作。 另一方面, 当Java用来创建浏览器时, 语言功能和一些浏览器本身提供的功能结合起来, 使它更安全。 • 动态:Java的动态特性是其面向对象设计方法的拓展, 它允许程序动态地装入运行过程中所需要的类。

  8. 4 与Java语言相关的应用 • Java Application ( Java应用程序): 用Java语言编写的通过独立的Java解释器来解释运行的桌面应用程序(类似于其它高级语言编制的应用程序)。 • Java Applet (Java小程序): 用Java语言编写的、嵌入在HTML编写的Web页面中的非独立程序,由Web浏览器内部包含的Java解释器来解释运行,是动态、安全、跨平台的网络应用程序。

  9. JSP (JavaServer Pages, Java 服务器页): 是一种实现普通静态HTML和动态HTML混合编码的技术,是在Sun公司倡导及多个公司参与下共同建立的一种动态网页标准,实现了Web动态内容与其显示的分离,用于构建动态Web网站,JSP文件运行于服务器端,JSP的脚本语言是Java,其平台无关性使得JSP一次编写,各处运行。 • 最新应用——Java为用户推出了游戏、天气预报、地图等一系列紧俏时髦的应用,它能够帮助汽车司机避免交通阻塞,还能让公司对即将出行的销售人员进行跟踪。目前在移动通讯中被广泛使用,如手机抓捕图象、手机游戏等。

  10. 5 与Java相关的几个常见名词 • Java EE—— Java Platform, Enterprise Edition (Java 企业版) Java EE首先是一种构架,它包罗了Java的多种先进的技术,最合适使用MVC的方法来构建系统,其表现层使用JSP,控制层可以使用Servlet或Session Bean,用于实现业务逻辑,Entity Bean则对业务实体进行抽象。此外它还使用JAAS实现安全机制,JNDI用于查询资源,JDBC和JTA访问数据库和管理事务;JMS实现企业的消息处理;JavaMail实现与企业外界的联系。今年10月份将发布的最新版本为Java EE 5.0。

  11. Java SE——Java Platform, Standard Edition (Java 标准版),是Java最核心的技术。 • Java ME——Java Platform, Micro Edition (Java 袖珍版), 是一个重要的用于无线方面的 Java 平台,它从可移植的、以网络为中心的 Java 虚拟机转变而来。 • JVM——Java Virtual Machine (Java虚拟机),它通过采用一种被称之为Java虚拟机的虚拟微处理器的规范,用软件在计算机芯片内模拟出一个假芯片,然后开始运行程序,为Java程序提供统一的脱离软、硬件平台的运行环境。

  12. JDK——Java Development Kit (Java开发工具包),由Sun公司免费发行的,JDK有多个版本,大体经历过1.02、1.1.x、1.2、1.3、1.4、1.5几个系列。 • JSDK——Java Server Development Kit (Java服务器开发工具包),是JDK 的一个典型的扩展工具包。 • JDBC——Java DataBase Connectivity(Java数据库连接),是一种用于执行SQL语句的Java API(应用程序接口),可以为多种关系数据库提供统一访问,是由一组用Java语言编写的类和接口组成。

  13. Applet——Java Applet 是用 Java 语言编写的、包含在网页里的“小 应用程序”,通常被放在 Web 服务器上。当有人上网浏览时,Applet 随网页一起 下载到客户端的浏览器中,并借助浏览器中的 Java 虚拟机(JVM)运行工作。 • Servlet——Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java-enabled Web Server中。Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。 Servlet与Jsp之间的交互为开发Web服务提供了优秀的解决方案。

  14. Swing与 AWT(抽象窗口工具包)——是Java设计 GUI (图形用户界面)的基础 。 AWT设计有严重缺陷,不能满足发展的需要。 Swing是在AWT基础上发展起来的,为Java GUI编程提供了强大丰富的API和灵活的结构设计,提供了替代AWT重量组件的轻量组件,Swing 中大部分是轻量级组件。Swing 几乎无所不能,不但有各式各样先进的组件,而且更为美观易用。二者最好不要混用。

  15. EJB(Enterprise JavaBeans)—Java EE核心组件,EJB并不是一个产品。它是Java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。 Enterprise Bean 与 JavaBean 不同。JavaBean 是使用 java.beans 包开发的,它是 Java SE的一部分。JavaBean 是一台机器上同一个地址空间中运行的组件,是进程内组件。Enterprise Bean 是使用 javax.ejb 包开发的,它是标准 JDK 的扩展,是 Java EE 的一部分。Enterprise Bean 是在多台机器上跨几个地址空间运行的组件,是进程间组件。JavaBean 通常用作 GUI 窗口小部件,而 Enterprise Bean 则用作分布式商业对象。

  16. JavaScript、VBScript 、 JScript辨异 • JavaScript是由Netscape公司发明的一种Web脚本编制语言(基本语法和C语言非常类似) ,最初叫作 LiveScript,可嵌入在HTML文件中,用来处理以客户端环境为基础的动态信息,但不能访问服务器端资源, 只要浏览器支持JavaScript,用JavaScript编写的脚本就可以正确执行。尽管JavaScript采用与Java类似的语法,但二者并无直接的联系。 • VBScript是Microsoft公司开发的一种通用的Web脚本语言,其基本语法与Basic语言类似,但它只能被IE浏览器所支持。VBScript是ASP(Active Server Pages)默认的脚本语言,使用ASP可以创建和运行动态、交互的Web服务器应用程序。ASP需要Microsoft 的IIS(Internet信息服务器)的支持才可以运行。 • JScript 是Microsoft 公司推出的一种解释型的、基于对象的脚本语言, JScript 脚本只能在某个解释器上运行,该解释器可以是 Web 服务器,也可以是 Web 浏览器。 可以用JScript 来编写ASP页面。

  17. 1.1 Java的开发环境 • JDK的安装 产生如下目录结构 \bin的目录下包含义下主要文件: javac: Java编译器, 用来将java程序编译成 Bytecode java: Java编译器,执行已经转换成Bytecode的 java应用程序. appletviwer : Java解释器, 用来解释已经转换成 Bytecode的java小应用程序.

  18. 1.1 Java的开发环境 • \lib子目录 系统类库 • 设置路径 1. PATH c:\…\bin 2. CLASSPATH=. ; c:\...\lib\; c:\myclasses; 运行程序的时候必须找到相应的类,就要求设置环境变量,在我的电脑 属性 高级 环境变量 CLASSPATH 中设置 .为当前目录,加一分号可以设置其它的类目录.

  19. public class app //公共类 main方法必为公共类,便于外部访问 { public static void main(String[] args) //static意味main是类方法 { //,非对象方法,可以直接访问,是静态的不用创建对象 System.out.println ("Hello from Java: "); }//使用java.lang包的系统类out字段(类的数据成员)的println方法 }//(类的成员函数)//可以作为单行注释/*和*/则可以跨越多行 C:\>java app Hello from Java 程序的编译 C:\> javac app.java 1.2 创建第一个应用程序

  20. 前面的程序没有导入包或者类是因为编译器自动导入了java.lang包,该类构成java的基本核心语句,如果使用其它类,则必须自己导入.前面的程序没有导入包或者类是因为编译器自动导入了java.lang包,该类构成java的基本核心语句,如果使用其它类,则必须自己导入. import java.util.Date;//导入Date类 使用*可以导入所有类 public class app //两种导入都是指示位置,不影响文件大小 { public static void main(String[] args) { System.out.println (“Today= “+new Date());//创建对象 } } C:\>java app Today=Mon Aug 02 12:15:13 EDT 2000 1.3包和类的导入

  21. 前面的程序没有导入包或者类是java自己带的包或者类,java知道在哪里找相关的包或者类.但自己的类怎么处理? 下面是一个名为printer.java的文件,内有一个printer类,该类有一个print方法. package abc; public class printer { public void print() { System.out.println(“hello from java!”); } } 怎么能够在另外一个应用程序中使用这个类? 下面是使用该类的对象方法print的一个应用程序. 导入自己的类1

  22. import abc.printer;//导入printer类 public class app { public static void main(String[] args) { (new printer()).print();//这里用new操作符创建printer类的新对 } //象,并使用该对象的print方法 } 导入类如果在当前目录,则java可以自动搜索到,如果在别的位置如c:\classes的目录下则必须设置CLASSPATH环境变量,把该目录包含进去,如CLASSPATH=.;c:\classes; 导入自己的类2

  23. 创建applet 需要导入java.applet包中的 Applet类 由于paint方法是AWT的一部分,所以我们这里也导入java.awt包中的AWT类 import java.applet.Applet; import java.awt.*; public class applet extends Applet //类applet继承自Applet类 { public void paint(Graphics g) //Graphics类的 g 对象传递给paint { g.drawString ("hello from java !",60,100); //开始位置 } //用g对象的drawString方法实际绘制文本 } 1.4 创建Applet

  24. <HTML> <HEAD> <TITLE>APPLET</TITLE> </HEAD> <BODY> <CENTER> <APPLET CODE=applet.class WIDTH=200 HEIGHT=200> </APPLET> </CENTER> </BODY> <HTML> 文件名字为applet.html 可以直接显示,也可以用appletviewer查看 C:\>appletviewer applet.html 1.5 运行Applet

  25. /*将标记直接放入applet.java文件中,可以不用Web页面测试,创建/*将标记直接放入applet.java文件中,可以不用Web页面测试,创建 <APPLET // class文件后 可以用c:\>appletviewer applet.java观看 CODE=applet.class WIDTH=200 HEIGHT=200> </APPLET>*/ import java.applet.Applet; import java.awt.*; public class applet extends Applet { public void paint(Graphics g) { g.drawString ("hello from java !",60,100); } } 在代码中嵌入<APPLET>标记

  26. import java.awt.*; import java.awt.event.*; class AppFrame extends Frame //类AppFrame继承自Frame类 { public void paint(Graphics g) //Graphics类的 g 对象传递给paint { g.drawString ("hello from java !",60,100); //开始位置 } //用g对象的drawString方法实际绘制文本 } public class app { public static void main(String[] args) { 1.6创建窗口化应用程序1

  27. AppFrame f = new AppFrame(); f.setSize(200,200); f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}}); f.show(); //0代表正常退出 }// addWindowListener方法的作用是应用程序窗口关闭时, //应用程序本身也关闭 } // Java app 就可以运行了 创建窗口化应用程序2

  28. Java开发类库组成 • Java提供了丰富的标准类来帮助程序设计者更方便快捷地编写程序,这些标准类组成了类包,主要有: • java.lang java.awt • java.applet java.awt.image • java.awt.peer java.io • java.net java.util • 除了java.lang之外,其余类包都不是java语言所必须的。

  29. Java开发类库组成 • (1)java.lang • 本类包中包含了各种定义java语言时必须的类,这些类能够以其他类不能使用的方式访问java的内部。任何java程序都将自动引入这个包。其中的类包括: • Object类:java中最原始、最重要的类,每个java类都是它的子类,它实现了每个类都必须具有的基本方法。 • 基本类型包装器:Boolean, Character, Number, Double, Float, Integer, Long。 • String类:字符串类。 • Math类:数学函数的集合。 • 执行线程:类Thread, ThreadGroup, 接口Runable。 • 异常和错误:类Exception, Error, 接口Throwable。

  30. Java开发类库组成 • 运行环境:可以通过类Runtime和System访问外部系统环境。System类的两个常用功能就是访问标准输入/输出流和错误流、退出程序。 • 其他类:接口Cloneable、运行时的类等。 (2)java.applet Java Applet是Java编程的一个主要魅力,java.applet类包提供了Applet的运行机制以及一些编写Applet非常有用的方法。

  31. Java开发类库组成 (3) java.awt 本类包是各种窗口环境的统一界面(AWT代表Abstract Windows Toolkit,即抽象窗口工具包),其中的类使得创建诸如窗口、菜单、滚动条、文本区、按钮以及复选框等图形用户界面(GUI)的元素变得非常容易。 (4) java.awt.image 类包能够以独立于设备的方式加载并过滤位图图象。 (5) java.awt.peer java.awt.peer是全部awt组件的对等对象接口的集合,每个接口都提供了机器相关基本的方法,awt使用这些方法来实现GUI,而不必关心是何种机器或操作系统。

  32. Java开发类库组成 (6) java.io Java的输入/输出模式是完全建立在流的基础之上的。流是一种字节从一个地方到另一个地方的单向流动,可以把流附加于文件、管道和通信链路等。 java.io类包中定义的许多种流类通过继承的方式进行组织,其中也包括一些用来访问本地文件系统上的文件的流类。 (7) java.net java.net类包用来完成与网络相关的功能:URL、WWW连接以及更为通用的Socket网络通信。 (8) java.util java.util类包包含了一些实用类和有用的数据结构,如字典(Dictionary)、散列表(Hashtable)、堆栈(Stack)、向量(Vectro)以及枚举类(Enumeration)等。

  33. 面向对象编程 基本概念 面向对象编程就是将数据和方法封装于对象中,使每个对象半自治化,包装私有的(即纯粹内部的)数据和方法,使它们不会造成整体名称空间的混乱。然后,通过公共的(即可以从外部调用的)方法定义的良好接口,对象可以和程序的其余部分交互。 封装就是将一个需要投入很多关注的复杂系统转变为一个对象,对象在其内部处理所有工作并能够容易地概念化。 类(class)是一个模版,可以从它创建对象。可以认为类是对象的类型。 对象(object)是类的实例,这很象变量是数据类型的实例。可以把类看做对象的类型,而把对象看做类的实例。对象封装了方法和实例变量。

  34. 概念 数据成员(data member)是类中的变量,它们可以存储对象使用的数据。 对象支持实例变量(其值是此对象特有的)和类变量(其值是由这个类的对象共享的)。对象的数据成员称为实例数据成员或者实例变量。由一个类的所有对象共享的数据项目称为类数据成员或者类变量。 数据成员可以从对象外部访问,或者可以使它们位于对象的内部,以供对象之内的方法私有地使用。

  35. 方法(method)是类或者对象内置的函数。 可以有实例方法(instance method)和类方法(class method)。可以对对象使用实例方法,但是可以只通过引用类的名称来使用类方法——这里不需要对象。 通常将方法分类为:那些在类内部使用的,称为私有方法(private method);那些在类外部使用的,称为公共方法(public method);而那些由类和这个类派生出的类使用的,称为保护方法(protected method) 有两种类型的方法:类方法和实例方法。实例方法就是在对象上调用的方法。类方法直接在类上调用,不需要创建对象。 概念

  36. 概念 继承(inheritance)是从一个称为基类(base class)的类派生另一个称为派生类(derived class)的类的过程,而且可以在派生类中使用基础类的方法。(基类就是旧类,派生类是新类) 主要作用是在新类中附加你所希望添加的东西,以便使新类具有比基类更多的定制功能。 java不支持多重继承,替换方式是使用接口。

  37. 声明和创建对象 public class app { public static void main(String[] args) { String s1; //声明对象 s1=new String(“Hello from Java!”);//创建对象 String s2= new String(“Hello from Java!”);//声明并创建 char c1[]={‘H’,‘i’,‘ ’,‘t’,‘h’,‘e’,‘r’,‘e’}; String s3=new String(c1);//这里重载,参数类型和个数不同 double double1=1.23456789; String s4=String.valueOf(double1);//不用new转换成对象 String s5;//将s1中的对象引用复制到s5,实际上s1和s5指向 s5=s1; //同一个对象。改动s1中的实例数据,s5也会改变, System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println(s4); System.out.println(s5); }}

  38. 输出结果 Hello from java! Hello from java! Hi there 1.23456789 Hello from java!

  39. 声明和定义类 class printer //声明类 { public void print() //类定义是类的实际实现 { System.out.println("Hello from Java!"); }} public class app { public static void main(String[] args) { // static可将变量转变为类变量,将方法转变为类方法便于 printer printer1=new printer();//直接使用,不用创建对象 printer1.print(); //使用上面的类的对象的print方法 }} 结果 Hello from Java! 这里在同一个文件中声明和定义了两个类,printer和app。在一个文件中只有一个类可以声明为公共的,这里是app。这里文件名必须和该公共类名字相同。

  40. 上例分成两个文件问题 class printer //printer.java { public void print() { System.out.println("Hello from Java!"); }} public class app { public static void main(String[] args) { printer printer1=new printer(); printer1.print(); }} 结果 Hello from Java!

  41. 创建实例变量 class Data //声明类 { public String data_string=“Hello from Java!”;//类中存储实例变量 } public class app { public static void main(String[] args) { Data data=new Data(); String string=data.data_string;//引用实例变量 System.out.println(string); } } 结果 Hello from Java!

  42. 访问说明符的说明 声明类成员为public时,在你程序的任何地方都可以访问它。 声明为private,它只在成员所在的类之内能够访问。 声明为protected,它对于当前类,在同一包内的其它类以及从这个类派生出的类是可用的。 如果没有使用访问说明符,类成员的默认访问是对于成员所在的类,从这个类派生出的在同一包中的类以及同一包中的其它类可见。 位置 private 未指定 protected public 同一类 x x x x 同一包中的子类 x x x 同一包中的非子类 x x x 另一个包中的子类 x x 另一个包中的非子类 x

  43. 设置变量访问 class Data //声明类 { private String data_string="Hello from Java!";//类中存储实例变量 } public class app { public static void main(String[] args) { Data data=new Data(); String string=data.data_string;//引用实例变量 System.out.println(string); } } 由于访问说明符的变化导致编译错误

  44. class data { public static int intdata=0;//名为intdata的类数据变量 } public class app { public static void main(String[] args) { data a,b; a=new data(); b=new data(); a.intdata=1;// 设置为1,则结果b.intdata值为显示 System.out.println("The value of b.intdata = " +b.intdata); } } 结果 The value of b.intdata = 1 创建类变量

  45. public class app { public static void main(String[] args) //String对象数组为参数 { System.out.println("Command line arguments..."); for(int loop_index=0;loop_index<args.length;loop_index++) {System.out.println("Argument "+loop_index+" = "+ args[loop_index]); } } } c:\>java app a b c d //传递给main的数组的四个元素 Command line arguments… Argument 0 = a Argument 1 = b Argument 2 = c Argument 3 = d 传递给main的命令行参数

  46. class calculator { int addem(int op1,int op2) {return op1+op2;}//使用return语句 } public class app { public static void main(String[] args) {calculator calc=new calculator(); System.out.print("addem(2,2)="+calc.addem(2,2)); } } 结果 addem(2,2)=4 从方法返回值

  47. class calculator { static int addem(int op1,int op2)//关键字static使方法成为类方法 {return op1+op2;} } public class app { public static void main(String[] args) { System.out.print("addem(2,2)="+ calculator.addem(2,2)); } // 直接调用类方法 } 上面并没有创建对象,当然创建对象可以使用对象方法。 创建类方法

  48. 为类创建构造器:在类中加上一个和这个类同名的方法,不需要任何访问说明符或者返回类型。 class data { private String data_string; data() //无参数构造器 {data_string ="Hello from Java!";} public String getData() {return data_string;} } public class app { public static void main(String[] args) {System.out.print((new data()).getData()); } } //结果 Hello from Java! 创建构造器

More Related