版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言与面向对象程序设计教程主讲:计算机科学与技术系
周华平E-mail:hpzhou@2005-5-1第一章软件开发基础与Java语言概述1.1软件开发基础1.1.1软件运行原理计算机系统是由硬件和软件两大部分组成。硬件:中央处理单元、数学逻辑单元、内存单元、输入单元、输出单元和外存单元组成。软件:由程序、运行程序所需要的数据和文档三部分组成。软件运行原理:软件加载到内存,CPU依次从内存取出每一条指令顺序执行,从而完成程序员事先编写好的各种数据的处理、输入、输出等操作。1.1.2操作系统与计算结构的发展(1)操作系统简介功能:为应用程序提供处理机管理、内存管理、输入输出、设备管理及文件管理等,是应用程序与硬件之间的"接口"。
PC机上常用的操作系统:DOS、Windows98、WindowsNT、UNIX、Linux等。直接运行于裸机的应用软件:应用逻辑→内存管理→输入输出→设备管理→硬件(裸机)操作系统管理的应用软件:应用逻辑→操作系统→硬件(裸机)
(2)计算结构的发展(计算结构是指应用系统的系统体系结构,就是系统层次、模块结构)
a.主机-终端模式:集中运算和集中管理是主机-终端模式的特点。一台主机带多个终端。主机负担太重。
b.单机模式:个人计算机(PC)迅速发展,软件运行以孤立的机器进行。
c.客户机/服务器模式:具有分布运算和分布管理的特点。即服务器进行汇总、综合处理;客户机实现与用户的对话及客户端的工作处理。
d.浏览器/N层服务器模式:具有分布运算和集中管理的特点。由浏览器提供统一的用户界面。1.1.3软件开发过程与程序设计语言(1)软件开发过程操作系统与系统软件的开发要求更加严谨、高效、安全和方便;开发人员需要具有精深的专业知识与技能。应用软件的开发是针对某个具体问题或实体,专用性强,软件间的差异性大,需求量最多。应用软件开发能力一般包括:
a.了解应用软件的背景知识
b.分析和了解应用软件的功能和要求
c.确定应用软件的计算结构
d.熟悉应用软件的工作运行环境
e.掌握开发应用软件的工具
(2)程序设计语言及其发展
a.面向机器的语言
b.面向过程的语言
c.面向对象的语言1.2Java语言概述1.2.1Java的发展历史
1995年5月23日,Java这种定位于网络应用的程序设计语言正式推出。
Sun公司是这样描述:Java是一种简单的、面向对象的、强壮的、安全的、可移植的、高性能的、体系结构中立的、解释型的、多线索的、动态的语言。1.2.2Java程序的开发过程与运行环境
1、编写源程序例1.1第一个Java程序:MyFirstJavaProgram.javaimportjava.io.*; //引入以java.io
开头的模块(统称为java.io
包)到程序中。publicclassMyFirstJavaProgram //类头,用关键字class来标志一个类定义的开始。{ //类体由大括号括起来。
publicstaticvoidmain(Stringargs[])//main方法是主类标志
{
System.out.println("ThisismyfirstJavaprogram!");//方法体
}}
几个入门概念:(1)Java语言标识符的字母区分大小写;(2)不允许在一个类的内部再定义另一个类,各个类之间必须是平行的,而不能嵌套;(3)一个程序可以由一个或多个类组成,其中必须有也只能有一个主类。(4)源文件名必须与程序的主类名一致,并且以.java为其后缀。
2、编译生成字节码
Java引入编译的主要原因:(1)保证程序的语法正确性;(2)通过编译引入Java类库中已编写好的模块。(3)编译成功的结果将是一个或多个字节码文件,每个字节码文件对应源程序中定义的一个类,该文件的名字就是它所对应的类的名字,并以.class为统一的后缀名。
3、运行运行一个编译好的Java字节码程序,需要调用Java的解释器软件java.exe。
解释运行的三个阶段:(1)载入:Java解释器中的类载入器将字节码文件加载到内存(网上运行程序则通过网络下载到本地内存);(2)代码校验:Java解释器中的代码检验器检查这些字节码的合法性;(3)解释执行:合法的字节码程序由Java解释器逐句地解释运行。1.2.3Applet与ApplicationJavaApplication程序的主要特点:(1)JavaApplication程序是独立完整的程序。(2)在命令行调用独立的解释器软件即可运行JavaApplication程序。(3)JavaApplication程序的主类必须有一个定义为:
publicstaticvoidmain(Stringargs[])的main方法,是JavaApplication程序执行的入口点。如例1.1例1.2第一个JavaApplet程序:MyFirstJavaApplet.javaimportjava.applet.Applet; //引入类库中定义好的java.applet.Applet类;importjava.awt.Graphics; //引入java.awt.Graphics
类(图形类)publicclassMyFirstJavaAppletextendsApplet //主类必须是Applet类的子类{publicvoidpaint(Graphicsg){
g.drawString("ThisismyfirstJavaApplet!",15,20);}}
(1)JavaApplet程序是在WWW浏览器环境下运行,即不是完整独立运行程序;(2)运行JavaApplet程序的解释器不是独立的软件,而是嵌在WWW浏览器中做为浏览器软件的一部分。(3)JavaApplet程序中不需要有main方法,但是JavaApplet程序的主类必须是类库中已定义好的类java.applet.Applet的子类。(4)JavaApplet程序可以直接利用浏览器或AppletViewer
提供的图形用户界面,而JavaApplication程序则必须另外书写专用代码来营建自己的图形界面。(5)JavaApplet更多的具体体现状态和状态之间的切换,而不是固定的顺序化的执行过程。第二章Java语言基础2.1Java程序的输入输出1.字符界面下的输入输出:JavaApplication例2.1字符界面下基本输入输出程序:SimpleCharInOut.javaimportjava.io.*; //引入java.io.*系统输入输出类包publicclassSinpleCharInOut //类头{ publicstaticvoidmain(Stringargs[]) //main方法,说明该为主类
{ charc=''; //定义字符型变量,赋初值
System.out.print("Enteracharacterplease:");//显示提示信息
try{c=(char)System.in.read();//接受用户输入的字符并保存在变量c中
}catch(IOExceptione){} System.out.println(“You’veenteredcharacter:”+c); //向屏幕输出变量c中保存的字符} }说明:
a."="是Java语言的赋值号;
b.System.in是java.io
包中InputStream
类的对象,代表系统的标准输入,即键盘;read()是读数据方法。
c.System.out是java.io
包中OutputStream
类的对象,代表系统的标准输出,即显示器;print()是输出方法。
d.当程序执行到read()方法就暂停下来,等待用户从键盘输入一个字符并按回车键。
e.read()方法读入的字符是整型int
,采用强制类型转换(char)成为字符型char。
f.字符串连接运算符+。2、图形界面下的输入输出:JavaApplet例2.2图形界面下的基本输入输出程序:SimpleGraphicsInOut.javaimportjava.applet.Applet;importjava.awt.*;publicclassSimpleGraphicsInOutextendsApplet{ Labelprompt; //定义显示提示信息的标签对象
TextFieldinput; //定义接受用户键盘输入的文本区域对象
Labeloutput; //定义回显用户输入字符的标签对象
publicvoidinit() //定义浏览器打开Applet后的初始操作
{prompt=newLabel("Enteracharacterpleasea:"); //创建提示标签
input=newTextField(3); //创建输入区域
input=newTextField(3); output=newLabel(""); //创建输出标签
add(prompt); //将提示标签加入图形界面
add(input); //将输入区域加入图形界面
add(output); //将输出标签加入图形界面
} publicbooleanaction(Evente,Objecto)//定义对用户输入的响应
{
output.setText("You'veenteredcharacter:"+o.toString());
//在输出标签回显输入内容
returntrue; }}说明:
a.Label:java.awt
包中的Label类,用于定义并创建图形界面的显示标签对象。
b.TextFeild:java.awt
包中的TextFeild类,用于定义并创建图形界面的单行文本输入区域对象,用来接受用户输入的字符。
c.add:将Label、TextFeild
等所创建的对象加入到图形界面的方法。
d.init():负责对JavaApplet程序进行初始化的方法。
e.action():负责对用户的输入作响应的方法。例2.3对应SimpleGraphicsInOut.java
程序的HTML文件:SimpleGraphicsInOut.html<HTML><HEAD><TITLE>SimpleGraphicsInOut</TITLE></HEAD><BODY><appletcode=SimpleGraphicsInOutwidth=300height=200VIEWASTEXT></applet></BODY></HTML>3、图形界面下的输入输出:JavaApplication例2.4图形界面下的Application程序:GraphicsApplicationInOut.javaimportjava.awt.*; //引入java.awt
包中的所有类publicclassGraphicsApplctInOut
//定义主类GraphicsApplicationInOut{ publicstaticvoidmain(Stringargs[])//定义主类中的main方法
{
ApplctFrame
MyFrame=newApplctFrame();//创建对象myFrame,形成图形界面
}}classApplctFrameextendsFrame //定义Frame类的子类applictFrame{ Labelprompt; //定义提示标签对象
TextFieldinput; //定义输入单行文本区域对象
Labeloutput; //定义输出标签对象
ApplctFrame() //对ApplctFrame对象初始化{super("ApplicationGraphicsFrame");//调用父类方法,指定图形界面窗口的标题setLayout(new
FlowLayout()); //指定图形界面窗口中各部件的排列方式prompt=newLabel("Enteracharacterplease:"); //创建提示标签对象input=newTextField(4); //创建输入单行文本区域对象output=newLabel(""); //创建输出标签对象
add(prompt); //将提示标签加入窗口
add(input); //将输入区域加入窗口
add(output); //将输出标签加入窗口
pack(); //使上述三部件间紧密相连
show(); //显示图形窗口
} publicbooleanaction(Evente,Objecto) //定义对用户输入的响应
{
output.setText("You'veenteredcharacter:"+o.toString()); //在输出标签回显输入内容
returntrue; }publicboolean
handleEvent(Evente)//响应用户关闭窗口的操作
{if(e.id==Event.WINDOW_DESTROY)//如果事件的id是关闭窗口,则执行退出。
System.exit(0); returnsuper.handleEvent(e); }}解释:
1、JavaApplication应用程序下如何创建图形界面示例;
2、程序由两个类构成:(1)主类publicclassGraphicsApplication
(包含main方法:publicstaticvoidmain(Stringargs[]))
(2)用户自定义类classApplctFrameextendsFrame(继承父类Frame的属性与方法)
3、Frame类:框架(frame)是一个具有附加属性的空口,这些属性包括标题栏、菜单栏、边界、光标和图标映象。是类库java.awt
包中的类。
4、自定义类ApplctFrame
中的方法:(1)构造方法ApplctFrame():在创建对象的同时完成对ApplctFrame
对象初始化;(2)action()方法:当一个动作事件发生时被调用,即定义为处理所有用户产生的事件。(3)handleEvent()方法:当组件接收到事件时被调用,被定义为可以处理所有类型的事件。(4)action()方法和handleEvent()方法都是组件Component类中的方法;
5、Event类:事件(event)在AWT组件中流动的事件由Event类的对象表示。是类库java.awt
包中的类;
6、Component类:组件(component)是一种用户界面对象,它可以显示在屏幕上,还可以和用户交互。这样的用户界面对象包括按钮、滚动条和文本域。是类库java.awt
包中的类;
7、JavaApplication程序从主类的main()方法开始运行。创建一个用户自定义的ApplictFrame类的对象,即创建一个用户图形界面窗口;2.2变量与数据类型2.2.1变量Java中的变量定义: a.定义变量的名字
b.定义变量的数据类型如: intx; charch1,ch2;
其中,x、ch1、ch2为变量名,即变量标识符;int
、char数据类型;标识符命名规定:(1)标识符可以由字母、数字、下划线或$符号组成,对标识符的长度没有特别限定。(2)标识符必须以字母、下划线或$符开头。(3)标识符区分大小写。例2.5定义简单变量:VariableDefinition.javaimportjava.awt.*;importjava.applet.Applet;publicclassVariableDefinitionextendsApplet //定义主类VariableDefinition,是Applet的子类{
intx=10; //定义整型变量x并赋初值
charchar_MyClass_Flag='R'; //定义子符型变量并赋初值
Labeloutput1; //定义用来显示输出结果的两个标签
Labeloutput2;
publicvoidinit() //创建标签,指定其显示内容
{ //并加入主类的Applet图形界面显示
output1=newLabel("定义int
类型变量"+"x,初值为"+x); output2=newLabel("定义char类型变量" +"char_MyClass_Flag,初值为"+char_MyClass_Flag); add(output1); add(output2); }}例2.6使用变量简化程序:VariableDefinition2.javaimportjava.awt.*;importjava.applet.Applet;publicclassVariableDefinition2extendsApplet{
intx=10; charchar_MyClass_Flag='F'; Stringprompt1="定义"; //定义三字符串变量
Stringprompt2="类型变量"; //把固定的字符串常量赋给它们
Stringprompt3=",初值为"; //使编程更加方便
publicvoidpaint(Graphicsg) { g.drawString(prompt1+"int"+prompt2+"x"+prompt3+x,10,20); g.drawString(prompt1+"char"+prompt2+"char_MyClass_Flag" +prompt3+char_MyClass_Flag,10,50); }}注意:程序中的变量必须先定义后使用,变量的有效范围在定义它的语句所在的大括号内部(包括其中嵌套的大括号内部),一旦出了这个范围,变量就失效了。2.2.2数据类型1、布尔型boolean
取值:true(真)false(假)例2.8布尔型变量的定义与初值设备:ShowBoolean.javaimportjava.awt.*;importjava.applet.Applet;publicclassShowBooleanextendsApplet{
booleanb1=true;
booleanb2; //默认初值falseStringprompt1="boolean";Stringprompt2="类型变量";Stringprompt3=",初值为";publicvoidpaint(Graphicsg){g.drawString(prompt1+prompt2+"b1"+prompt3+b1,10,20);g.drawString(prompt1+prompt2+"b2"+prompt3+b2,10,50);}}2、整型int
与字符型char
*短整型short 16bit
*整型int 32bit
*长整型long 64bit
*字符型char 16bit
**整形变量的使用必须注意最大值和最小值,以免出现溢出。**字符型变量的取值可以使用字符常量(用单引号括起来的单个字符),也可以使用整型常数。例:charc_char='A';charc_int=65;
注意:整型变量必须强制类型转换才能向字符变量赋值。如下是错误的:
inti=65; charc_char=i;//i是整型变量,c_char是字符型变量,无强制类型转换,错误。正确语句如下:
inti=65; charc_char=(char)i; //强制类型转换3、浮点型float、double
*浮点型 float 32bit
*双精度型 double 64bitfloat和double都是浮点数据类型,程序中使用它们来代表小数。科学计数法表示小数:
3.14E3 表示 3140 3.14E-2 表示 0.0314float浮点数的表示方法如: 0.0314f 或 0.0314F 3.14E-2f 或 3.14E-2Fdouble浮点数的表示方法如: 0.0314d 或 0.0314D 3.14E-2d 或 3.14E-2D
如果一个数没有带f(F)或d(D)后缀时,系统默认为double浮点数。注意:将一个double类型的数据赋给float类型变量,将产生编译错误。如
floatf=3.14; //编译错误,因为3.14默认为double数据类型。
floatf=3.14F; //正确的写法4、类型转换(1)隐含类型转换:凡是把占用比特数较少的数据转换成占用比特数较多的数据为隐含类型轮换。(2)强制类型转换格式:(数据类型)变量名 强制类型转换是将变量名的数据类型转换成括号里指定的数据类型。注意:强制类型转换应防止数据溢出。如
longl=5000000000;
inti=(int)l;//因为l=5000000000的值大于i的最大值2147483647溢出错误。2.3表达式与运算符2.3.1算术运算双目运算符:+、-、×、/、%分别为:加、减、乘、除、取余算术运算,用于整型与浮点型数据的运算。单目运算符:自加++;自减--。例2.9算术运算:ArithmeticOperation.javaimportjava.applet.Applet;importjava.awt.*;publicclassArithmetcOperationextendsApplet{
inti_x=1;
inti_y=2; doubled_x=3.1415926; doubled_y=2.41; publicvoidpaint(Graphicsg)
{
g.drawString(i_x+"+"+i_y+"="+(i_x+i_y),10,20);
g.drawString(i_x+"-"+i_y+"="+(i_x-i_y),10,40);
g.drawString(i_x+"*"+i_y+"="+(i_x*i_y),10,60);
g.drawString(i_x+"/"+i_y+"="+(i_x/i_y),10,80);
g.drawString(i_x+"%"+i_y+"="+(i_x%i_y),10,100);
g.drawString(d_x+"+"+d_y+"="+(d_x+d_y),10,140);
g.drawString(d_x+"-"+d_y+"="+(d_x-d_y),10,160);
g.drawString(d_x+"*"+d_y+"="+(d_x*d_y),10,180);
g.drawString(d_x+"/"+d_y+"="+(d_x/d_y),10,200);
g.drawString(d_x+"%"+d_y+"="+(d_x%d_y),10,220); }}2.3.2逻辑运算与关系运算1、关系运算关系运算符:==、!=、>、<、>=、<=分别代表等于、不等于、大于、小于、大于等于、小于等于说明:(1)判断两数相等的等于运算符由两个等号连缀而成。一个等号是赋值号。(2)参与比较大小的两个操作数或表达式的值可以是整型,也可以是浮点型。但是浮点型数之间作等于比较是无意义的,因为运算总有误差,通常没有绝对相等的浮点数。例2.10关系运算:RelationOperation.javaimportjava.applet.Applet;importjava.awt.*;publicclassRelatinOperationextendsApplet{
inti_x=1;
inti_y=2; doubled_x=3.1415926; doubled_y=2.41; publicvoidpaint(Graphicsg) {
g.drawString(i_x+">"+i_y+"="+(i_x>i_y),10,20);
g.drawString(i_x+"<"+i_y+"="+(i_x<i_y),10,40);
g.drawString(i_x+"=="+i_y+"="+(i_x==i_y),10,60);
g.drawString(i_x+"!="+i_y+"="+(i_x!=i_y),10,80);
g.drawString(i_x+">="+i_y+"="+(i_x>=i_y),10,100);
g.drawString(i_x+"<="+i_y+"="+(i_x<=i_y),10,120);
g.drawString(d_x+">"+d_y+"="+(d_x>d_y),10,160);
g.drawString(d_x+"<"+d_y+"="+(d_x<d_y),10,180); }}2、逻辑运算例2.11逻辑运算:LogicalOperation.javaimportjava.applet.Applet;importjava.awt.*;publicclassLogicalOperationextendsApplet{
booleanb1=true;
booleanb2=false;
intx1=3,y1=5;
intx2=3,y2=5;
booleanb3=x1>y1&&x1++==y1--;
booleanb4=x2>y2&x2++==y2--;
publicvoidpaint(Graphicsg) {
g.drawString(b1+"&"+b2+"="+(b1&b2),10,20);
g.drawString(b1+"|"+b2+"="+(b1|b2),10,40);
g.drawString(b1+"^"+b2+"="+(b1^b2),10,60);
g.drawString("!"+b2+"="+(!b2),10,80);
g.drawString(b1+"&&"+b2+"="+(b1&&b2),10,100);
g.drawString(b1+"||"+b2+"="+(b1||b2),10,120);
g.drawString("x="+x1+",y="+y1,10,140);
g.drawString("(x>y&&x++==y--)="+b3+";x="+x1+",y="+y1,10,160);
g.drawString("(x>y&x++==y--)="+b4+";x="+x2+",y="+y2,10,180); }}2.3.3位运算2.3.4其他运算符
1、三目条件运算符?:
使用格式:x?y:z
其规则是,先计算表达式x的值,若x为真,则整个三目运算的结果为表达式y的值;若x为假,则整个运算结果为表达式z的值。例:intx=5,y=8,z=2;
intk=x<3?y:z;//x<3为假,所以k取z的值,结果为2.
inty=x>0?x:-x;//y为x的绝对值。
2、复杂赋值运算符(材料P.39表2.5复杂赋值运算符)
3、括号与方括号括号运算符()在某些情况下起到改变表达式运算先后顺序的作用;在另一些情况下代表方法或函数的调用。它的优先级在所有的运算符中是最高的。方括号运算符[]是数组运算符,它的优先级也是很高,其具体使用方法将在后面介绍。
4、对象运算符对象运算符instanceof
用来测定一个对象是否属于某一个指定类或其子类的实例,如果是则返回true,否则返回false。
例:booleanb=MyObject
instanceof
MyClass;2.3.5运算符的优先级与结合性运算符的优先级决定了表达式中不同运算执行的先后顺序。如关系运算符的优先级高于逻辑运算符。运算符的结合性决定了并列的相同运算的先后执行顺序。如对于左结合的“+”,x+y+z等价于(x+y)+z,对于右结合的“!”,!!x等价于!(!x)。第三章Java语言的结构化程序设计3.1算法与结构化程序设计1、算法任何可计算性问题的解决过程都可以转化为按指定顺序执行的一系列操作过程。由"(1)可执行的操作;(2)执行操作的顺序"组成解决问题的过程称为算法。2、结构化程序设计的三种基本结构顺序结构:程序中的语句按它们书写的顺序一句接一句地执行。分支结构:程序根据条件,判断执行流程。循环结构:程序反复执行某段程序块,直到结束条件满足。结构化编程原则:自顶向下、逐步求精。3.2分支控制结构
Java中的分支语句有两个,一个是负责实现双分支的if语句,另一个是负责实现多分支的开关语句switch。3.2.1if语句
if语句的一般形式是:
if(条件表达式)语句块;//if分支
else
语句块;//else分支其中条件表达式用来选择判断程序的流程走向,在程序的实际执行过程中,如果条件表达式的取值为真,则执行if分支的语句块,否则执行else分支的语句块。在编写程序时,也可以不书写else分支,此时若条件表达式的取值为假,则绕过if分支直接执行if语句后面的其他语句。语法格式如下:
if(条件表达式)语句块;//if分支其他语句;补充例子:FindMax.javaimportjava.applet.*;importjava.awt.*;importjava.awt.event.*;publicclassFindMaxextendsAppletimplementsActionListener{Labelresult;
TextFieldin1,in2,in3;Buttonbtn;
inta=0,b=0,c=0,max;
publicvoidinit(){result=newLabel("请输入三个待比较的整数");in1=newTextField(5);in2=newTextField(5);in3=newTextField(5);
btn=newButton("比较");
add(in1);add(in2);add(in3);
add(btn);add(result);
btn.addActionListener(this);}
publicvoidactionPerformed(ActionEvente){a=Integer.parseInt(in1.getText());b=Integer.parseInt(in2.getText());c=Integer.parseInt(in3.getText());if(a>b)if(a>c)max=a;elsemax=c;elseif(b>c)max=b;elsemax=c;
result.setText("三个数中最大值是:"+max);}}例3.1求某班的平均成绩、及格人数和不及格人数。importjava.applet.*;importjava.awt.*;publicclassClassScoreextendsApplet //定义主类{ Labelprompt; //定义提示标签
TextFieldinput; //定义输入区域
int
PassCount=0; //定义并初始化及格计数器
int
FailureCount=0; //定义并初始化不及格计数器
int
TotalNumber=0; //定义并初始化总人数计数器
int
TotalScore=0; //定义并初始化总分累计器
doubleAverageScore=0; //定义并初始化班平均分
publicvoidinit() { prompt=newLabel("Enternextstudentscore(-1forreset):"); input=newTextField(4); add(prompt); add(input); } publicvoidpaint(Graphicsg) //显示更新后的各项统计数据
{
g.drawString("Totalstudentnumberis:"+TotalNumber,10,80);
g.drawString("Thepassnumberis:"+PassCount,10,100);
g.drawString("Thefailurenumberis:"+FailureCount,10,120);
g.drawString("Theaveragescoreofwholeclassis:"+AverageScore,10,140); }
publicbooleanaction(Evente,Objecto) {
intscore; if(e.target==input) { score=Integer.parseInt(input.getText()); if(score==-1) {
PassCount=0;
FailureCount=0;
TotalNumber=0;
TotalScore=0;
AverageScore=0; }
else { if(score>=60)
PassCount++; else
FailureCount++;
TotalNumber++;
TotalScore+=score;
AverageScore=TotalScore/TotalNumber; }
input.setText(""); repaint(); } returntrue; }}3.2.2switch语句
switch语句是多分支的开关语句,它的一般格式如下:switch(表达式){case判断值1:语句块1//分支1case判断值2:语句块2//分支2......case判断值3:语句块n//分支ndefault:语句块n+1//分支n+1}
switch语句在执行时,首先计算表达式的值,这个值必须是整型或字符型,同时应与各个case分支的判断值的类型相一致。计算出表达式的值之后,将它先与第一个case分支的判断值相比较,若相同,则程序的流程转入第一个case分支的语句块;否则,再将表达式的值与第二个case分支相比较......依此类推。如果表达式的值与任何一个case分支都不相同,则转而执行最后的default分支;在default分支不存在的情况下,则跳出整个switch语句。
需要注意的是,switch语句的每一个case判断,都只负责指明流程分支的入口点,而不负责指定分支的出口点,分支的出口点需要编程人员用相应的跳转语句来标明。如下例子:switch(MyGrade){case'A':MyScore=5;break;case'B':MyScore=4;break;case'C':MyScore=3;break;default:MyScore=0;}break是流程跳转语句,它定义了分支的出口,多分支开关语句的结构就完整了。3.3循环控制结构循环结构是在一定条件下,反复执行某段程序的流程结构,被反复执行的程序被称为循环体。1、while语句
while语句的一般语法格式如下:
while(条件表达式)循环体其中条件表达式的返回值为布尔型,循环体可以是单个语句,也可以是复合语句块。
while语句的执行过程是先判断条件表达式的值,若为真,则执行循环,循环体执行完之后再无条件转向条件表达式再做计算与判断;当计算出条件表达式为假时,跳过循环体执行while语句后的语句。补充例题求一个水仙花数程序Narcissus.java。水仙花数是三位数,它的各位数字的立方和等于这个三位数本身。importjava.io.*;publicclassNarcissus{publicstaticvoidmain(Stringargs[]){
inti,j,k,n=100,m=1;while(n<1000){ i=n/100; j=(n-i*100)/10; k=n%10; if(Math.pow(i,3)+Math.pow(j,3)+Math.pow(k,3)==n)
System.out.println("找到第"+m+"个水仙花数:"+n); n++;}}}2、do-while语句
do-while语句的一般语法结构如下:
do
循环体
while(条件表达式);
do-while语句的使用与while语句很类似,不同的是不像while语句是先计算条件表达式的值,而是无条件地先执行一遍循环体,再来判断条件表达式。若表达式的值为真,则再运行循环体,否则跳出do-while循环,执行下面语句。可以看出,do-while语句的特点是它的循环体将至少被执行一次。补充例题:从键盘接受用户输入的一个字符后输出这个字符整型数值程序showCharValue.javaimportjava.io.*;publicclassshowCharValue{ publicstaticvoidmain(Stringargs[]) {charch;try{
System.out.println("请输入一个字符,以'#'结束");
do {
ch=(char)System.in.read();
System.out.println("字符"+ch+"的整数值为"+(int)ch); System.in.skip(2); //跳过回车键
}while(ch!='#');}catch(IOExceptione) {
System.err.println(e.toString()); } }}3、for语句
for语句是Java语言三个循环语句中功能较强,使用较广泛的一个。for语句的一般语法如下:
for(表达式1;表达式2;表达式3)循环体其中表达式2是返回布尔值的条件表达式,用来判断循环是否继续;表达式1完成初始化循环变量和其他变量的工作;表达式3用来修整循环变量,改变循环条件,三个表达式之间用分号隔开。
for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作;再判断表达式2的值,若为真,则执行循环体,执行完循环体后再返回表达3,计算并修改循环条件,这样一轮循环就结束了。第二轮循环从计算并判断表达式2开始,若表达式的值仍为真,则继续循环,否则跳出整个for语句执行下面的句子。for语句的三个表达式都可以为空,但若表达式2也为空,则表示当前循环是一个无限循环,需要在循体中书写另外的跳转语句终止循环。补充例题:输出1000之内的所有完全数程序PerfectNum.java
。完全数是指等于其所有因子和(包括1但不包括这个数本身)的数。importjava.io.*;publicclassPerfectNum{ publicstaticvoidmain(Stringargs[]) {
intcount=1; for(inti=1;i<1000;i++) {
inty=0; for(intj=1;j<i;j++) if(i%j==0) y+=j;
if(y==i) { System.out.print(i+String.valueOf('\t')); count++; if(count%3==0)
System.out.println(); } } try{ System.in.read(); }catch(IOExceptione){} }}4、循环中的跳转语句(1)continue语句
continue语句必须用于循环结构中。不带标号的continue语句终止当前这一轮的循环。跳过本轮循环剩余语句,直接进入当前循环的下一轮。带标号的continue语句直接跳转到标号处继续执行。格式:continue标号名;(2)break语句作用:程序的流程从一个语句块内部跳转出来。格式:break标号名;3.4定义和使用Java的方法1、定义方法方法是类的动态属性,标志了类所具有的功能和操作,用来把类和对象的数据封装在一起。方法由方法头与方法体组成,其一般格式如下:修饰符1修饰符2......返回值类型方法名(形式参数列表)throw[异常列表]{
方法体各语句;
}
其中形式参数列表的格式为:形式参数类型1形式参数名1,形式参数类型2形式参数名3,......
小括号是方法的标志,程序使用方法名来调用方法,形式参数是方法从调用它的环境输入的数据,返回值是方法在操作完成后返还给调用它的环境的数据。定义方法的目的是定义具有相对独立和常用功能的模块,使程序结构清晰,也利于模块在不同场合的重复利用。方法头:由方法名、参数列表、方法返回值类型、方法修饰符和方法抛出的例外组成。方法体:由局部变量声明和语句序列组成。例3.3列出两数M和N之间的所有素数和N的所有素数因子,而且将求出数N的所有素数因子。importjava.applet.Applet;importjava.awt.*;publicclassUsePrimeextendsApplet{ Labelprompt;
TextFieldL_input,U_input;
int
LowerLimit,UpperLimit; publicvoidinit() { prompt=newLabel("Enterthelowerandupperlimit:"); L_input=newTextField(4); U_input=newTextField(4); add(prompt); add(L_input); add(U_input); }
publicvoidpaint(Graphicsg) {
inti,j,k=0;
intp=0;
booleanf_i; for(i=2;i<UpperLimit;i++) {
if(UpperLimit%i!=0) continue; f_i=false; if(i%2!=0) { j=3; f_i=true;
while(j<=Math.sqrt(i)) {if(i%j==0) { f_i=false; break; } j+=2; }} if(f_i) { g.drawString(Integer.toString(i),20+k*20,40+p*20); if(k>10) {p++; k=0; } else k++; }}
k=0; p=0; for(i=LowerLimit;i<=UpperLimit;i++) { f_i=false; if(i%2!=0) { j=3; f_i=true;
while(j<=Math.sqrt(i)) {if(i%j==0) { f_i=false; break; } j+=2; }} if(f_i) {g.drawString(Integer.toString(i),20+k*20,100+p*20); if(k>10) {p++; k=0; } else k++; } } }
publicbooleanaction(Evente,Objecto) {
inttemp; if(e.target==U_input) {
LowerLimit=Integer.parseInt(L_input.getText());
UpperLimit=Integer.parseInt(U_input.getText());
if(LowerLimit>UpperLimit)
{ temp=LowerLimit;
LowerLimit=UpperLimit;
UpperLimit=temp; } repaint(); } returntrue; }}例3.4定义判断素数的方法,改写例3.3.importjava.applet.Applet;importjava.awt.*;publicclassUsePrime_CextendsApplet{ Labelprompt;
TextFieldL_input,U_input;
int
LowerLimit,UpperLimit; publicvoidinit() { prompt=newLabel("Enterthelowerandupperlimit:"); L_input=newTextField(4); U_input=newTextField(4); add(prompt); add(L_input); add(U_input); }
publicvoidpaint(Graphicsg) {
inti,j,k=0;
intp=0;
booleanf_i; for(i=2;i<UpperLimit;i++) {
if(UpperLimit%i!=0) continue; f_i=isPrime(i);
if(f_i) {
g.drawString(Integer.toString(i),20+k*20,40+p*20); if(k>10) { p++; k=0; } else k++; } } k=0; p=0; for(i=LowerLimit;i<=UpperLimit;i++) { f_i=isPrime(i);
if(f_i) {
g.drawString(Integer.toString(i),20+k*20,100+p*20); if(k>10) { p++; k=0; } else k++; } } }
boolean
isPrime(inti) {
intj=0;
booleanf_i; f_i=false; if(i%2!=0) {j=3; f_i=true; while(j<=Math.sqrt(i)) {if(i%j==0) {f_i=false; break;} j+=2; } } returnf_i; }
publicbooleanaction(Evente,Objecto) {
inttemp; if(e.target==U_input) {
LowerLimit=Integer.parseInt(L_input.getText());
UpperLimit=Integer.parseInt(U_input.getText());
if(LowerLimit>UpperLimit) { temp=LowerLimit;
LowerLimit=UpperLimit;
UpperLimit=temp; } repaint(); } returntrue; }}2、方法的形式参数方法头中参数列表规定了方法的输入数据,而方法的返回值是方法的输出数据。如方法头为: boolean
isPrime(intn)其中: intn形式参数,规定方法的输入数据是一个整型量。
boolean
isPrime() 调用方法名为isPrime()的方法,将返回一个布尔型量。方法调用如: f_i=isPrime(i);其中: i 实际参数,调用方法时传给方法的实际数据。
f_i 获得调用方法的返回结果,为布尔型量。3、方法的返回值返回值语句的一般格式是:
return表达式;如果方法没有返回值,方法头返回值类型应该写关键字void,表明这个方法不输出数据。如: publicvoidinit()4、方法的使用(1)程序调用方法如:f_i=isPrime();
(2)系统调用方法如: publicbooleanaction(Evente,Objecto)
*只有系统才知道何时应该调用这个方法。第七章常用工具、算法与数据结构7.1java的类库Java程序是由类的定义组成的,编写java的过程就是设计各种类和确定它们相互作用关系的过程。为了简化面向对象的编程过程,java事先设计并实现了一些体现常用功能的标准类,这些系统标准类根据实现的功能不同,可以划分成不同的集合,每个集合是一个包,合称为类库。用户可以自己编写具有某一功能的类,但没有必要一切从头开始,完全可以继承已有类,这样使用户的类一开始就具有了一些功能,大大提高了编程的效率。可以想象,没有java的类库,java程序寸步难行,所以我们必须对java的类库有足够的了解。我们可以这样说,开发者编程能力的强弱相当大程度上取决于他对java类库的掌握程度。7.1.1java的类库结构Java的类库是系统已实现的标准类的集合,是java编程的API,它可以帮助开发者方便、快捷的开发java程序。根据功能的不同,java的类库被划分为若干个不同的包,每个包中都有若干个具有特定功能合相互关系的类和接口。在java中使用类库的方法是在程序的开头用import语句引入。Java1.0类库(1)java.lang包是java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理等。这个包的加载是缺省的,不需要用import引入,系统自动加载。Java.io包Java.io包是java的标准输入/输出类库,凡是完成与操作系统有关的较底层的输入输出操作的java程序,都应在程序开头用import语句引入:importjava.io.*;Java.util包这个包包括了java语言中的一些低级的实用工具,如处理时间的Date类、处理变长数组的Vector类、实现栈和杂凑表的Stack类和HashTable类等Java.awt包是java构建用户图形界面的类库。凡是要构建图形界面的都要把这个包引入。Java.awt.image包是用来处理和操作来自于网上的图片的java工具类库。Java.awt.peer包很少在程序中直接用到,它使java程序在不同的软硬件平台上运行时具有相同的图形界面,换句话说,是java语言实现跨平台的主要手段之一。Java.applet包它仅包含一个有用的类,java.applet.Applet,实现运行于Internet浏览器中的javaApplet的工具类库。J包是java语言用于实现网络功能的类库。Java1.1类库这个类库是对1.0内容的扩充和修正。(1)java.corba包和java.corba.orb包(2)java.lang.reflect(3)java.rmi包、java.registry包和java.rmi.server包(4)java.security包、java.security.acl包和
erfaces包(5)java.util.zip包(6)java.awt.dataransfer包(7)java.awt.event包(8)java.sql
包是实现jdbc的类库,使java程序可以连接不同类型的数据库如Oracle、Sysbase、SQLServer、Mysql、Postgre等。3。Java1.2简介Java1.2又称为java2,它可以细化为三个版本:(1)企业版主要用于服务器上运行的jav
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁科技大学《中外戏剧鉴赏》2023-2024学年第一学期期末试卷
- 昆明理工大学《五官科护理学》2023-2024学年第一学期期末试卷
- 江苏农林职业技术学院《金融建模与计算》2023-2024学年第一学期期末试卷
- 吉林工程职业学院《植物食品加工工艺学》2023-2024学年第一学期期末试卷
- 湖南女子学院《材料分析测试原理》2023-2024学年第一学期期末试卷
- 【物理】第十章 浮力 单元练习+-2024-2025学年人教版物理八年级下册
- 黑龙江能源职业学院《政治学导论》2023-2024学年第一学期期末试卷
- 高考物理总复习《电磁感应规律及应用》专项测试卷含答案
- 重庆五一职业技术学院《导航与制导系统》2023-2024学年第一学期期末试卷
- 重庆工贸职业技术学院《测绘学概论》2023-2024学年第一学期期末试卷
- 2024光储充一体化系统解决方案
- 建筑幕墙物理性能分级
- 河南省2024年道法中考热点备考重难专题:发展航天事业建设航天强国(课件)
- 临床诊疗规范与操作指南制度
- DLT 5285-2018 输变电工程架空导线(800mm以下)及地线液压压接工艺规程
- 新员工入职培训测试题附有答案
- 劳动合同续签意见单
- 大学生国家安全教育意义
- 2024年保育员(初级)培训计划和教学大纲-(目录版)
- 河北省石家庄市2023-2024学年高二上学期期末考试 语文 Word版含答案
- 企业正确认识和运用矩阵式管理
评论
0/150
提交评论