73
Java 语语语 WWW 语语 语语语语 语语语 语语语语88078549-8219 E-mail: [email protected]

主讲教师:陈小冬 联系电话:88078549-8 219 E-mail: cxd@zjtvu

Embed Size (px)

DESCRIPTION

Java 语言与 WWW 技术. 主讲教师:陈小冬 联系电话:88078549-8 219 E-mail: [email protected]. 第1讲 Java 入门. 课程目标 什么是 Java? 开始 Java 程序设计 Java 数据类型与运算符 Java 控制语句. (一)课 程 目 标. 在本课程中你将学到的内容 Java applications and applets 基本数据类型( Primitive data types) 流程控制( Java control flow) 方法( Methods) - PowerPoint PPT Presentation

Citation preview

Java 语言与 WWW 技术 主讲教师:陈小冬

联系电话: 88078549-8219

E-mail: [email protected]

第 1讲 Java入门

课程目标什么是 Java?

开始 Java 程序设计Java 数据类型与运算符Java 控制语句

在本课程中你将学到的内容 Java applications and applets

基本数据类型( Primitive data types )流程控制( Java control flow )方法( Methods )面向对象程序设计( Object-oriented programming )Core Java classes (Swing, exception, internationalization, multithreading, multimedia, I/O, networking)

(一)课 程 目 标

你将学会 编写 applications and applets

开发图形界面应用程序编写简单的项目(多媒体、网络)理解 Java 编程思想

(二)什么是 Java?

Java 历史Java 特点Java 开发工具

•Java历史

• James Gosling “Green” 项目 • Oak 语言——网络程序语言• 与 Oak 相配合的浏览器—— WebRunner ,后更名为 HotJava

• Java, May 20, 1995, Sun World

•Java特点 • 简单 simple

• 面向对象的 object-oriented• 分布式 distributed• 解释型 interpreted• 健壮 robust• 安全 secure• 结构中立 architecture-neutral• 可移植的 portable• 高效 high-performance• 多线程 multithreaded• 动态的 dynamic

•简单 simple( KISS )

•Java的风格类似于 C++,因而 C++程序员是非常熟悉的。从某种意义上讲, Java语言是 C 及C++语言的一个变种,因此, C++程序员可以很快就掌握 Java编程技术。•Java摒弃了 C++中容易引发程序错误的地方,如指针和内存管理。•Java提供了丰富的类库。

C++ like ; no point ; auto memory arrangement

Java 语言的设计完全是面向对象的,它不支持类似 C 语言那样的面向过程的程序设计技术。

Java 支持静态和动态风格的代码继承及重用。单从面向对象的特性来看, Java 类似于SmallTalk ,但其它特性、尤其是适用于分布式计算环境的特性远远超越了 SmallTalk 。

•面向对象的 object-oriented

Java 包括一个支持 HTTP 和 FTP 等基于 TCP/IP 协议的子库。因此, Java 应用程序可凭借 URL 打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。为分布环境尤其是 Internet 提供动态内容无疑是一项非常宏伟的任务,但 Java 的语法特性却使我们很容易地实现这项目标。

•分布式 distributed

internet

Java 字节码Byte code

网络传输

Java 平台Java VM

Java API

硬件工作平台

•健壮 robust

Java 致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。 Java自已操纵内存减少了内存出错的可能性。 Java 具有实时异常处理的功能,强制程序编写处理异常的代码,它能够捕获并响应意外情况。

•结构中立 architecture-neutral

另外,为了建立 Java 作为网络的一个整体, Java 将它的程序编译成一种结构中立的中间文件格式。只要有 Java 运行系统的机器都能执行这种中间代码。

现在, Java 运行系统有Solaris2.4(SPARC),Win32 系统 (Windows 2k 和Windows NT) 等。 Java源程序被编译成一种高层次的与机器无关的 byte-code 格式语言,这种语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行。

Java 源文件 Source File

引用包 Java API

编译器

字节码 Byte Code

JREJREJRE

Windows Linux Mac

在客户端接收到由网络所传输过来的 Bytecode后,便可通过一种与各平台有关的运行阶段环境( JRE , Java Runtime Environment )中的JVM ,以及 JRE所提供运行时所需类库,将其转成 Native code (本地码, CPU机器指令)。 JRE所包含的软件如下图所示。如此便可达到一次撰写,到处运行( write once,run anywhere )的效益。

Solaris Win 32 Linux Mac Other

默认Java运行阶段环境(Default JRE)

applet

math

naming

sql

awt io lang

net

beans

rmi security

text util accessibility swing corba

JavaHotspotRuntime

ClientCompiler JavaTM Plug-in

sound

Java Applications Java Applets

Java 的安全性可从两个方面得到保证。一方面,在 Java 语言里,象指针和释放内存等 C++功能被删除,避免了非法内存操作。

另一方面,当 Java 用来创建浏览器时,语言功能和一些浏览器本身提供的功能结合起来,使它更安全。 Java 语言在你的机器上执行前,要经过很多次的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。

•安全 secure

Byte-code校验和类装载

Java 源程序(.java 文件 )

Java 编译器

Java Bytecode(.class 文件 )

Bytecode 载入器

Bytecode 解释器

系统执行平台

语言定义

publicprotectedprivatefinal

取消指针自动回收垃圾

Bytecode 检查

限定对象的存取权限系统堆栈溢出参数类型一致

程序执行系统

WWW 浏览器限制 Java 小应用程序的不正当使用

同体系结构无关的特性使得 Java 应用程序可以在配备了 Java 解释器和运行环境的任何计算机系统上运行,这成为 Java 应用软件便于移植的良好基础。

Java 是平台无关的语言是指 Java 写的应用程序不用修改就可在不同的软硬件平台上运行。

“一次编译,多处运行”!

Java 主要靠它的虚拟机在目标代码级实现平台无关性。

"write once, run anywhere."

•可移植的 portable

Java 虚拟机( JVM)

Javainterpreter

Just-in-timecompiler

Runtime System

Operating System

Hardware

不同的操作系统有不同的虚拟机 .

它类似一个小巧而高效的 CPU.byte-code 代码是与平台无关的,

是虚拟机的机器指令 .

Java 字节代码运行的两种方式 :interpreter( 解释方式 )Just-in-time(即时编译 ):有代码生

成器将字节代码转换成本机的机器代码 ,然后可以以较高速度执行 .

JVM 是一种解释器( interpreter )。而 Java HotSpot Runtime ( client VM )以及供浏览器使用的 Java Plug-in ,这些可将 Byte Code转成 NativeCode 的转换软件单元,均可被视为一种 VM 。 Java HotSpot Runtime 可运行在 DOS或其他非图形作业系环境下。而 Java Plug-in则是一种浏览器嵌入软件,提供浏览器运行 Java 的环境支持。

JVM 包含类加载器( class loader )字节确认器( bytecode verifier )以及 JIT 实时编译器( Just-in-time compiler )。类加载器用来取得从网络获取,或存于本地机器上的类文件字节码。字节确认器接着确认这些类文件是否有正确的格式,以确定在运行时不会有破坏内存的行为。

JIT 编译器可将字节码转成本地机器码,使原本是解释式的 VM能提高到编译式的运行效率。 Java HotSpot Runtime 就是实时编译技术的一大杰作。

Java提供的多线程功能使得在一个程序里可同时执行多个小任务。线程--有时也称小进程--是一个大进程里分出来的小的独立的进程。因为 Java实现的多线程技术,所以比 C 和 C++更健壮。多线程带来的更大的好处是更好的交互性能和实时控制性能。

当然实时控制性能还取决于系统本身 (UNIX, Windows, Macintosh 等 ),在开发难易程度和性能上都比单线程要好。任何用过当前浏览器的人,都感觉为调一副图片而等待是一件很烦恼的事情。在 Java里,你可用一个单线程来调一副图片,而你可以访问 HTML里的其它信息而不必等它。

•多线程 multithreaded

• JDK

•Java开发工具

JDK ( Java Development Kit) J2SDK ( Java 2 SoftWare Development Kit) J2SE (Java 2 Platform, Standard Edition )J2EE ( Java 2 Platform, Enterprise Edition ) J2ME ( Java 2 Platform, Micro Edition)

J2EEJ2SE

J2MESmart card

• Java IDE Tools

• Inprise JBuilder (RAD) • Microsoft Visual J++• Symantec Café (RAD)• Forte by Sun MicroSystems• IBM Visual Age for Java (RAD)

Sun公司为所有的 java 程序员提供了一套免费的 java开发和运行环境,取名为 Java2 SDK ,可以从 http://java.sun.com 上进行下载。

安装的时候可以选择安装到任意的硬盘驱动器上。通常在 JDK 目录下有 bin 、 demo 、 lib 、 jre 等子目录,其中 bin 目录保存了 javac 、 java 、 appletviewer 等命令文件, demo 目录保存了许多 java 的例子, lib 目录保存了java 的类库文件, jre保存的是 java 的运行时环境。

1. 安装 Java Develop Kit(JDK)

• 本课程使用的开发工具—— JDK+JCreator

C:\

java

binlib

classes.zip

javac

java

appletviewer

用户类文件所在目录myclasses

当前目录

Java 的开发环境

java\bin 目录下包含以下主要文件 :

javac: Java 编译器 , 用来将 java 程序编译成Bytecode

java: Java 编译器 , 执行已经转换成 Bytecode的java 应用程序 .

jdb: Java 调试器 , 用来调试 java 程序javap: 反编译 , 将类文件还原回方法和变量 .javadoc :文档生成器 , 创建 HTML 文件appletviwer : Java 解释器 , 用来解释已经转换成

Bytecode的 java 小应用程序 .

2. 安装 java 帮助文档

由于 JDK 的安装程序中并不包含帮助文档,因此也必须从 Sun 的网站上下载进行安装。通常安装在 JDK所在目录的 docs 子目录下面。用浏览器打开 docs 子目录下的 index.html 文件就可以阅读所有的帮助文档。

在安装完 JDK之后,必须配置类路径classpath 和环境变量 path , JDK才能够正常运行。

如果是在 windows2000 中,则需要用右键单击桌面上 " 我的电脑 " ,选择 "属性 " ,则弹出一个名为 " 系统特性 " 的窗口,选择 " 高级 " ,然后选择 " 环境变量 " ,在 " 环境变量 "窗口中编辑classpath 和 path 。

3. 配置类路径

设置环境变量

JCreator

(三)开始 Java程序设计

一个简单的 Java Application 程序一个简单的 Java Applet 程序区分 Application 与 Applet

Java 程序开发流程

//This application program prints Welcome to Java! public class Welcome { public static void main(String[] args)

{ System.out.println("Welcome to Java!"); }}

•一个简单的 Java Application程序

•编写源程序

注释 Comments

单行注释 //

多行注释 /* ... */

保留字 / 关键字public class void static

47个关键字goto / const

true / false / null

修饰符( modifier )public /static /private/final/abstract/protected

语句( statement )System.out.println("Welcome to Java!");

Java 中语句用分号 ; 结束。

类主类类中可以包含数据声明和方法声明。

方法System.out.println( )

main 方法 public static void main(String[] args)

•编译程序 : javac Welcome .java

•运行程序 : java Welcome

•一个简单的 Java Applet程序

/* This is an example of Java applets */import java.awt.Graphics;

public class WelcomeApplet extends java.applet.Applet{ public void paint (Graphics g)

{ g.drawString("Welcome to Java!",10,10); }}

•编写源程序

import (引入包或类)import java.awt.Graphics;

import 语句告诉编译器所使用类的来源Applet 程序总是需要引入 Applet 类 (package java.applet)

可引入 Graphics 类 (package java.awt)绘制图形

Can draw lines, rectangles ovals, strings of characters

applets至少包含一个类的定义 (like applications)

Rarely create classes from scratch

Use pieces of existing class definitions

Inheritance - create new classes from old ones

extends followed by class name

Indicates class to inherit from (Applet)

Applet : superclass (base class)

WelcomeApplet : subclass (derived class)

Welcome now has methods and data of Applet

extends

<html><body><applet code="WelcomeApplet.class" width=100 height=40></applet></body></html>

•编写 welcome.html

•编译程序 : javac WelcomeApplet.java•运行程序 : appletviewer welcome.html

WWW 服务器HTML 文件

————Applet 嵌入标记

Applet 名————————————

WWW 服务器

WWW 浏览器

下载 html 文件

请求 html 文件

解释执行 Applet 字节码

下载 Applet 字节码

请求

Applet 字节码

•Applet 安全限制

•不允许 applet读写计算机的文件系统。•不允许 applet 运行浏览器所在计算机上的任何程序。•除了存储 applet 的服务器之外,不允许 applet建立用户计算机与任何其他计算机的连接。

•Java程序开发流程•Application 开发流程

文本编辑器

Java 源文件 xxx.java

编译 javac

错误 ?

Java 类文件 xxx.class

解释 java

程序结果

正确 ?

除错器 jdb

javadoc

javah

HTML说明文件

C/C++标头文件

NO YES

文本编辑器

Java 源文件 xxx.java

编译 javac

错误 ?

Java 类文件 xxx.class

Appletviewer

程序结果

正确 ?

除错器 jdb

javadoc

javah

HTML说明文件

C/C++标头文件

NO YES

HTML主文件

文本编辑器

•Applet 开发流程

•比较 Application与Applet Application 及 Applet 程序撰写比较表

  Application Applet

1. 程序格式特征 有 main() 有 init()start()stop()

destroy()

2. 存储文件格式 .java 文件 .java 文件

3. 编译 (compile) 程序代码 使用 JSDK< 在 DOS命令列环境下 >

使用 javac.exe 

使用 javac.exe

4.产生文件格式 .class 文件 .class 文件

5. 运行程序 使用 java.exe即可直接运行

  

1.先制作一个嵌入此 .class的 .html 文件 , 方法如下 :

<Applet Code=”xxx.class”…></Applet>2.再使用 appletveiwer.exe或浏览器运行此 .html 文件

(四) Java数据类型与运算符标识符关键字基本数据类型常量变量运算符

1. 语法规则:以字母、下划线 ( _ ) 、美元符号 ($) 开始,后跟这三种符号或数字。2.必须要区分大小写。 3.没有长度限制。4. 不得使用关键词。5. 约定:

•类名 , 接口名 :首字母应该大写 :  class ThisIsAClassName  interface Account

•标识符

•字段、方法以及对象: 首字母应小写 : thisIsMethodOrFieldName ()•对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母 .

•常量:全部用大写字母表示: GREEN HEAD_ COUNT

•Java 包( Package )属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。如 : package java.awt.event

关键字是由系统定义的一些词,它们在程序里代表特定的含义。定义标识符时要避免使用这些词。

•关键字

统一的数据类型、各种数据类型占用其固定的内存长度、每种数据类型都对应一个缺省值。

这样可以保证数据成员一定得到了某种初始化。但是局部变量没有缺省值,以确保程序员对它进行初始化。

不用 new创建变量,而是创建一个并非句柄的“自动”变量,该变量容纳了具体的值,并置于堆栈中,能更高效地存取。

•基本数据类型

数据类型 关键字 占用位数 缺省数值 封装器类型

布尔型 boolean 8 false Boolean

字节型 byte 8 0 Byte

字符型 char 16 '\u 0000' Character

短整型 short 16 0 Short

整型 int 32 0 Integer

长整型 long 64 0 Long

浮点型 float 32 0.0F Float

双精度型 double 64 0.0D Double

[注]与 C 、 C++不同, Java中没有无符号型整数,而且明确规定了整型和浮点型数据所占的内存字节数,这样就保证了安全性、鲁棒性和平台无关性 .; 数据类型决定行为,而非大小,类型在内部可能得到提升。

•常量Java 中的常量值是用文字串表示的,它区分为不同的

类型,如整型常量 123 ,实型常量 1.23 ,字符常量‘ a’ ,布尔常量 true 、 false. 以及字符串常量“ This is a constant string.” 。

与 C 、 C++ 不同, Java 中不能通过 #define命令把一个标识符定义为常量,而是用关键字 final 来实现,如:

final double PI=3.14159;

变量是 Java 程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分。

1.变量名是一个合法的标识符,它是字母、数字、下划线或美元符“$”的序列, Java 对变量名区分大小写,变量名不能以数字开头,而且不能为保留字。

合法的变量名如: myName 、 value_1 、 dollar$等。

非法的变量名如: 2mail 、 room# 、 class (保留字 )等。

变量名应具有一定的含义,以增加程序的可读性。

•变量

2. 变量类型可以为上面所说的任意一种数据类型。

3.变量的作用域指明可访问该变量的一段代码。声明一个变量的同时也就指明了变量的作用域。

按作用域来分,变量可以有下面几种:局部变量,类变量,方法参数,例外处理参数。

• 局部变量在方法或方法的一块代码中声明,它的作用域为它所在的代码块 ( 整个方法或方法中的某块代码 ) 。

• 类变量在类中声明,而不是在类的某个方法中声明,它的作用域是整个类。

• 方法参数传递给方法,它的作用域就是这个方法。• 例外处理参数传递给例外处理代码,它的作用域就

是例外处理部分。

在一个确定的域中,变量名应该是唯一的。通常,一个域用大括号 {} 来划定。

4.声明格式为:type identifier[=value][,identifier[=value]…] ;

例如: int a, b, c; double d1, d2=0.0;

其中,多个变量间用逗号隔开, d2 = 0.0 对实型变量d2 赋初值 0.0 ,只有局部变量和类变量是可以这样赋初值的,而方法参数和例外处理参数的变量值是由调用者给出的。

•运算符1. 算术运算符 (+, - , *, /,%, ++, --) 2. 关系运算符 (>, <, >=, <=, ==, !=) 3. 布尔逻辑运算符 (!,&&, ||等 ) 4. 位运算符 (>>, <, >>>,&, |, ^, ~等 ) 5. 赋值运算符 (= ,及其扩展赋值运算符如 +=) 6. 条件运算符 ( ?: ) 7. 其它 ( 包括分量运算符 ? ,下标运算符 [] ,实例运算符instanceof ,内存分配运算符 new ,强制类型转换运算符 ( 类型 ) ,方法调用运算符 () 等 )

(五) Java控制语句选择结构

if-elseswitch-case

循环控制结构 for while do-while

循环中的跳转语句breakcontinue

一般形式: if (条件表达式)//if 分支的语句块;

else//else 分支的语句块;

** 条件表达式为关系或逻辑表达式,返回的为布尔值。 注意区分与 C 语言的不同:

•选择结构

x=5 ;if ( x) /*C 允许, Java 中错误,应写成 if ( x! =0 ) */ x-- ;

•if 语句

一般形式: switch (表达式){ case 判断值 1 :语句块 1;

break;case 判断值 2 :语句块 2;

break; ……… case 判断值 n: 语句块n; break;

default: 语句块 n+1; break; }

表达式的值必须为整型或字符型( byte、 short、 int、 char )

注意: case 判断只是负责指明分支的入口点,而不负责指明分支的出口点,要应用 break 来跳转。

•switch 语句

[initialization]while (termination){

body;[iteration;]

}1. 当布尔表达式 (termination) 的值为 true 时,循环执行大括号中的语句。2. while 语句首先计算终止条件,当条件满足时,才去执行循环体中的语句。

Java 中提供的循环语句有: while 语句, do-while 语句和 for 语句 .

循环控制结构

•while 语句

[initialization ]do {

body;[iteration;]

} while (termination);

1. do-while 语句首先执行循环体,然后计算终止条件,若结果为 true ,则循环执行大括号中的语句,直到布尔表达式的结果为 false 。 2. 与 while 语句不同的是, do-while 语句的循环体至少执行一次。

•do-while 语句

for (initialization; termination; iteration){body;

}

例: for(int i=0, j=1; i<10&&j!=11; i++,j++)循环体

**java 中用到逗号运算符的唯一地方就是 for 循环的

控制表达式 .**for 语句的三个表达式可以省略部分或全部。 ** 只有 for 语句才具备在控制表达式里定义变量的能

力(尽管可以设置任意数量的定义,但都属于同一类型。 )

•for 语句

Java 语言不支持无条件跳转的 goto 语句 ,Java 的跳转语句有三个: break 语句、 continue 语句和 return 语句。

循环中的跳转语句

•break 语句

for(i=1; i < 100; i++)//外循环for(j=2; j<i; j++)// 内循环

if(i%j==0)

break;// 提前跳出内循环

•不带标号的 break 语句:

作用:使程序的流程从一个语句块内部跳转出来。

格式: break 标号名;

标号应定义在某一循环语句前,执行 break 语句后流程将从该循环语句块中跳出,继续执行标号语句块之后的语句。

•带标号的 break 语句

stop: // 标志 for循环的标号 for ( int row = 1; row <= 10; row++ )

{

for ( int column = 1; column <= 5 ; column++ )

{ if ( row == 5 )

break stop; // 跳出标号标记的循环 }

}

• continue 语句

continue 语句只能在循环结构中使用。

•不带标号的 contnue 语句

它的作用是终止本次循环,跳过本次循环的剩余语句,但整个循环不会因此而终止。

for(i=1; i < 100; i++){ if(i%3==0)

continue;// 结束本次循环,跳过下面语句System.out.println(i);

}

•带标号的 continue 语句带标号的 continue 语句使程序的流程直接转入标号标

明的循环层次,标号同样只能定义在循环语句前。

label1: 外部循环 { 内部循环 { continue; //1 //... continue label1; //2 //... }}

import java.io.*;public class UseLabel{ public static void main(String[] args)

{Loop:// 标记外循环的标号 for(int n=0,i=1; i<100; i++) //外循环 { for(int j=2;j<i;j++) // 内循环

{ if( i%j == 0)continue Loop; //带标号的 continue

}// 内循环结束 n++; //素数个数计数System.out.print(i+"\t");if(n%10!=0) // 每 10 个一行

continue;// 不带标号的 continueSystem.out.println();

} //外循环结束} // main 结束

}//end of class UseLabel

作 业1 、创建一个 Java application源程序文件,实现往屏幕上输出一行“ hello world” ,按下属步骤编译并运行。 ( 1 )将该文件保存为 First.java 。 ( 2 )编译这个源程序。 ( 3 )运行字节码。 ( 4 )在程序中用“ this is my first application” 代替原来的“ hello world” ,重新保存、编译并运行。 ( 5 )用 Main 代替main ,重新编译程序,观察编译器给出的错误信息。 ( 6 )使用命令 javac first.java替代 javac First.java ,观察会发生什么现象?

2 、创建一个 Java applet源程序文件,实现往屏幕上输出一行“ hello world” ,按下属步骤编译并运行。 ( 1 )将该源程序文件保存为 FirstApplet.java 。 ( 2 )编写一个 html 文件,名为 firstapplet.html 。 ( 2 )编译这个源程序。 ( 3 )在 web 浏览器中浏览 firstapplet.html 。 ( 4 )在操作系统命令行状态,键入如下命令演示 applet:

appletviewer firstapplet.html ( 5 )用 g.drawString(“this is my first applet”,10,10) 代替原语句,重新编译程序,观察运行结果。