java一个java抽奖程序实现滚动里实现完一个功能后按理说是跳转到当前页面,结果重复了此功能

“”“1”“”
&&&&&&& 50
&&&&&&&&60
step 2: &=
&&&&&&&&21
&&&&&&&&31
expect: 11&&&&&&&&&&&&&&
&&&&&&&&4/
&&&&&&&&31+1
expect: 11
expect: 11
&&&&&&&&3/
expect: 1“1”
expect: 11
step 10:&&&maxlen&&&
expect: 1&&&maxlen&&&
expect: 11
expect: 11
step 13:html&br&
expect: 11
expect: 11
&&& 3.'"[]{}&&……
&&& 4.255byte
&&& 11.ctrlalt
&&& 17.SQL
&&& 18.& & & & & & *&
&&& 23.91011
&&& 24.valid
&&& 25.html&lthtml&gt
3updatecanceldeletesave
10‘delete’
14backbackbackback
15searchsearchsearchsearch
19Ctrl+CCtrl+VBackSpace
2.1.Web Web
2.2.Web Web Web Web Web
17:20& & : &
WindowsUnixLinuxWindowsWindowsWindows XPwindows 2003vistaWin2000/NTWindows9x
WebJavascrīpt ActiveXHTMLJAVA
6.0 IE 7.0.TTfirefoxWeb
&&& Web—SQL
sql&script&alter("abc")&script&,&script&,bug
URLbug……
SQLSQL ServerSQLSQL Server
ShipCity =
Request.form. ("ShipCity");
"select * from OrdersTable where ShipCity = '" + ShipCity +
FROM OrdersTable WHERE ShipCity = 'Redmond'
drop table OrdersTable--
FROM OrdersTable WHERE ShipCity = 'Redmond';drop table OrdersTable--'
(;)(--)SQL ServerSQL ServerOrdersTableShipCityRedmondSQL ServerOrdersTable
DROP TABLE
Transact-SQL
/* ... */ /**/
xp_ xp_cmdshell
&& Test Case.
编写新邮件
选择输入法编写文本,并选择插入的附件(格式为txt/gif/jpg/bmp等)
所有的输入法都能实现,插入附件功能必须实现
编辑好邮件后,输入对方的电子邮件,按确认键进行发送
邮件能够成功发送并要有保存提示或自动进入已发信箱(如果此功能已经设定)
在邮件列表中,选择某条邮件,按选项菜单,选择删除项,再按确认键。
能够删除所选邮件
在邮件列表中选择某条邮件,在选项中选择回复,然后进行编辑,确认后发送。
能够实现邮件的回复操作。
在收件箱中选择某条邮件,在选项中选择转发,然后进行编辑,并输入第三方的邮箱地址或者从地址簿中选择号码,按确认键进行发送。
能够实现邮件的转发。
WebSQL*NetJDBCWeb
CWebAPICanalogJVMJava Java
PurifyApacheWeb
JavaC JavaJavaVMJavaJust In TimeJITJava
WebWebshell64shell64shell ulimit
JavaC JavaJava
Netscape WebNetscape Enterprise
Web WebWebconnected
obj.confRqThrottle RqThrottle
AdministratorDBA
&& XSS “”“XSS”
&&& 1. Web
http://www.somesite.com/page.asp?pageid=10&lang=en&title=Section%20Title
&&& &h1&Section Title&/h1&
&&& “title” Web
http://www.somesite.com/page.asp?pageid=10&lang=en&title=Section%20Title&/h1&&script&alert(‘XSS%20attack’)&/script&
&&& &h1&Section Title&/h1&&script&alert(‘XSS
attack’)&/script&
Cookie ActiveX Flash
URL http://mybank.com/somepage?redirect=&script&alert(‘XSS’)&/script&“redirect”
&&& “” URL
Vulnwatch cookie
&&& · Paros proxy
(http://www.parosproxy.org) HTTP
&&& · Fiddler (http://www.fiddlertool.com/fiddler) HTTP
&&& · Burp proxy (http://www.portswigger.net/proxy/)
&&& · TamperIE (http://www.bayden.com/dl/TamperIESetup.exe) GET
javascript.
&&& cookie
forwardURL
namepasswordmsgBodymsgTitle
PARAM NAME
&&& “&” URL
&script&alert(‘hi’)&/script& “script”cookiePOST “pageId=10”
&"'&&script&alert(‘XSS')&/script&
&%22%27&&img%20src%3d%22javascript.:alert(%27XSS%27)%22&
&&& 3. &"'&&img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x74;%26%23x3a;alert(%26XSS%26)&
AK%22%20style%3D%22background:url(javascript.:alert(%27XSS%27))%22%20OS%22
&&& 5. %22%2Balert(%27XSS%27)%2B%22
&&& 6. &table
background="javascript.:alert(([code])"&&/table&
&&& 7. &object type=text/html
data="javascript.:alert(([code]);"&&/object&
&&& 8. &body
nload="javascript.:alert(([code])"&&/body&
“&”” URL “&&” XSS
”&{alert('XSS')};”
XSS “msgTitle” HTML “msgTitle” XSS
Web cookiePOST SOAP HTML
&& WebWebWebInternetWebWebWeb
&&&&&&& WebWebURL
&&&&&&& Web
Xenu Link Sleuth
HTML Link Validator 30
&&&&&&& 1.3
&&&&&&& ()
1.21.3WinRunnerQTPWinRunnerQTP
1.4 cookies
CookiesCookiesWebCookies
&&&&&&& WebCookiesCookiesCookiesCookies cookies
cookie cookie
IECookiesView v1.50
Cookies Manager v1.1
&&&&&&& WebWebWebSQL
&&&&&&& Web
&&&&&&& 1.21.3
WebHTMLHTMLScript ActiveXVBScriptPerl
&&&&&&& WebWeb5
&&&&&&& WebWebWebWebWeb
&&&&&&& WebWebInternet
&&&&&&& WebWebWeb
&&&&&&& “”
&&&&&&& WASACT
&&&&&&& WebWebWeb
&&&&&&& WebWebWebWeb
&&&&&&& WebWeb
&&&&&&& WebWeb
&&&&&&& 1Web
&&&&&&& 4JPGGIF 30k
&&&&&&& Web
&&&&&&& Microsoft Word""Web""
&&&&&&& ? ?
&&&&&&& WebWebWeb
&&&&&&& Web
&&&&&&& Web
&&&&&&& UnixMacintoshLinuxWeb
&&&&&&& WebWeb
&&&&&&& WebJavaJavaScript ActiveX plug-insHTMLActiveXMicrosoftInternet ExplorerJavaScriptNetscapeJavaSunJava
640x400600x800
4.4 Modem/
28.8 modem 10
&&&&&&& 600x800
&&&&&&& Web
index.html
main.html "…com/objects/images" "…com/objects"
HTTPSSSL(3.0 SSL
&&&&&&& /?
&&&&&&& ? ? ? ? IP ? ?
&&&&&&& web Web
Mastercard
Discover ( 3
Mastercard6 Discover)
internetintranet
extranet web
&&& WEBWEBWEBTPS
"TLLB""Time to last byte","""".
:WEBHTTP.WEB:WEB"-",,,WEB.,TPS.,,.,,,,HTTP.
:,CPU,.,WEB.
WEB,,,,.WEB,.
2,WINDOWS,LINUXIE ,FIREFOX
,NETSCAPE,OPERA800*600
web50005000100005000web
webLoadRunner
TomcatWebjspservletjspBeanservletjavabeanJMeter.war
2.2 JMeter
http://apache.forum.net/dist/jakarta/jmeter/binaries/jakarta-jmeter-1.9.1.zipJMeterrelease.zipC:/JMeter%JMeter%
%JMeter%/binjmeter.batJMeterJMeter
2.3 Test Plan
JMeter(Thread Groups)Logic ControllerSample Generating Controllers(Listener)TimerAssertionsConfig ElementsJMeter,JMeter
jspservletJMeter
1. Test PlanAdd'Thread Group
period 5101052
Loop Count forever forever 0
Number of Threads5Ramp-up
period0foreverLoop Count2
Web,Jmeter, Httphttp,
1. Test PlanAdd'config element'http
request defaults
server name
path pathjmeterhttpurljmeter
port number
WebWebprotocalhttpiplocalhostwebcontextjmeterpathjmeterTomcatport number8080
1. Thread GroupAdd'sampler'http request
2. 2.5httphttpgetpost
2.7 Listener
listenerJmeterlistener
1. Test PlanAdd'listener'view result
2. filenamesamplenourlsamplemssuccess
TA的最新馆藏
喜欢该文的人也喜欢用java怎样编写登录页面,成功登录跳转到下一个页面,求代码_百度知道
该问题可能描述不清,建议你
用java怎样编写登录页面,成功登录跳转到下一个页面,求代码
我有更好的答案
&nbsp,我现在从事前端UI开发,&quot说说servlet里面的方法:public void&//得到数据库链接flg=&&&rd&&//&nbsp,pass);&对不起;&&),用户名或密码错误&登录时错误了,一般我们会给用户一个提示&&&&session.setAttirbute(&quot,user).findUser(//将请求对象和响应对象传递进来}&&&//&这里是存在当前用户else{&&&&//当然这里登录成功时,我们要把当前用户写到session里面保存&ValidateUserPass(String user,String pass){&&RequestDispathcher&rd =null//假使你的代码是从DB中获取DBFactory&& &nbsp.setAttirbute(&userName&;RequestDispathcher&//&msg&;db=DBFactoryImpl.getDBFactoryInstance();&nbsp,我也很久没做JAVA开发了;//这个请求转发语句&这里是不存在用户if(flg.hasNext()==-1){&&&=&req.getRequesDispatcher(&login.jsp&quot.sendRedirect(&index.html&);&&}}// * 上述代码,你可以参考下我的方法,本来我想在写一个用struts 2登录的程序的;rd.forward(request,&reponse);&)
采纳率:45%
java?是jsp吧
重定向就可以了啊~~~这还不知道?
1条折叠回答
为您推荐:
其他类似问题
java 代码 页面的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。匿名用户不能发表回复!|专题十二: JAVA程序设计语言
&&&&专题十二: 专题十二: java 程序设计语言java 语言简介: 背景 1991 年 ,sun microsystem 公司的 jame gosling, bill joe 等人 ,在电 视,控制烤面包箱等家用 消费类电子产品上进行交互式操作的开发,开始时是使用 c++语言,但是,后来发现 c++在某些方面并不能 很好的满足设计者的需要,从而考虑自行设计一门新的语言&&&&,这种新的语言并不局限于扩充语言机制本身, 而是更注重语言所运行的软硬件环境.主要是可以使用其建立一个系统,这个系统运行于一个巨大的,分 布的异构网络环境中,完成各种电子设备之间的通信与协同工作.基于这种思想而开发了一个名为 oak 的 (即一种橡树的名字 )新语言. java 语言简介 oak 先是被用于家电控制中,可通过手持设备控制家电.在当时并没有引起人们的注意 ,直到 1994 年 下半 年 ,internet 的迅猛发展 ,环球信息网 www 的快速增长 ,促进了 java 语言研制的 进展 使得它逐 渐成为 internet 上受欢迎的开发与编程语言 . java 编写的 applet 应用小程序能够嵌入到网页中运行, 用 而实现声音,动画等功能.同时,在一般的应用程序设计方面也不逊色,完全可以用面向对象的技术与方 法进行开发,符合最新的软件开发规范的要求.由于 oak 已经被注册,所以,最终更名为 java. java 对软件开发技术的影响 工业界不少人预言 :&java 语言的出现 ,将会引起一场软件革命 &,这是因为 传统的软件往往都是与 具体的实现环境有关 ,换了一个环境就需要作一番改动 ,耗 时费力 ,而 java 语言能在执行码 (二进制 码 )上兼容 ,这样以前所开发的软件就 能运行在不同的机器上 ,只要所用的机器能提供 java 语言解释器 即可. java 对软件开发技术的影响重要体现在以下四个方面: 1,软件的需求分析 :可将用户的需求进行动态的,可视化描述 ,以提供设计者更加直观的要求.用户 的各色各样的需求都可以用 java 语言描述清楚. 2,软件的开发方法 :由于 java 语言的面向目标的特性 ,所以完全可以用 o-o 的技术与方法来开发 . 3,java 语言的动画效果.利用 www 提供的巨大 动画资源空间 ,可以共享全世界的动态画面的资源. 4,软件最终产品 :用 java 语言开发的软件可以具有可视化,可听化,可操 作化的效交互,动画与动 作 &,要它停就停 ,要它继续就继续 ,而这是在电影与电视播放过程中难以做到的. java 是一个广泛使用的网络编程语言 ,它是一种新的计算概念.首先 ,作为一种程序设计语言 ,它简单, 面向对象, 不依赖于机器的结构, 具有可移植性, 安全性, 并且提供了并发的机制, 具有很高的性能. 次 , 其 它最大限度地利用了网络 ,java 的小应用程序 (applet)可在网络上传输而 不受 cpu 和环境的限制.另 外 ,java 还提供了丰富的类库 ,使程序设计者可以很 方便地建立自己的系统. java 的特点: 简单性 java 语言衍生自 c++,是一种面向对象的语言 ,它通过提供最基本的方法来完成指定的 任务 ,只需理 解一些基本的概念 ,就可以用它编写出适合于各种情况的应用程 序. java 略去了运算符重载,多重继承 等模糊的概念 ,并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作.另外 ,java 也适合于 在小型机上运行 ,它的基本解释器及类的支持只有 40kb 左右 ,加上标准类库和线程的支持也只有 215kb 左右.库和线程的支持也只有 215kb 左右. 面向对象性: java 语言的设计集中于对象及其接口 ,它提供了简单的类机制以及动态的 接口模型.对象中封装了它 的状态变量以及相应的方法 ,实现了模块化和信息隐藏 ;而类则提供了一类对象的原型 ,并且通过继承机 制 ,子类可以使用父类 所提供的方法 ,实现了代码的复用. 体系结构中立: java 解释器生成与体系结构无关的字节码指令 ,只要安装了 java 运行时系统 ,java 程序就可在任意 的处理器上运行,使得 java 程序可以方便地被移植到网络上的不同机器. 同时 ,java 的类库中也实现了与 不同平台的接口 ,使这些类库可以移植.这样大大降低了开发,维护和管理的工作. 安全性 : 用于网络,分布环境下的 java 必须要防止病毒的入侵. java 不支持指针, 一切对内存的访问都必须 通过对象的实例变量来实现 ,这样就防止程序员使用 &特洛伊 &木马等欺骗手段访问对象的私有成员 ,同 时也避免了指针操作中容易 产生的错误 支持网络编程: java 语言的特性使它可以最大限度地利用网络. applet 是 java 的小应 用程序 ,它是动态,安全, 跨平台的网络应用程序. java applet 嵌入 html 语 言 ,通过主页发布到 internet.网络用户访问服务 器的 applet 时 ,这些 applet 从网络上进行传输 ,然后在支持 java 的浏览器中运行.由于 java 语言的 安全机 制 ,用户一旦载入 applet,就可以放心地来生成多媒体的用户界面或完成复杂的计算而不必担心 病毒的入侵. 分布性: java 是面向网络的语言.通过它提供的类库可以处理 tcp/ip 协议 ,用户 可以通过 url 地址在网络 上很方便地访问其它对象 . 丰富的类库: 语言包提供的支持包括字符串处理,多线程处理,例外处理,数学函数处理等 . 实用程序包提供的支持包括哈希表,堆栈,可变数组,时间和日期等. 输入输出包用统一的 &流 &模型来实现所有格式的 i/o,包括文件系统,网络,输入 低级网络包用于实现 socket 编程. 抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件 网络包支持 internet 的 tcp/ip 协议 ,提供了接口. 面向对象程序设计——对象,类与实体 &对象&译自英文的&object&,现实世界实际上是由 object 组成的,我们看到的一切都是 object.程 序设计语言为解决现实世界的问题而存在,因此,我们自然会想到,让程序设计按照我们平常看世界的方 式运作,这样才最自然,这就是面向对象的程序设计的出发点. 面向对象程序设计,确切的说,对象是现实世界的某个具体的物理实体在计算机逻辑中的映射和体现.比 如:每个人都是一个具体存在的实体,有高度,体重等很多属性,也有走路,工作等很多行为.这样的实 体在程序设计中可以表达为计算机可以理解和操作的对象. 类:每个对象都是属于某种类别的.也就是说类是同种对象的集合与抽象.属于类的某个对象被称为 是类的一个实例. 对象的状态与行为:对象的状态也称为静态属性.用计算机术语来说也就是变量.每个对象都有自己 专有的变量.比如,具体的一个人,有身高,体重等. 对象的行为也称为动态属性,在计算机内部用方法来表示.比如,人有走路,工作的行为. 对象的关系: 包含:当对象 a 是对象 b 的属性的时候,称对象 b 包含对象 a.比如电脑与主板 继承:当对象 a 是对象 b 的特例的时候,称对象 a 继承了对象 b.比如,鲤鱼是鱼的一种特例. 关联:对象 a 的引用是对象 b 的属性,a 和 b 之间是关联关系. java 和 c, c++之间的比较: 对于变量声明,参数传递,操作符,流控制等 ,java 使用了和 c, c++ 相同的传统 ,使得熟悉 c, c++ 的程序员能很方便地进行编程.同时 ,java 为 实现其简单,安全等特性 ,也摒弃了 c 和 c++中许多不合 理的内容. 全局变量: java 程序中 ,不能在所有类之外定义全局变量 ,只能通过在一个类中定 义公用,静态的变量 来实现一个全局变量.例如 : class globalvar{ public static global_ } 在类 globalvar 中定义变量 global_var 为 public static,使得其它类 可以访问和修改该变量. java 对全局变量进行了更好的封装.而在 c 和 c++中 ,依赖于不加封装 的全局变量常常造成系统的崩溃. goto 语句:java 不支持 c, c++中的 goto 语句 ,而是通过例外处理语句 try, catch, final 等来代替 c, c++中用 goto 来处理遇到错误时跳转的情况 ,使程序更可读 且更结构化. 指针:指针是 c, c++中最灵活 ,也是最容易产生错误的数据类型.由指针所进行的内存地址操作常会造 成不可预知的错误 ,从而破坏安全性 ,造成系统的崩溃.而 java 对指针进行完全的控制 ,程序员不能直 接进行任何指针操作.同时 ,数组作为类在 java 中实现 ,良好地解决了数组访问越界这一 c, c++中不作 检查的错误. 内存管理: c 中 ,程序员通过库函数 malloc()和 free()来分配和释放内存 , c++ 中则通过运算符 new 在 和 delete 来分配和释放内存. 再次释放已释放的内存块或未被分配的内存块 ,会造成系统的崩溃 ;同样 , 忘记释放不再使用的内存块也会逐渐耗尽系统资源.而在 java 中 ,所有的数据结构都是对象 ,通过运算 符 new 为它们分配内存堆.通过 new 得到对象的处理权 ,java 对此自动地进行管理并且进行垃圾收集 , 有效防止了由于程序员的误操作而导致的错误 ,并且更好地利用了系统资源. 数据类型的支持:在 c, c++中 ,对于不同的平台 ,编译器对于简单数据类型如 in t,float 等分别分配 不同长度的字节数 ,例如:int 在 ibm pc 中为 16 位 ,在 vax-11 中为 32 位 ,这导致了代码的不可移植性 , 但在 java 中 ,对于这些数据类型总是分 配固定长度的位数 ,如对 int 型 ,它总占 32 位 ,这就保证了 java 的平台无关性. 类型转换:在 c, c++中 ,可以通过指针进行任意的类型转换,而 java 中 ,运行时系统对对象的处理要 进行类型相容性检查 ,以防止不安全的 转换. 头文件:c, c++中用头文件来声明类的原型以及全局变量,库函数等 ,在大的系 统中 ,维护这些头文件 是很困难的.而 java 不支持头文件 ,类成员的类型和访 问权限都封装在一个类中 ,运行时系统对访问进 行控制 ,防止对私有成员的操作.同时 ,java 中用 import 语句来与其它类进行通讯 ,以便使用它们的方 法. 结构和联合:c, c++中的结构和联合中所有成员均为公有 ,这就带来了安全性问题. java 中不包含结构 和联合 ,所有的内容都封装在类中. 预处理:c, c++中用宏定义来实现的代码给程序的可读性带来了困难.在 java 中 ,不支持宏 ,它通过关 键字 final 来声明一个常量 ,以实现宏定义中广泛使 用的常量定义. 简 单 的 java 程 序: application 与 applet 程序 java 程序可以分为两类:java application 和 java applet.前者是完整的应用程序,需要独立的 解释器来解释运行;后者则是嵌在网页中的非独立程序,由浏览器所自带的 java 解释器来解释运行. 简 单 的 application 程序: public class helloworldapp { //an application public static void main (string args[ ]) { system.out.println(&hello world!&); } } 简 单 的 applet 程序: import java.awr.*; import java.applet.*; public class helloworldapplet extends applet { //an applet public void paint(graphics g) { g.drawstring (&hello world!&,20,20); } } 由 于 applet 中 没 有 main()方 法 作 为 java 解 释 器 的入 口 ,我 们 必 须 编 写 html 文 件 , 把 该 applet 嵌入 其 中 ,然 后 用 appletviewer 来 运 行 ,或 在 支 持 java 的 浏 览 器 上 运 行 . html 文 件 如 下 : &html& &head& &title& an applet &/title& &/head& &body& &applet code=&helloworldapplet.class& width=200 height=40&&/applet& &/body& &/html& 其 中 用 &applet&标 记来 启 动 helloworldapplet,code 指明字节码所在的文件 ,width 和 height 指明 applet 所占 的 大 小. 从 上 述 例 子 中 可 以看 出 ,java 程 序 是由 类构 成 的 ,对 于 一 个应 用 程 序 来 说 ,必须 有 一 个 类 中 定 义 main()方法 ,而 对 applet 来 说 , 它 必 须 作 为 applet 的 一 个 子 类 . 在 类 的 定义 中 ,应 包 含 类 变 量 的 声 明 和 类 中 方 法 的 实 现 . java 在基本数据类型, 运算符, 表 达 式 ,控 制 语 句 等 方 面 与 c, c++基 本上 是 相 同 的. java 语言是对软件开发技术有深远影响,应用前景广泛,具有丰富的类库,继承了 c++传统(摈弃了某些 不足)广泛使用的网络编程语言.java 语言的特性使它可以最大限度地利用网络. 本章介绍面向对象的基本概念:对象和类,对象的属性. 第 1 章 java 和面向对象概述 java 语言对软件开发技术的影响 java 语言的应用前景及特点 java 语言特点 java applet 丰富的类库 1.java 语言对软件开发技术的影响 程序设计语言分四个发展阶段: 第一代语言(1gl) : 二进制机器代码 第二代语言 (2gl) : 汇编语言 (low level language lll) 第三代语言 (3gl): 高级语言 (hll) 第四代语言(4gl) : 面向对象语言(00p ) 特殊应用程序 非过程化 第五代语言:() 2.java 语言的应用前景 所有面向对象的应用开发,包括面向对象的事件描述,处理,综合等. 计算过程的可视化,可操作化的软件的开发. 动态画面的设计,包括图形图像的调用. 交互操作的设计(选择交互,定向交互,控制流程等). internet 的系统管理功能模块的设计,包括 web 页面的动态设计,管理和交互操作设计等. intranet(企业内部网)上的软件开发(直接面向企业内部用户的软件). 与各类数据库连接查询的 sql 语句实现. 其他应用类型的程序. 3.java 语言的特点 简单 面向对象 分布性 鲁棒性 安全性 体系结构中立 可移植性 解释执行 高性能 多线程 动态性 4.java applet applet 是 java 的小应用程序,它是动态,安全,跨平台的网络应用程序.java applet 嵌入 html(超文 本标记性语言)语言,通过主页发布到 internet. 5.丰富的类库 java 提供了大量的类以满足网络化,多线程,面向对象系统的需要. 6. java 和 c,c++ 对于变量声明,参数传递,操作符,流控制等,java 使用了和 c,c++相同的传统,使得熟悉 c,c++的程 序员能很方便地进行编程.同时,java 为了实现其简单,鲁棒,安全等特性,也摒弃了 c 和 c++中许多不 合理的内容. 本章小结 理解 java,首先必须掌握它的一些基本概念:java 对软件开发技术的影响;应用前景及特点; java 是一 种很典型的面向对象的程序设计语言. 要掌握面向对象的一些基本概念: 对象,类,继承和消息. 以便更好地学习和掌握 java 语言. 第 2 章 java 概述 学习导读:java 语言和其它高级语言一样需要有一个编程环境.为此,首先要安装 java 平台,然后 在该平台上应用 java 的编译系统进行编程. 本章从安装配置 java 平台开始,举例说明 java 源程序的结构,引导读者对 java 语言有一个基本的了 解. 教学重点与难点: 安装并配置 java 平台 字节码的编译生成 使用集成环境来编制 java 程序 2.1 安装并配置 java 平台 2.1.1 java 平台概述 java 平台由 java 应用编程接口 (application programming interface, 简称 api) java 虚拟机 和 (java virtual machine ,简称 jvm)构成. java 应用编程接口是已编译的可在我们的程序中使用的代码库.它们使我们能够添加现成的可定制的 功能,以节约编程时间. —般认为,java 虚拟机是建立在实际的处理器基础上的假想的计算机.java 虚拟机规范为 java 虚拟 机(jvm)作了如下定义:在真实机器中用软件模拟实现的一种想象机器.java 虚拟机代码被存储在.class 文件中;每个文件都包含最多一个 public 类. java 虚拟机规范为不同的硬件平台提供了一种编译 java 技术代码的规范,该规范使 java 软件独立于 平台,因为编译是针对作为虚拟机的&一般机器&而做,这个&一般机器&可用软件模拟并运行于各种现 存的计算机系统,也可用硬件来实现. java 程序并不是在本机操作系统上直接运行,而是通过 java 虚拟机向本机操作系统进行解释来运行. 这就是说,任何安装有 java 虚拟机的计算机系统都可以运行 java 程序,而不论最初开发应用程序的是何 种计算机系统. 2.1. 2 java 平台的安装 开始编写 java 程序前,需要在我们的计算机系统中安装 java 平台. java 平台可从 java.sun.com 网站免费下载,该网站上提供了免费的 java 开发工具集(java developers kits, 简称 jdk), 我们可以在这里下载适合于我们计算机操作系统的 jdk, 利用这些工具来开发 java 程序. 2.2 第一个 java application 程序 2.2.1 编辑源程序 我们可以不采用任何集成开发环境,只是采用文本编辑器就可以编写简短的 java 程序. 【例 2.1】 第一个 java application 程序 //myfirstapp.java public class myfirstapp { public static void main(string args[ ]) { system.out.println(&this is my first java application!&); } } 本程序的作用是输出下面一行信息: this is my first java application! 在一个 java application 应用程序中,一定要有一个类包含 main 方法.而在本范例中,首先用保留 字 class 来声明一个新的类,其类名为 myfirstapp,它是一个公共类(public).整个类定义由大括号{} 括起来.在该类中定义了一个 main 方法,这个方法共有三个修饰语,其意义分别如下: (1)public:表示这个类的 main 方法可以被所有的对象使用. (2)static:指明该方法是一个类方法,它可以通过类名直接调用,表示 main 是属于这个类所使用 的方法,我们将之称为&静态方法&. (3)void:表示 main 方法执行后不会传回任何值.这一点是重要的,因为 java 编程语言要进行谨 慎的类型检查,包括检查调用的方法确实返回了这些方法所声明的类型. 对于一个应用程序来说,main 方法是必需的,而且必须按照如上的格式来定义.java 解释器在没 有生成任何实例的情况下,以 main 作为入口来执行程序.java 程序中可以定义多个类,每个类中可以定 义多个方法,但是最多只能有一个公共类,main 方法也只能有一个,作为程序的入口.main 方法定义中, 括号中的 string args[]是传递给 main 方法的参数,参数名为 args,它是 string 类的一个实例.参数可 以为 0 个或多个,每个参数用&类名 参数名&来指定,多个参数间用逗号分隔. 对于本程序,还有以下值得注意的地方: (1)在 main 方法中,只有一条语句: system.out.println(&this is my first java application!&); 它用来实现字符串的输出,这条语句实现与 c 语言中的 printf 语句相同的功能.这里实际上是利用 java 应用编程接口(api)向控制台打印输出一行文字.api 中已经有了可以使用的控制台打印功能,我们 只需要提供要打印的文字. 这行程序所做的事是使用由 system 类的 out 成员引用的 printstream 类的 out 对象的 println 方法, 将字串&this is my first java application!&打印到标准输出上. (2)语句 system.out.println(&this is my first java application!&); 的最后有一个分号(;), 在 java 编程语言中,一个&;&代表一个语句的结束. 例如语句 totals=a+b+c+d+e+f+g; 与语句 total=a+b+c+ d+e+f+g;是等价的. (3)在程序中出现了大括号(&{&和&}&),它们是成对出现的,以{ }为边界的语句集合称为一 个块(block). 语句块可被嵌套,在本例中,myfirstapp 类是一个语句块;myfirstapp 类由 main 方法构成,main 这个方法也是一个语句块,它是一个独立单元,单元本身又作为类 myfirstapp 块中一部分. (4)为了增强程序的可读性,在程序中有多处空格,这不影响程序的执行. java 程序中允许任意多 的空白. (5)在本程序中第一行&//&后的内容为注释,进行编译时,这一行的从&//&开始的所有内容会被 忽略. java 里有两种类型的注释.第一种是传统的,c 语言风格的注释,是从 c++继承而来的.这些注释用 一个&/*&起头,随后是注释内容,并可跨越多行,最后用一个&*/&结束;第二种类型的注释也起源于 c++,这种注释叫作&单行注释&,以一个&//&起头,表示这一行的从&//&开始的所有内容都是注释, 这种类型的注释更常用,因为它书写时更方便. (6)程序名为 myfirstapp.java,和公共类的类名相同(包括大小写都一致,唯一不同的地方就是程序 名有扩展名.java 而类名没有扩展名),这是因为 java 解释器要求公共类必须放在与其同名的文件中. 2.2.2 字节码的编译生成 程序必需转换为 java 虚拟机能够理解的形式,这样,任何安装有 java 虚拟机的计算机就可以解释 并运行该程序.编译 java 程序是指:提取程序文件中程序员可读的文本(亦称源代码)并把它转换成字节 码,字节码是提供给 java 虚拟机的与平台无关的指令.java 编译器是通过外壳操作系统中的命令行进行 调用的,下面对该程序进行编译,命令行调用命令为: c:&javac myfirstapp.java 其中,&javac&是 jdk 工具包中提供的 java 语言编译器,输出结果为 java 字节码.编译的结果是生 成字节码文件 myfirstapp.class. 需要留意的是,使用 javac 这个指令并没有打开 java 编译器里的侦错功能,所以你无法在它编译出来 的字节码文件中找到与程序侦错有关的数据信息.除非你用另外一个指令 javac-g,它的编译结果除了字 节码文件外还会附带一些有用的除错资料,可提供程序侦错时用.事实上&javac&提供了一些指令参数供 使用者编译时选用,各个参数代表不同的功能,以下是常用的几个: (1)-calsspath &path&:告知编译器何处去引用其他的类型对象.这个设定会取代你原先在开机执行文 件里已说明过的环境变量 classpath. (2)-d &directory&:指示编译器将编译后的执行码存放在特定的目录下,在这里要使用绝对路径. (3)-g:启动侦错功能. 2.2.3 字节码的解释与运行 现在可以运行该程序了,用 java 解释器来运行该字节码文件: c:&java myfirstapp 其中,java 是 jdk 工具包中提供的 java 解释器.我们需留意的是,在这个指令行中文件名称不须 附上扩展名&.class&,因为解释器本身会自行加入. 2.3 使用集成开发环境 毫无疑问,使用集成开发环境有很多的优点,无论是在调试程序的过程中,还是编译运行程序都方便 很多,所以一般的程序员都会选择一个集成开发环境来开发程序. 著名的 java 集成开发环境有 ibm 公司的 visual age for java,microsoft 公司的 vj++,borland 公 司 java builder 等. 对于初学者而言,集成开发环境的界面不能太复杂.适合于初学者学习的,应该是界面简单一些,最 好是不需要对开发环境做很多的设置的软件. 本章小结 java 语言是一个广泛使用的面向对象的网络编程语言,正在为越来越多的人接受.java 语言最吸引人 的地方就是它的可移植性.传统的软件往往都是与具体的实现环境有关,换了一个环境就需要作一番改动, 耗时费力, java 语言能在执行码 而 (二进制码) 上兼容, 这样以前所开发的软件就能运行在不同的机器上, 只要所用的机器能提供 java 语言解释器即可. 另外,需要强调的是,java 提供了丰富的类库,我们只是讲解了最简单的 java 程序的示例,就已经 接触到了 java 的类库.可以说离开类库,java 程序设计者将寸步难行.所以建议大家在清楚掌握了基本 概念的基础上,尽量加深对 java 类库的了解. 第 3 章 java 语言基础 学习导读:本章是学习 java 语言必须经过的基础阶段,通过本章的学习,应该能够对 java 程序的构 成有一个基本的理解,能够灵活运用 java 语言提供的各种数据类型和运算符.面向对象的编程也是以面向 过程编程为基础而发展起来的,因为在对象的方法等程序片内部,仍然需要严格遵守传统的结构化程序设 计原则,因此,熟练掌握结构化程序设计的三种基本流程是进一步学习 java 面向对象程序设计的基础. 教学重点与难点: java 程序的构成 java 的关键字,标识符,各种数据类型 java 的常量与变量 java 的各种运算符 结构化程序设计的三种基本流程 3.1 java 程序的构成 java 语言的源程序代码由一个或多个编译单元组成,每个编译单元可包含三个要素: (1)一个包声明(package statement,可选); (2)任意数量引入语句(import statements); (3)类的声明(class declarations)和接口声明(interface declarations). 该三要素必须以上述顺序出现.也就是说任何引入语句出现在所有类定义之前;如果使用包声明,则包 声明必须出现在类和引入语句之前.每个 java 的编译单元可包含多个类或接口,但是每个编译单元最多只 能有一个类或者接口是公共的. 3.2 关键字,标识符,数据类型,常量与变量 3.2.1 关键字 关键字对 java 编译器有特殊的含义,它们可标识数据类型名或程序构造(construct)名. 有关关键字值得我们注意的地方: (1)true,false 和 null 为小写,而不是象在 c++语言中那样为大写.严格地讲,它们不是关键字, 而是文字.然而,这种区别是理论上的. (2)无 sizeof 运算符,因为所有数据类型的长度和表示是固定的,与平台无关,不是象在 c 语言中 那样数据类型的长度根据不同的平台而变化.这正是 java 语言的一大特点. (3)goto 和 const 不是 java 编程语言中使用的关键字. 3.2.2 标识符 在 java 编程语言中,标识符是赋予变量,类或方法的名称.变量,函数,类和对象的名称都是标识符, 程序员需要标识和使用的东西都需要标识符.标识符可从一个字母,下划线(_)或美元符号($)开始, 随后也可跟数字,字母,下划线或美元符号.标识符是区分大小写,没有长度限制,可以为标识符取任意 长度的名字. 下面是几个有效的标识符: identifier thisone username user_name _system_varl $max 下面是几个非法的变量名: 3max (变量名不能以数字开头) room# (包含非法字符&#&) class (&class&为保留字) 标识符不能是关键字,但是它可以包含关键字作为它的名字的一部分.例如,thisone 是一个有效标识 符,但 this 却不是,因为 this 是一个 java 关键字. 3.2.3 数据类型 java 编程语言有八个原始数据类型,可分为以下四种: 1.逻辑类 boolean boolean 数据类型有两种文字值:true 和 false. 注意在 java 编程语言中 boolean 类型只允许使用 boolean 值, 在整数类型和 boolean 类型之间无转换 计算. 在 c 语言中允许将数字值转换成逻辑值,这在 java 编程语言中是不允许的. 2.字符类 char 使用 char 类型可表示单个字符,字符是用单引号括起来的一个字符,如'a', 'b'等. java 中的字符型数据是 16 位无符号型数据,它表示 unicode 集,而不仅仅是 ascii 集 与 c 语言类似,java 也提供转义字符,以反斜杠()开头,将其后的字符转变为另外的含义. 值得注意的一点是,用双引号引用的文字,就是我们平时所说的字符串类型不是原始类型,而是一个 类(class)string,它被用来表示字符序列.字符本身符合 unicode 标准,且上述 char 类型的转义字符 适用于 string. 3.整数类 byte,short,int,long 在 java 编程语言中有四种整数类型,每种类型可使用关键字 byte, short, int 和 long 中的任意一 个进行声明.所有 java 编程语言中的整数类型都是带符号的数字,不存在无符号整数. 整数类型的文字可使用十进制,八进制和十六进制表示.首位为&0&表示八进制的数值;首位为&0x& 表示 16 进制的数值.请看下面的例子: 5 表示十进制值 5 075 表示八进制数值 75 (也就是十进制数 61) 0x9abc 表示十六进制的数值 9abc (也就是十进制数 39612) 整数类缺省为 int 类型,如在其后有一个字母&l&表示一个 long 值(也可以用小写&l&).由于 小写&l&与数字&1&容易混淆,因而,建议大家采用大写&l&. 上面所说的整数 long 的形式如下: 5l 表示十进制值 5,是一个 long 值 075l 表示八进制数值 75,是一个 long 值 0x9abcl 表示十六进制的数值 9abc,是一个 long 值 四种整数类型的存储空间长度,能表示的范围是不一样的,如表 3-3 所示. 4.浮点类 double,float 在 java 编程语言中有两种浮点类型:float 和 double.如果一个数包括小数点或指数部分,或者在数 字后带有字母 f 或 f(float),d 或 d(double),则该数为浮点数.如果不明确指明浮点数的类型,浮 点数缺省为 double.下面是几个浮点数: 3.14159 (double 型浮点数) 2.08e25 (double 型浮点数) 6.56f (float 型浮点数) 在两种类型的浮点数中,float 为 32 位(单精度),double 为 64 位(双精度).也就是说 double 类 型的浮点数具有更高的精度. 3.2.4 常量与变量 在 java 中,不同类型的数据既可以以常量的形式出现,也可以以变量的形式出现. 常量就是指在程序执行期间其值不能发生变化的数据, 常量是固定的. 如整型常量 123, 实型常量 1.23, 字符常量'a',布尔常量 true 等. 变量的值则是可以变化的,它的定义包括变量名,变量类型和作用域几个部分.注意以下几点: (1)变量名必须是一个合法的标识符.变量名应具有一定的含义,以增加程序的可读性. (2)变量类型可以为前面所说的任意一种数据类型. (3)声明一个变量的同时也就指明了变量的作用域,变量的作用域指明可访问该变量的一段代码.按 作用域来分,变量可以有下面几种:局部变量,类变量,方法参数,例外处理参数. 局部(local)变量是在一个方法内定义的变量, 也被称作自动(automatic),临时(temporary)或 栈(stack)变量. 当执行进入一个方法时,局部变量被创建,当执行离开该方法时,局部变量被清除,它的作用域为它所 在的代码块(整个方法或方法中的某块代码).在成员函数内定义的变量对该成员变量是&局部的&,因 而,你可以在几个成员函数中使用相同的变量名而代表不同的变量. 在一个确定的域中,变量名应该是唯一的.通常,一个域用大括号&{&和&}&来划定. (4)下面是几个变量的声明: int a,b,c; //定义 a,b,c 为 int 型变量 double d,e; //定义 d,e 为 double 型变量 float f=2.5,g=5.8; //定义 f,g 为 float 型变量,并赋初值 其中,多个变量间用逗号隔开. (5)在 java 程序中声明变量后,需给该变量赋值.可用赋值语句来初始化变量——任何变量都不能没 有初始值(否则,则无法通过编译). 赋值方式如下:将已声明的变量名放在左边,然后是等号(=),右边是有适当值的 java 表达式. 它的意思是&取得右边的值,把它复制到左边&.右边的值可以是任何常数,变量或者表达式,只要能 产生一个值就行.但左边的值必须是一个明确的,已命名的变量.如: //这是声明 a=45; //这是赋值 //这是声明 c='y'; //这是赋值 相对于一个方法的&局部&变量,如果在初始化之前想使用它,编译器会提示出错,如下面这样就是 不允许的: void f() { i=i+1; } 当一个对象被创建时,实例变量在分配存储器的同时被值初始化. 下面给出几个 java 程序的例子,使大家对数据类型进一步加深理解. 运算符 按照运算符功能来分,基本的运算符分包括算术运算符,关系运算符,逻辑运算符,位运算符,赋值 运算符,条件运算符等. 3.3.1 算术运算 算术运算符包括加号(+),减号(-),乘号(*),除号(/),取模(%),自增运算符(++),自 减运算符(--)等. 在算术运算中,有以下值得注意的地方: (1)算术运算符的总体原则是先乘除,再加减,括号优先. (2)整数除法会直接砍掉小数,而不是进位. (3)与 c 语言不同,对取模运算符%来说,其操作数可以为浮点数. 如:37.2%10=7.2. 3.3 (4)java 也用一种简写形式进行运算,并同时进行赋值操作.例如,为了将 10 加到变量 x,并 将结果赋给 x,可用:x+=10. (5) java 对加运算符进行了扩展, 使它能够进行字符串的连接, 如&abc&+&def&, 得到串&abcdef&. (6)前缀++,--与后缀++,--的区别: ++i(前缀++)在使用 i 之前,使 i 的值加 1,因此执行完++i 后,整个表达式和 i 的值均为 i+1; i++ (后缀++)在使用 i 之后,使 i 的值加 1,因此执行完 i++后,整个表达式的值为 i,而 i 的值变为 i+1. --i 在使用 i 之前,使 i 的减 1,因此执行完--i 后,整个表达式和 i 的值均为 i-1;i--在使用 i 之 后,使 i 的减 1,因此执行完 i--后,整个表达式的值为 i,而 i 的值变为 i-1. 3.3.2 关系运算 关系运算符用来比较两个值,返回布尔类型的值 true 或 false. 对&或运算&如果运算符左边的表达式的值为 true,则整个表达式的结果为 true,不必对运算符右边 的表达式再进行运算;同样,对&与运算&,如果左边表达式的值为 false,则不必对右边的表达式求值, 整个表达式的结果为 false. 3.3.3 位运算 在 java 语言中,位运算符有按位与运算符(&),按位或运算符(|),按位异或运算符(^),按位 取反运算符(~),左移位运算符(&&)和右移位运算符(&&). 1.按位与运算(&):参与运算的两个值,如果两个相应位都为 1,则该位的结果为 1,否则为 0. 即:0&0=0,0&1=0,1&0=0,1&1=1 2.按位或运算(|) 参与运算的两个值,如果两个相应位都是 0,则该位结果为 0,否则为 1. 即:0|0=0,0|1=1,1|0=1,1|1=1 3.按位异或运算(^) 参与运算的两个值,如果两个相应位的某一个是 1,另一个是 0,那么按位异或(^)在该位的结果为 1. 也就是说如果两个相应位相同,输出位为 0,否则为 1. 即:0^0=0,0^1=1,1^0=1,1^1=0 4.按位取反运算(~) 按位取反运算 (~) 属于一元运算符, 它只对一个自变量进行操作 (其他所有运算符都是二元运算符) . 按位取反生成与输入位的相反的值——若输入 0,则输出 1;输入 1,则输出 0. 即:~0=1,~1=0 5.左移位运算符(&&) 运算符&&执行一个左移位.作左移位运算时,右边的空位补 0.在不产生溢出的情况下,数据左移 1 位相当于乘以 2.例如: int a=64,b; b=a&&1; //b=128 6.右移位运算符(&&与&&&) 运算符&&执行一个右移位(带符号),左边按符号位补 0 或 1 例如: int a=16,b; b=a&&2; //b=4 运算符&&&同样是执行一个右移位,只是它执行的是不带符号的移位.也就是说对以补码表示的二进制 数操作时,在带符号的右移中,右移后左边留下的空位中添入的是原数的符号位(正数为 0,负数为 1); 在不带符号的右移中,右移后左边留下的空位中添入的一律是 0. 3.3.4 类型转换 java 程序里,将一种数据类型的常数或变量转换到另外的一种数据类型,称为类型转换.类型转换有 两种:自动类型转换(或称隐含类型转换)和强制类型转换. 在实际中常会将一种类型的值赋给另外一种变量类型.如果这两种类型是兼容的,java 将执行自动类 型转换. 简单的说,当把占用位数较短的数据转化成占用位数较长的数据时,java 执行自动类型转换,不需要 在程序中作特别的说明. 例如, 下面的语句把 int 型数据赋值给 long 型数据, 在编译时不会发生任何错误: int i=10; long j=i; 假若对主数据类型执行任何算术运算或按位运算,&比 int 小&的数据(char,byte,short)在正式 执行运算之前,那些值会自动转换成 int,这样一来,最终生成的值就是 int 类型. 整型,实型,字符型数据可以混合运算.运算中,不同类型的数据先转化为同一类型,然后进行运算, 转换从低级到高级.通常,表达式中最大的数据类型是决定了表达式最终结果大小的那个类型.例如:若 将一个 float 值与一个 double 值相乘,结果就是如将一个 int 值和一个 long 值相加,则结果为 long. 不是所有的数据类型都允许隐含自动转换.例如,下面的语句把 long 型数据赋值给 int 型数据,在编 译时就会发生错误: long i=10; j=i; 这是因为当把占用位数较长的数据转化成占用位数较短的数据时,会出现信息丢失的情况,因而 不能够自动转换.这时就需要利用强制类型转换,执行非兼容类型之间的类型转换.上面的语句写成下面 的形式就不会发生错误: long i=10; int j=(int)i; 强制类型转换的格式是:(数据类型)变量名 经过强制类型转换,将得到一个在&()&中声明的数据类型的数据,该数据是从指定变量所包 含的数据转换而来的.值得注意的是,指定变量本身不会发生任何变化. 将占用位数较长的数据转化成占用位数较短的数据时,可能会造成数据超出较短数据类型的取 值范围,造成&溢出&.如: long i=; int j=(int)i; 因为转换的结果已经超出了 int 型数据所能表示的最大整数(),造成溢出,产生了错误. 3.3.5 其他运算符 1.三目条件运算符(:) 在 java 语言中,三目条件运算符(:)与 c 语言中的使用规则是完全一致的,使用的形式是: x
y:z; 上面的三目条件运算的规则是:先计算表达式 x 的值,若 x 为真,则整个三目运算的结果是表达 式 y 的值;若 x 为假,则整个三目运算的结果是表达式 z 的值. 下面的例子实现了从两个数中找出较大的数的功能. int a=3,b=4; int max=a&ba:b; max 的值为 4. 三目条件运算是可以嵌套的,如有以下的语句,则 max 表示的是 a,b,c 三个数中的最大值,其值为 5. int a=3,b=4,c=5; int max=(a&b
(a&ba:b):c; 2.复合赋值运算符 赋值运算符&=&的作用是将运算符右边表达式的值赋给左边的变量.复合赋值运算符的作 用是先进行某种运算后,再对运算的结果进行赋值操作. java 可以用一种简写形式进行运算,并同时进行赋值操作.例如,为了将 10 加到变量 x, 并将结果赋给 x,可用:x+=10(等价与 x=x+10). 实际上不只是&+&可以这么做,表 3-7 列出了 java 中的所有复合赋值运算符. 3.对象运算符(instanceof) 对象运算符 instanceof 用来判断一个对象是否是某一个类或者其子类的实例. 如果对象是该类或者 其子类的实例,返回否则返回 flase. 4.()和[ ] 括号运算符()的优先级是所有运算符中最高的,所以它可以改变表达式运算的先后顺序.在 有些情况下,它可以表示方法或函数的调用. 方括号运算符[ ]是数组运算符. 5. .运算符 .运算符用于访问对象实例或者类的类成员函数. 6.new 运算符 new 运算符用于创建一个新的对象或者新的数组. 3.3.6 运算符的优先级与结合性 优先级决定了同一表达式中多个运算符被执行的先后次序,如乘除运算优先于加减运算,同一级里 的运算符具有相同的优先级.运算符的结合性则决定了相同优先级的运算符的执行顺序. 因为括号优先级最高,所以不论任何时候,当我们一时无法确定某种计算的执行次序时,可以使用 加括号的方法来明确指定运算的顺序,这样不容易出错,同时也是提高程序可读性的一个重要方法. 3.4 流程控制语句 3.4.1 结构化程序设计的三种基本流程 1.自顶向下 2.逐步求精 3.模块化 除了以上的原则,结构化程序设计还有一个重要的规定,那就是只能使用&顺序结构&,&选择结 构&,&循环结构&这三种基本结构(或由它们派生出来的结构)来定义程序的流程. 三种基本流程控制结构示意图分别如图 3-1 所示. 3.4.2 选择结构int 如图 3-1(b)所示,选择结构又称为分支结构,是在两种或两种以上的多条执行路径中选择一条执 行的控制结构. 1.if—else 语句 if(条件表达式) { 语句组 1; } else { 语句组 2; } 在 if—else 语句中,else 部分是选择性的.经常可以看到只有 if 语句,而没有 else 语句的情 况.在这种情况下,当测试条件为假时如不需做任何事,else 部分可被省略.这时,其语法形式如下: if(条件表达式) { 语句组; } 其流程如图 3-3 所示. 2.switch 语句 switch 语句(又称开关语句)是和 case 语句一起使用的,其功能是根据某个表达式的值在多个 case 引导的多个分支语句中选择一个来执行.它的一般格式如下: switch(表达式) { case 判断值 1:语句块 1 case 判断值 2:语句块 2 case 判断值 3:语句块 3 …… case 判断值 n:语句块 n default:语句块 n+1 } switch 后面括号中表达式的值必须是符合 byte,char,short,int 类型的常量表达式,而不能用 浮点类型或 long 类型,也不能为一个字符串. 一个 switch 语句可以代替多个 if—else 语句组成的分支结构,而 switch 语句从思路上显得更清 晰. 循环结构 循环结构是程序中一种重要的基本结构,是指在一定的条件下反复执行某段程序,被反复执行的这 段程序称为&循环体&. java 中有三种语句来实现循环结构,分别是 while,do-while 和 for 语句. 它们的结构分别如图 3-4 所示. 1.while 语句 while 语句的格式如下: while(条件表达式) { 循环体语句; } 在循环刚开始时,会计算一次&条件表达式&的值.当条件为假时,将不执行循环体,直接跳转到循 环体外,执行循环体外的后续语句;当条件为真时,便执行循环体.每执行完一次循环体,都会重新计算 一次条件表达式,当条件为真时,便继续执行循环体,直到条件为假才结束循环.while 语句的结构如图 3-4(a)所示. 【例 3.12】 用 while 语句计算 10 的阶乘 2.do-while 语句 do-while 语句的格式如下: do { 循环体语句; }while(条件表达式) do-while 循环与 while 循环的不同在于:它先执行循环中的语句,然后再判断条件是否为真,如果 为真则继续循环;如果为假,则终止循环.因此,do-while 循环至少要执行一次循环语句. 3.4.3 do-while 语句的结构如图 3-4(b)所示. 【例 3.13】 用 do-while 语句计算 10 的阶乘 3.for 语句 for 语句是三个循环语句中功能最强,使用最广泛的一个.for 语句的格式如下: for(表达式 1;表达式 2;表达式 3) { 循环体语句; } 表达式 1 一般是一个赋值语句,它用来给循环控制变量赋初值;表达式 2 是一个布尔类型的 表达式,它决定什么时候退出循环;表达式 3 一般用来修改循环变量,控制变量每循环一次后按什么方式 变化.这三个部分之间用&;&分开. for 语句的结构如图 3-4(c)所示. for 语句的执行过程: (1)在循环刚开始时,先计算表达式 1,在这个过程中,一般完成的是初始化循环变量或其它变 量. (2)根据表达式 2 的值来决定是否执行循环体.表达式 2 是一个返回布尔值的表达式,若该值为假, 将不执行循环体,并退出循环;若该值为真,将执行循环体. (3)执行完一次循环体后,计算表达式 3.在这个过程中一般会修改循环变量. (4)转入第(2)步继续执行. 3.4.4 跳转语句 跳转语句用来实现循环执行过程中的流程转移. switch 语句中使用过的 break 语句就是一种跳转语 在 句.在 java 语言中,有两种跳转语句:break 语句和 continue 语句. 在 java 语言中,可用 break 和 continue 控制循环的流程.其中,break 用于强行退出循环,不执行 循环中剩余的语句.而 continue 则停止执行当前的循环,开始新的循环. break 语句和 continue 语句都有两种使用的形式:一种是不带标号的 break 语句和 continue 语句; 一种是带标号的 break 语句和 continue 语句. 标号应该定义在某一个循环语句之前,紧靠在循环语句的前方,用来标志这个循环结构,在标号和 循环之间置入任何语句都是不明智的行为. 而在循环之前设置标号的唯一理由是:我们希望在其中嵌套另一个循环或者一个开关,break 和 continue 关键字若随同标号使用,它们就会中断到存在标号的地方. 本章小结 java 语言的源程序代码由一个或多个编译单元组成,每个编译单元可包含一个包声明,任意数量的 import 语句,类和接口声明.每个 java 的编译单元可包含多个类或接口,但是每个编译单元最多只能有 一个类或者接口是公共的. 关键字对 java 技术编译器有特殊的含义,它们可标识数据类型名或程序构造名.标识符是赋予 变量,类或方法的名称,标识符可从一个字母,下划线(_)或美元符号($)开始,随后也可跟数字,字 母,下划线或美元符号,标识符是区分大小写. java 编程语言有八个原始数据类型,分别为:boolean,char,byte,short,int,long,double 和 float. 不同类型的数据既可以以常量的形式出现,也可以以变量的形式出现.常量就是指在程序执行期间其 值不能发生变化的数据,常量是有固定值的.变量的值则是可以变化的,变量实际上代表内存中指定的存 储单元.它的定义包括变量名,变量类型和作用域几个部分. 基本的运算符分包括算术运算符,关系运算符,逻辑运算符,位运算符,赋值运算符,条件运算符等. 优先级决定了同一表达式中多个运算符被执行的先后次序,结合性则决定了并列的相同优先级的运算的先 后执行顺序.应当掌握好各种运算符的优先级. 虽然 java 语言是面向对象的程序设计语言, 但是面向对象的编程也是以面向过程编程为基础而发展起 来的,在对象的方法等程序片内部,仍然需要严格遵守传统的结构化程序设计原则.所以应当熟练掌握结 构化程序设计的三种基本流程:顺序结构,选择结构和循环结构. 第 4 章 类和对象 学习导读:本章着重介绍 java 编程中类和对象等非常重要的概念. java 程序是由一个个类定义组成的,编写 java 程序的过程就是从现实世界中抽象出 java 可实现的类 并用合适的语句定义它们的过程,这个定义过程包括对类内各种属性和方法的定义,创建类的对象,也包 括类间的各种关系和接口的定义. 方法是类的主要组成部分.在一个类中,程序的作用体现在方法中.方法是 java 语言的基本构件.利 用方法可以组成结构良好的程序.本章介绍方法的构成规则和设计,使用方法的基本要点. 类:类的基本定义方法如下: [修饰符] class 类名 [extends 父类] [implements 接口名] { 类成员变量声明 类方法声明 } 关于类体 类体的定义要包括类的具体内容,包括类的属性与方法. class &class name& { &member field declarations& &member method declarations& } 私有访问控制符 private 用 private 修饰的属性或方法只能被该类自身所访问和修改, 而不能被任何其他类, 包括该类的子类, 来获取和引用. 1. 对私有数据访问的方法 例如有三个实例字段,它们含有在 employee 类的实例内部被操作的数据. p
private(私有的)关键字用来确保可以访问这些实例字段的只能是 employee 类本身的方法. 保护访问控制符 protected: 用 protected 修饰的成员变量可以被三种类所引用:该类自身,与它在同一 个包中的其他类,在其他包中的该类的子类.使用 protected 修饰符的主要作用是允许其他包中的它的子 类来访问父类的特定属性. protected 关键字为我们引入了一种名为&继承&的概念,它以现有的类为基础,并在其中加入新的 成员, 同时不会对现有的类产生影响——我们将这种现有的类称为 &基础类& &基本类& 或者 (base class) . 亦可改变那个类现有成员的行为.对于从一个现有类的继承,我们说自己的新类&扩展&(extends)了那 个现有的类. 静态方法: 声明一个方法为 static 至少有三重含义: (1)使用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名; (2)static 的方法是属于某个对象的方法,在这个对象创建时对象的方法在内存中拥有自己专用的代码 段;而 static 的方法是属于整个类的,它在内存中的代码段将随着类的定义而分配和装载,不被任何 一个对象专有; (3)由于 static 方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属 于整个类的成员变量. 抽象类与抽象方法: 抽象类: 当一个类被声明为 abstract 时, 这个类被称为是抽象类. 所谓抽象类就是没有具体实例对象的类. 针对这个问题,java 专门提供了一种机制,名为&抽象方法&.它属于一种不完整的方法,只含有一 个声明,没有方法主体.下面是抽象方法声明时采用的语法: abstract void x(); 人类就是一个典型的抽象类.我们知道,类是对象的集合,对象是类的实例化,而人类这个类却不存 在一个仅属于它的具体对象. 抽象方法: 作为类方法修饰符,abstract 则声明了一种仅有方法头,而没有具体的方法体和操作实现的抽象方 法. 可见,abstract 方法只有方法头的声明,而用一个分号来代替方法体的定义:至于方法体的 具体实现,那是由当前类的不同子类在它们各自的类定义中完成的. 最终属性:无论 static 还是 final 字段,都只能存储一个数据,而且不得改变. 许多程序设计语言都有自己的办法告诉编译器某个数据是&常数&.常数主要应用于下述两个方面: (1)编译期常数,它永远不会改变; (2)在运行期初始化的一个值,我们不希望它发生变化. 可以把一个实例字段定义为 final(不能改变的).在对象被构造时,这种字段必须被初始化.即,必 须保证在每一个构造函数结束之前其值已被设定.以后字段的值不能改变. 最终方法: 之所以要使用 final 方法,可能是出于对两方面理由的考虑. 第一个是为方法&上锁&,防止任何继承类改变它的本来含义.设计程序时,若希望一个方法的行为 在继承期间保持不变,而且不可被覆盖或改写,就可以采取这种做法. 采用 final 方法的第二个理由是程序执行的效率. 本章小结 1.关于类 必须要学会如何创建,引用和继承已建立的类.java 程序的基本单位是类.类的定义可以看作是建立对象 的原形.你建立类之后,就可用它来建立许多你需要的对象.java 把每一个可执行的成分都变成类,使面 向对象发展到极点. 类的基本定义方法如下: [修饰符] class 类名 [extends 父类] [implements 接口名] { 类成员变量声明 类方法声明 } 2.关于对象 对象是类的一个实例,类是同种对象的抽象综合,是创建对象的模板.在程序中创建—个对象将在内存中 开辟一块空间,其中包括该对象的属性和方法. 创建对象使用关键字运算符 new. 3.关于方法 方法的基本组成部分包括方法头与方法体两部分,下面便是它最基本的形式: [修饰符]返回类型方法名(参数列表) throws 例外名 1,例外名 2…… { 方法体: 局部变量声明; 语句序列; } (1)算法中需要细化的步骤,程序中重复的代码以及重载父类方法都可以定义成类的方法. (2)方法通常具有相对独立的功能和明确的输入输出接口. (3)定义方法分定义方法头和方法体两部分. (4)方法头包括方法名,参数列表,返回值类型,方法修饰符和方法抛出的例外列表.重载方法的方法头 要与其父类方法的方法头基本一致. (5)方法命名要遵循 java 对标识符的规定:以字母,$或—开头,由字母,数字组成. (6)参数列表是方法的输入接口,它列出了一系列形式参数的类型和名称,方法通过它们接收外界输入的 数据;参数列表必须括在方法名后面的小括号里,小括号是方法的标志,如果方法不需要输入数据,小括 号里可以为空. 第 5 章 继承 学习导读:本章讨论面向对象的编程(oop)及其关键技术:继承和多态,接口,包. 继承性是软件复用的一种形式,对降低软件复杂性行之有效.继承性同时是面向对象程序设计语言的特点, 采用对象但没有继承性的语言是基于对象的语言,但不是面向对象的语言,这是两者的区别. 多态性允许以统一的风格处理已存在的变量及相关的类,使增加系统中新功能变得容易. 教学重点与难点: 理解继承和复用的概念 理解父类和子类 掌握扩展类编程 理解多态性是如何扩充和维护系统性能 掌握如何建立包和接口 类的继承: 继承是关于有层次关系的类间的概念.一个类的后代可以继承它的祖先的所有变量和成员函数,就象 创建自己的一样.一个由继承得到的类为子类,被继承的类为父类或超类.由于 java 中不支持多重继承, 一个类只能有一个直接父类.父类是所有子类的公共域和公共方法的集合,每个子类是父类的特殊化.子 类继承父类的状态和行为,同时也可以修改父类,并可以添加新的状态和行为. 通过 extends 关键字来实现类之间的继承.在定义类的时使用 extends 指明新定义的类的父类,就建 立了两个类的继承关系. 子类可以从父类那里继承所有非 private 的属性和方法. 非 格式如下: class subclass extends superclass{ …… } 如果 superclass 又是某个类的子类,那么 subclass 也是那个类的间接子类.继承的权限限制后面解释. 域的继承和添加子类可以从父类那里继承所有的没有 private 和 static 修饰的域. 那么子类就无需再重复 定义. 还可以在子类中定义其独特的域变量: calss student extends person { } 方法的继承,覆盖和添加: 1,父类的非 private 方法也可以被子类自动继承. 2,子类可以重新定义与父类同名的方法,实现对其的覆盖/重置 覆盖/ 覆盖 重置(override/overlay).在覆盖父类方法时 注意应保持完全相同的方法名,返回值和参数类型列表.即重写父类中的方法. void sayhello(){ system.out.println(&hello,my name is&+name+ &.my school is &+school); } 类的继承 3,方法的重载 子类可以重载父类的方法. void sayhello(student another){ if(school= =another.school) system.out.println( & shoolmates &); } 4,方法的添加 子类可以添加一些自己的方法. 类的继承 super 的使用 1,super 访问父类的域和方法 有时候为了明确的指明父类的域和方法,可以用 super. void testsuper() { a= a=this. a=super. } 类的继承 有时使用 super 以区别同名的域和方法.如: void employed(int salaryvalue) { super.employed(salaryvalue); system.out.println(&kids should study&); } 2,使用父类的构造方法 :一般,构造方法不能继承.但是,子类可以调用父类的构造方法. student(string name,int age,string school){ super(name,age); } 字符,字符串, 第 6 章 字符,字符串,数组 学习导读:字符,字符串,数组都是使用 java 语言编制程序要经常使用的数据结构,因此,熟练掌握 这些数据结构是进一步学习 java 程序设计的必要阶段. 通过本章的学习, 应该能够熟练掌握字符, 字符串, 数组的各种基本操作. 教学重点与难点: 字符与字符串的区别 字符串常量与 string 类 字符串变量与 stringbuffer 类 数组与数组类 arrays 6.1 字符 字符是指用单引号括起来单个字符,如'a','b','a'等.这里的字符不是指占 1 个字节的 ascii 字符,而是指占 2 个字节的 unicode 字符.因为 unicode 被设计用来处理现在世界上所有书面语言中的字 符,所以一个汉字也是被当作一个字符来处理的.对于单个字符,除了有 char 这个原始类型以外,java 平台中的 java.lang 包还专门提供了一个 character 类来进行储存和操作. 6.1.1 character 类的构造函数 character 类只能用于存储和操作单一的字符数值,character 类的对象包含了单一字符数值.以下 是 character 类提供的构造函数: public character(char) 参数必须为一个 char 类型数据,它创建了一个 character 对象,该对象包含了由参数提供的数 值.一旦 character 对象被创建,它包含的数值就不能改变. 下面的语句将创建一个 character 对象 a,该对象包含字符数据'b': character a = new character('b'); 6.1.2 character 类提供的常用方法 1.public int compareto(character) compareto(character)是一个实例方法,参数必须为一个 character 对象,而不能是 char 类型数 据.该方法比较两个 character 对象包含的数值,返回一个整数表明在当前对象中的数值是否大于,等于 或者小于参数给定的数值. 2.public boolean equals(object obj) equals()是一个实例方法,用于比较两个对象.用于 character 类对象时,该方法比较当前对象 容纳的数值和参数对象容纳的数值.在两个对象容纳的数值相等的时候返回 true,否则返回 false. 3.public string tostring() 所有的类从对象类继承了 tostring 方法.tostring 是一个实例方法,它将对象转换为字符串.该 方法用于 character 类对象时,结果的字符串在长度为 1,并且它包含了有这个 character 对象容纳的数 值. 4.public char charvalue() charvalue 是一个实例方法,它返回 character 对象的字符. 5.public static boolean isuppercase(char) isuppercase(char)是一个类方法,该方法用来判断字符参数值是否为大写.当字符参数值是大写 时,返回值为 true,否则返回 false. 6.2 字符串 字符串指的是字符的序列,有两种类型的字符串:一种是创建以后不需要改变的,称为字符串常 量,在 java 中,string 类用于存储和处理字符串常量;另外一种字符串是创建以后,需要对其进行改变 的,称为字符串变量,在 java 中,stringbuffer 类用于存储和操作字符串变量. 6.2.1 字符串常量与 string 类 在 java 中,没有内置的字符串类型,字符串常量是作为 string 类的对象存在的. 1.创建 string 类对象 string 类的对象表示的是字符串常量,一个字符串常量创建以后就不能够被修改了.所以在创建 string 类对象时,通常需要向构造函数传递参数来指定创建的字符串的内容.以下是常用的 string 类构 造函数: (1)public string() 该构造函数用于创建一个空的字符串常量. (2)public string(string value) 该构造函数用于根据一个已经存在的字符串常量来创建一个新的字符串常量, 该字符串的内容和已经 存在的字符串常量一致. (3)public string(char value[]) 该构造函数用于根据一个已经存在的字符数组来创建一个新的字符串常量. 数组将在本章后面的 内容中介绍. (4)public string(stringbuffer buffer) 该构造函数用于根据一个已经存在的 stringbuffer 对象来创建一个新的字符串常量. 2.string 类对象的常用操作及方法 在 java 中,string 类包含有 50 多个方法来实现字符串的各种操作,以下介绍一些我们需要经 常使用的方法. (1)字符串的连接 public string concat(string str) 该方法的参数为一个 string 类对象,作用是将参数中的字符串 str 连接到原来字符串的后面. (2)求字符串的长度 public int length() 返回字串的长度,这里的长度指的是字符串中 unicode 字符的数目. (3)求字符串中某一位置的字符 public char charat(int index) 该方法在一个特定的位置索引一个字符串,以得到字符串中指定位置的字符.值得注意的是,在字符串中 第一个字符的索引是 0,第二个字符的索引是 1,依次类推,最后一个字符的索引是 length()-1. (4)字符串的比较 比较字符串可以利用 string 类提供的下列方法: 1)public int compareto(string anotherstring) 该方法比较两个字符串, character 类提供的 compareto 方法相似, 和 character 类提供的 compareto 方法比较的是两个字符类数据,而这里比较的是字符串数据. 其比较过程实际上是两个字符串中相同位置上的字符按 unicode 中排列顺序逐个比较的结果.如果在 整个比较过程中,没有发现任何不同的地方,则表明两个字符串是完全相等的,compareto 方法返回 0;如 果在比较过程中,发现了不同的地方,则比较过程会停下来,这时一定是两个字符串在某个位置上不相同, 如果当前字符串在这个位置上的字符大于参数中的这个位置上的字符,compareto 方法返回一个大于 0 的 整数,否则返回一个小于 0 的整数. 2)public boolean equals(object anobject) 该方法比较两个字符串,和 character 类提供的 equals 方法相似,因为它们都是重载 object 类的方 法.该方法比较当前字符串和参数字符串,在两个字符串相等的时候返回 true,否则返回 false. 3)public boolean equalsignorecase(string anotherstring) 该方法和 equals 方法相似,不同的地方在于,equalsignorecase 方法将忽略字母大小写的区别. (5)从字符串中提取子串 利用 string 类提供的 substring 方法可以从一个大的字符串中提取一个子串, 该方法有两种常用的形 式: 1)public string substring(int beginindex) 该方法从 beginindex 位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回. 2)public string substring(int beginindex, int endindex) 该方法从当前字符串中取出一个子串,该子串从 beginindex 位置起至 endindex-1 为结束.子串返的 长度为 endindex-beginindex. (6)判断字符串的前缀和后缀 判断字符串的前缀是否为指定的字符串利用 string 类提供的下列方法: 1)public boolean startswith(string prefix) 该方法用于判断当前字符串的前缀是否和参数中指定的字符串 prefix 一致,如果是,返回 true,否 则返回 false. 2)public boolean startswith(string prefix, int toffset) 该方法用于判断当前字符串从 toffset 位置开始的子串的前缀是否和参数中指定的字符串 prefix 一致,如果是,返回 true,否则返回 false. 判断字符串的后缀是否为指定的字符串利用 string 类提供的方法: public boolean endswith(string suffix) 该方法用于判断当前字符串的后缀是否和参数中指定的字符串 suffix 一致,如果是,返回 true,否 则返回 false. (7)字符串中单个字符的查找 字符串中单个字符的查找可以利用 string 类提供的下列方法: 1)public int indexof(int ch) 该方法用于查找当前字符串中某一个特定字符 ch 出现的位置.该方法从头向后查找,如果在字符串中 找到字符 ch,则返回字符 ch 在字符串中第一次出现的位置;如果在整个字符串中没有找到字符 ch,则返 回-1. 2)public int indexof(int ch, int fromindex) 该方法和第一种方法类似,不同的地方在于,该方法从 fromindex 位置向后查找,返回的仍然是字符 ch 在字符串第一次出现的位置. 3)public int lastindexof(int ch) 该方法和第一种方法类似,不同的地方在于,该方法从字符串的末尾位置向前查找,返回的仍然是字 符 ch 在字符串第一次出现的位置. 4)public int lastindexof(int ch, int fromindex) 该方法和第二种方法类似,不同的地方在于,该方法从 fromindex 位置向前查找,返回的仍然是字符 ch 在字符串第一次出现的位置. (8)字符串中子串的查找 字符串中子串的查找与字符串中单个字符的查找十分相似,可以利用 string 类提供的下列方法: 1)public int indexof(string str) 2)public int indexof(string str, int fromindex) 3)public int lastindexof(string str) 4)public int lastindexof(string str, int fromindex) (9)字符串中字符大小写的转换 字符串中字符大小写的转换,可以利用 string 类提供的下列方法: 1)public string tolowercase() 该方法将字符串中所有字符转换成小写,并返回转换后的新串. 2)public string touppercase() 该方法将字符串中所有字符转换成大写,并返回转换后的新串. (10)字符串中多余空格的去除 public string trim() 该方法只是去掉开头和结尾的空格,并返回得到的新字符串.值得注意的是,在原来字符串中间的空 格并不去掉. (11)字符串中字符的替换 1)public string replace(char oldchar,char newchar) 该方法用字符 newchar 替换当前字符串中所有的字符 oldchar,并返回一个新的字符串. 2)public string replacefirst(string regex, string replacement) 该方法用字符串 replacement 的内容替换当前字符串中遇到的第一个和字符串 regex 相一致的子串, 并将产生的新字符串返回. 3)public string replaceall(string regex, string replacement) 该方法用字符串 replacement 的内容替换当前字符串中遇到的所有和字符串 regex 相一致的子串,并 将产生的新字符串返回. 6.2.2 字符串变量与 stringbuffer 类 1.创建 stringbuffer 类对象 stringbuffer 类对象表示的是字符串变量,每一个 stringbuffer 类对象都是可以扩充和修改的字符 串变量.以下是常用的 stringbuffer 类构造函数: (1)public stringbuffer() (2)public stringbuffer(int length) (3)public stringbuffer(string str) 2.stringbuffer 类对象的常用方法 (1)stringbuffer 类对象的扩充 stringbuffer 类提供两组方法用来扩充 stringbuffer 对象所包含的字符,分别是: 1)public stringbuffer append(object obj) append 方法用于扩充 stringbuffer 对象所包含的字符,该方法将指定的参数对象转化为字符串后, 将其附加在原来的 stringbuffer 对象之后,并返回新的 stringbuffer 对象.附加的的参数对象可以是各 种数据类型的,如 int,char,string,double 等. 2)public stringbuffer insert( int 插入位置,参数对象类型,参数对象名) 该方法将指定的参数对象转化为字符串后,将其插入在原来的 stringbuffer 对象中指定的位置,并返 回新的 stringbuffer 对象. (2)stringbuffer 类对象的长度与容量 一个 stringbuffer 类对象的长度指的是它包含的字符个数;容量指的是被分配的字符空间的数量. 1)public int length() 该方法返回当前 stringbuffer 类对象包含的字符个数. 2)public int capacity() 该方法返回当前 stringbuffer 类对象分配的字符空间的数量. (3)stringbuffer 类对象的修改 public void setcharat(int index,char ch) 该方法将当前 stringbuffer 对象中的 index 位置的字符替换为指定的字符 ch. (4)字符串的赋值和加法 字符串是在程序中要经常使用的数据类型,在 java 编译系统中引入了字符串的赋值和加法操作. 6.3 数组 数组是一个长度固定的数据结构,它存储多个相同类型的数值.数组直接被 java 编程语言所支持, 但是无论数组是由原始类型构成,或者带有其它类数据,数组也是一个对象.数组是一个 object 类的一个 不明显的扩展,所以可以指定一个数组给一个类型定义为 object 的变量. 6.3.1 数组的创建和初始化 在 java 中,数组可以是任何类型的——原始类型或类类型,也就是说,数组元素可以是原始类 型的量,也可以是某一个类的对象. 在 java 中,一个数组的创建一般需要以下三个步骤: 1.数组的声明 数组元素类型 数组名[ ]; 数组元素类型 [ ] 数组名; 2.创建数组空间 数组名=new 数组元素类型[数组长度]; 创建数组空间的工作可以和声明数组的工作组合在一起,用一条语句来实现.如: int a[]; a= new int[20]; 等价于: int a[]= new int[20]; 3.初始化数组 数组中的各元素是有先后次序的,每个数组元素用数组的名字和它在数组中的位置来表达.在上 面创建的数组 a 中,a[0]表示数组 a 中的第一个元素,如 a[1]表示数组 a 中的第二个元素,依次类推,数 组中的最后一个元素为 a[19]. 初始化数组就是要使数组中的各个元素有确定的数值.如果数组元素的类型是基本数据类型,由 于基本数据类型都有缺省值,数组元素都自动初始化为缺省值,这个步骤可以省略.比如上面的数组中的 每一个元素值都是 0.对于以某个类的对象为数组元素的数组,初始化每个数组元素是必须的. 对于数组有几个需要注意的地方: (1)所有的数组都有一个属性 length,这个属性存储了数组元素的个数. (2)java 编程环境会自动检查数组下标是否越界. 6.3.2 数组的数组 java 编程语言中,因为一个数组可被声明为任何类型,所以可以创建数组的数组,数组的数组的数组, 等等. 6.3.3 复制数组 system.arraycopy(from,fromindex, to,toindex,count); 该方法从数组 from 的索引 fromindex 位置起, 复制 count 个元素到数组 to 的从索引 toindex 位置开 始的地方.这里要注意,目标数组必须在调用 arraycopy 之间分配内存,而且这个内存空间必须足够容纳 被复制的数据. 6.3.4 数组类 arrays 在&java.util&包中,专门有一个数组类 arrays,该类提供了一些方法用于排序,查找等操作,在 编制程序中可以直接使用这些方法. 1.排序 在编制程序中可以直接使用类 arrays 提供的某个 sort 方法,来对数组排序.sort 方法常见的使用形 式如下: public static void sort(xxx a[]) 该方法用改进的快速排序方法对指定的数组 a 进行排序, 其中数组 a 是类型为 char, byte, short, int, long,float,double 或者 boolean 的一个数组. sort 方法还有另外一种常见的形式: public static void sort(xxx a[],int fromindex,int toindex) 这种形式只对数组 a 中指定范围内的元素(从 a[fromindex]到 a[toindex]之间的元素,其中不包含 a[toindex])排序. 2.查找 public static int binarysearch (xxx a[],xxx v) 该方法用折半查找算法在指定的数组 a 查找值为 v 的元素.其中数组 a 是类型为 char,byte,short, int,long,float,double 或者 boolean 的一个数组,v 是与数组 a 的元素类型相同的值. 该方法如果在数组 a 查找到值为 v 的元素,则返回该元素的下标;如果没有找到匹配的元素,则返回 一个负值 r,位置-(r+1)为保持数组有序时值为 v 的元素应该插入的位置. 3.填充 public static void fill(xxx a[],xxx v) 该方法用指定的指定的值 v 来填充数组 a,执行该方法的结果是:数组 a 中所有元素的值都变成 v. 其中数组 a 是类型为 char,byte,short,int,long,float,double 或者 boolean 的一个数组. 6.3.5 命令行参数 每一个 java application 程序都有一个含有 string args[]参数的 main 方法.该方法的说明如下: public static void main(string args[]); 这个参数 string args[]表示 main 方法接收了一个字符串数组,该字符串数组就是从命令行上传递过 来的参数.由于 java application 程序可以用命令行来启动,所以命令行参数就成为向 java application 程序传递参数数据的常用而且有效的手段. 本章小结 本章小结 字符是指用单引号括起来单个字符,java 中的字符是指占 2 个字节的 unicode 字符;字符串指的是字 符的序列,用双引号括起来的字符的序列都是字符串.有两种类型的字符串:字符串常量和字符串变量. string 类用于存储和处理字符串常量;stringbuffer 类用于存储和操作字符串变量. 数组是一个长度固定的数据结构,它存储多个相同类型的数值.数组元素可以是可以是原始类型的量, 也可以是某一个类的对象. 所有的数组都有一个属性 length,这个属性存储了数组元素的个数.java 编程环境会自动检查数组下 标是否越界,在编制程序时一定要保证数组的下标不越界. 在 jdk 中专门提供了一个数组类 arrays,该类提供了用于排序,查找等操作的方法,在编制程序中可 以直接使用这些方法. 命令行参数是向 java application 程序传递参数数据的常用而且有效的手段. 第 7 章 图形用户界面的设计与实现 学习导读: 首先,我们学习一些基本的图形编程知识,包括窗口的显示及外观设置,在窗口中显示文 字和图像等; 接下来, 介绍 java 的事件处理机制, 例如如何在程序中接收并处理如键盘按键和鼠标点击等 &事件& ; 最后,系统地介绍图形用户界面中常用组件的用法,如布局管理器,文本框,复选框,菜单,对话框 等. 教学重点与难点: 框架的组成及外观 在框架中显示文本和图形 字体和颜色的设置 java 的事件处理机制 窗口事件,焦点事件,键盘事件,鼠标事件的处理 swing 各种组件的用法 7.1 图形用户界面概述 java1.0 的出现带来了抽象窗口工具箱(awt).设计目标是希望构建一个通用的 gui,使得利用它编写的程 序能够运行在所有的平台上,以实现 sun 公司提出的口号&一次编写,随处运行&. 在 java1.2 中,sun 公司推出了新的用户界面库:swing.相对 awt 来说,swing 功能更强大,使用更方便, 它的出现使得 java 的图形用户界面上了一个台阶. 但是, swing 并没有代替 awt. java1.1 中, 事件处理模型有了根本改变. 在 awt swing 使用的仍然是 java1.1 的事件处理模型. 7.2 图形用户界面 在 java 1.0 中,图形用户接口(gui)库最初的设计目标是让程序员构建一个通用的 gui,使其在所 有平台上都能正常显示.但遗憾的是,这个目标并未达到.事实上,java 1.0 版的&抽象 windows 工具包& (awt)产生的是在各系统看来都同样欠佳的图形用户接口.除此之外,它还限制我们只能使用四种字体, 并且不能访问操作系统中现有的高级 gui 元素.同时,jave1.0 版的 awt 编程模型也不是面向对象的,极 不成熟.这类情况在 java1.1 版的 awt 事件模型中得到了很好的改进,例如:更加清晰,面向对象的编程, 遵循 java beans 的范例,以及一个可轻松创建可视编程环境的编程组件模型. 图形用户界面 java1.2 以后的版本为老的 java 1.0 awt 添加了 java 基础类(awt),这是一个被称为&swing&的 gui 的一部分.丰富的,易于使用和理解的 java beans 能经过拖放操作 (像手工编程一样的好),创建出能使程序员满意的 gui. java 的主要设计目的之一是建立程序片,也就是建立运行在 web 浏览器上的小应用程序.由于它们必 须是安全的,所以程序片在运行时必须加以限制.无论怎样,它 们都是支持客户端编程的强有力的工具,一个重要的应用便是在 web 上.awt 用来为可靠的程序建立 gui 接口. awt 组件: gui 是使用图形的方式借助菜单,按钮等标准界面元素和鼠标操作,帮助用户方便的向计算机系统发出指 令,启动操作,并将系统运行的结果同样以图形的方式显示给用户.简单来讲,图形用户界面就是一组图 形界面成分和界面元素的有机结合,这些成分和元素 之间不但外观上有着包含,相邻等等物理关系,同时内在的也有包含,调用等逻辑关系.它们相互作用, 传递消息,组成一个能响应特定事件,具有一定功能的图形界面系统. 在 java 中,处理图形用户界面的类库主要是 java.awt 包和 javax.swing 包. awt 是 abstract window toolkit 的缩写.它使得开发人员所设计的界面独立于具体的界面实现,即开发 人员用 awt 开发出来的图形用户界面可以适用于所有的平台系统.但是 目前的问题:在不同平台可能显示等方面的效果不太一样. javax.swing 包是 jdk1.2 以后版本所引入的图形用户界面类库,swing 是功能强大的 jfc 的一部分, 其中定义的 swinggui 组件相对于 java.awt 包的各种 gui 组件增加了许 多功能. 设计和实现图形用户界面主要有: 1) 创建组件:创建组成界面的各种元素. 2) 指定布局:根据具体的需要排列它们的位置关系. 3) 响应事件:定义图形用户界面的事件和各界面元素对不同事件的响应,从而实现图形用户界面与用户的 交互功能. awt 组件分类 构 成 gui 的 各 种 元 素 称 为 组 件 . java 要 显 示 的 gui 组 件 都 是 , 抽 象 类 java.awt.component 或 java.awt.menucomponent 的子类. 组件分为容器(container)类和非容器类两大类.容器本身也是组件,但其中可以包含其他的组件,也可以 包含其他的容器.非容器类组件种类很多,比如按钮,标签等等. 图形用户界面 容器又分为顶层容器和非顶层容器两大类.顶层容器是可以独立的窗口,顶层容器的类是 window,window 的重要子类是 frame 和 dialog.非顶层容器不是独立 窗口, 必须位于窗口之内, 它包括 panel 及 scrollpanel 等. panel 的一个非常重要的子类是 applet. panel 和 applet 的容器都是没有边框的;scrollpanel 是可以自动处理滚动操作的容器;window,frame,dialog 和 filedialog 是一组大都含有边框,并可以移动,放大,缩小,关闭的容器. container 类:容器类的特点是:容器中可以容纳其他组件,使用 add()方法,可以将其他对象加入到容器 中,然后组件的位置和尺寸由布局管理器决定.如果要人工控制 组件在容器中的大小位置,可以取消布局管理,然后使用 component 类的成员方法: setlocation(), setsize(), setbounds()来设定其大小和位置. container 类的 2 个重要子类:frame 和 panel. frame:它是 window 类的子类;显示的效果是一个窗口,带有标题和尺寸重置标志;默认初始化不可见, 所以要用 setvisible(true)来使之变成可见;其默认的布局管理器是 broderlayout,可以用 setlayout() 改变. panel:它不是顶层窗口,必须位于窗口或其他容器之内;提供可以容纳其他组件,在程序中经常用于 布局和定位;默认的布局管理器是 flowlayout(),可以用 setlayout()来改变.另外,它还可以采用和所 在容器不同的布局管理器. 非 container 类又称为控制组件,与容器不同,它里面不再包含其他组件.控制组件的作用是完成与 用户的交互,包括接收用户的一个命令,接收用户的一个文本或者输入等 等,常用的控件组件有:button,单选按钮,复选按钮 checkbox,列表框 list,下拉框 choice,文本框 textfiled,文本区域 textarea. 使用控件,通常的步骤:创建某控制组件类的对象,指定其大小等.使用某种布局,将该组件对象加入到 某容器中的某个指定的位置.将该组件对象注册给它所能产生的事件对应的事件监听者,重载事件处理方 法. component 的方法:component 方法是所有组件和容器的抽象父类,其中定义了一些每个容器和组件都可能 用道的方法: public void add(popupmenu popup); public font getfont(); public color getforeground(); public graphics getgraphics(); public void repaint(int x,int y,int width,int height); public void setbackground(color c);…… 布局管理:将一个组件加入容器中时,布局控制决定了所加入的组件的大小和位置.如果将一个容器的 布局管理器设为 null,则要设定容器中每个对象的大小和位置.而布局管理器能自动设置容器中的}

我要回帖

更多关于 java实现系统入口程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信