/java/program/classcode=HelloWorldApplet.calsswidth=300height=120>
步骤(4):
在提示符窗口调用小程序查看器浏览HelloWorld.html页面,观察Applet应用程序。
五、思考题
1)编程实现:
产生一个20个整数存放到数组中,然后对其按照升序进行排序,最后对排序前后的数组按照每5个数的方式输出。
2)编程实现:
产生一个1-12之间的随机整数,并根据该随机整数的值,输出对应月份的英文名称。
提示:
产生0-1之间的随机数方法一:
Math.random()
产生一个随机整数方法二:
importjava.util.*
……
Randomr=newRandom();
Math.abs(r.nextInt())
实验二初步的面向对象的程序设计练习
一、实验目的
1)掌握类和构造方法的定义。
2)掌握创建类实例的方法。
3)初步掌握面向对象的编程思想
二、实验内容
1)编写程序实现如下功能:
已知学生类有属性(学号、班号、姓名、性别、年龄)和方法(获得学号、获得班号、获得性别、获得年龄、修改年龄,显示基本信息),定义一组学生对象,并初始化他们的基本信息,然后依次输出。
2)编写程序实现如下功能:
已知学生类有属性(姓名、考号、综合成绩、体育成绩)和方法(获取综合成绩、获取体育成绩、显示基本信息),学校类有静态变量(录取分数线)和方法(设置录取分数、获取录取分数线),录取类有方法(获取学生是否符合录取条件,其中录取条件为综合成绩在录取分数线之上,或体育成绩在96分以上并且综合成绩大于300分)。
现要求编写程序输出一组学生对象中被某学校录取的学生基本信息。
三、实验原理
1)类、域、方法
类体中包括属性和方法,都是类的成员。
一个类可以定义多个域和方法。
(1)是类的静态属性,也称为变量、成员变量等,格式为:
类型名属性名;
在定义属性前,还可以加修饰符。
(2)方法是类的动态属性。
Java的方法与其它语言中的函数类似。
由方法头和方法体组成:
修饰符1……返回类型方法名(形参列表)throws异常列表
{
方法体语句;
}
其中,形参列表格式为:
形参类型形参名1,形参类型形参名2
2)类和对象
(1)类(class):
抽象的集合概念。
类包括系统类库中已定义好的类和用户自定义的类
(2)对象(实例instance):
实际个体。
创建某个类的具体对象(类似变量声明),具体定义格式为:
类名对象变量=new类名([参数]);
(3)构造方法:
构造方法的名字与类名相同。
创建对象时自动调用,并对对象进行初始化操作。
注意:
构造方法前面没有返回类型定义,它没有返回值,也不是void。
[不能return];JAVA每个类都至少有一个构造方法[系统默认无参数构造方法];一旦定义了构造方法,系统不再提供默认构造方法。
(4)对象的使用:
要访问或调用一个对象的域或者方法,使用.操作符。
一般形式:
引用对象变量名.域/方法名;如p.sayHello();
由于只能用对象变量来访问这个对象的域或方法,不通过引用变量就没有办法访问,体现了面向对象的“封装性”。
3)静态属性和静态方法
(1)静态属性
用static修饰的域属于类的静态域(静态量,类变量),不用static修饰的为实例变量(实例域)。
静态域的特点如下:
●它们是类的域,不属于任何一个类的具体对象实例。
它保存在类的内存区域的公共存储单元。
●对于该类的任何一个实例对象,静态域是一个公共的存储单元。
●任何一个类的对象访问它,取到的都是相同的值;
●任何一个类的对象修改它,那么也是在对同一个内存单元进行操作。
(2)静态方法
用static修饰的方法属于类的静态方法,又称为类方法。
不用static修饰的方法为实例方法。
类方法的本质是该方法属于整个类,而不是属于某个实例。
静态方法具有如下特点:
●static方法是属于整个类的,它在内存中的代码段将随着类的定义而进行分配和装载。
而非static的方法是属于某个对象的,在这个对象创建时,对象的方法在内存中有自己的代码段。
●static方法不能操纵属于某个对象的成员变量,只能处理属于类的成员变量,即只能处理static域和方法。
●类方法中不能访问实例变量,也不能使用this或super。
●调用类方法可以使用类名,也可以用具体对象名。
四、实验步骤
1)编写程序实现如下功能:
已知学生类有域变量(学号、班号、姓名、性别、年龄)和方法(构造方法、获得学号、获得班号、获得性别、获得年龄、修改年龄,显示基本信息),定义一组学生对象,并初始化他们的基本信息,然后依次输出。
步骤
(1):
定义类Stduent,并添加如下域变量:
Stringsno;Stringclassno;Stringname;charsex;intage;
步骤
(2):
在类Student中添加如下方法,并编写代码实现具体方法的功能:
Student(Stringsno,Stringclassno,Stringname,charsex,intage){……}
StringgetSno(){……}
StringgetClassno(){……}
StringgetSex(){……}
intgetAge(){……}
voidupdateAge(intage){……}
voidprint(){……}
步骤(3):
定义一个包含main方法的Application程序类TestStudent,初始化一个学
生类对象数组,并利用循环语句显示所有学生的基本信息。
步骤(4):
保存文件名为TestStudent.java,然后编译、调试和运行程序。
2)编写程序实现如下功能:
已知学生类有域变量(姓名、考号、综合成绩、体育成绩)和方法(获取综合成绩、获取体育成绩、显示基本信息),学校类有静态变量(录取分数线)和方法(设置录取分数、获取录取分数线),录取类有方法(获取学生是否符合录取条件,其中录取条件为综合成绩在录取分数线之上,或体育成绩在96分以上并且综合成绩大于300分)。
现要求编写程序输出一组学生对象中被某学校录取的学生基本信息。
步骤
(1):
定义类Stduent,并添加如下域变量:
Stringname;Stringid;floatcomScore;floatscore;
步骤
(2):
在类Student中添加如下方法,并编写代码实现具体方法的功能:
Student(Stringname,Stringid,floatcomScore,floatscore){……}
floatgetcomScore(){……}
floatgetscore(){……}
voidprint(){……}
步骤(3)定义类School,并添加静态变量
staticfloatscoreLine;
添加静态方法
staticfloatgetScoreLine(){……}
staticvoidsetScoreLine(floatscore){……}
步骤(4)定义一个Application程序类Enroll并添加方法:
publicstaticvoidmain(Stringargs[]){……}
staticbooleanisEnroll(Students){……}
步骤(5)保存文件名为Enroll.java,然后编译、调试和运行程序。
五、思考题
1、1)定义复数类Complex,其满足如下要求(18分):
●复数类Complex的属性有:
RealPart:
double型,代表复数的实数部分
ImaginPart:
double型,代表复数的虚数部分
●复数类Complex的方法有:
Complex(doublerp,doubleip):
构造函数,形参rp为实部的初值,ip为虚部的初值。
ComplexcomplexAdd(Complexa):
将当前复数对象与形参复数对象相加,所得的结果仍是一个复数,并将结果返回给此方法的调用者。
ComplexcomplexMinus(Complexa):
将当前复数对象与形参复数对象相减,所得的结果仍是一个复数,并将结果返回给此方法的调用者。
publicStringtoString():
把当前复数对象的实部、虚部组合成a+bi的字符串形式,其中a和b分别为实部和虚部的数据。
(2)编写一个完整的JavaApplication程序,实现如下功能:
创建两个复数对象,然后让用户从键盘输入一个运算符('+'或'-'),求取两个复数对象的和或差的结果并输出。
实验三面向对象程序设计的继承、多态等特性的练习
一、实验目的
1)掌握类的继承机制。
2)熟悉类中成员变量和方法的访问控制。
3)熟悉方法或构造方法多态性。
4)熟悉接口的定义方法。
二、实验内容
1)编写程序实现如下功能:
已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。
定义一组学生对象,并初始化他们的基本信息,然后依次输出。
2)将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功能。
三、实验原理
1)类的继承
面向对象语言允许从一个已有的类[父类]定义新的类[子类],从而形成继承关系。
父类是所有子类的公共域和公共方法的集合,每个子类是父类的特殊化。
子类继承父类的状态和行为,同时也可以修改父类,并可以添加新的状态和行为。
(1)域的继承和添加
子类可以从父类那里继承所有的没有被private和static修饰的域。
那么子类就无需再重复定义。
还可以在子类中定义其独特的域变量:
(2)方法的继承、覆盖和添加
父类的非private方法也可以被子类自动继承。
同时子类也可以重新定义与父类同名的方法,实现对其的覆盖/重置(override/overlay)。
在覆盖父类方法时注意应保持完全相同的方法名、返回值和参数类型列表,即重写父类中的方法。
另外子类还可以重载父类的方法或添加新的方法。
2)访问修饰符
Java提供4种访问权限:
public、protected、private和默认。
描述
private
默认
protected
public
同一类中
√
√
√
√
同一包中对子类
×
√
√
√
同一包中对非子类
×
√
√
√
不同包中对子类
×
×
√
√
不同包中对非子类
×
×
×
√
3)抽象类和接口
(1)抽象类和抽象方法
一个方法如果没有定义方法体,则称该方法为抽象方法。
包含一个或多个抽象方法的类,称为抽象类。
定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化。
Java语言中,用abstract关键字来修饰一个类时,这个类叫做抽象类,用abstract关键字来修饰一个方法时,这个方法叫做抽象方法。
抽象类的语法格式如下
abstractClass{…}//抽象类
抽象方法的语法格式如下
abstractreturnTypeabstractMethod([paramlist])//抽象方法
抽象类必须被继承,抽象方法必须被重写。
抽象方法只需声明,无需实现,抽象类不能被实例化。
若类中包含了抽象方法,则该类必须被定义为抽象类。
(2)接口
接口是抽象类的一种,只包含常量和方法的定义,而没有方法的实现,且其方法都是抽象方法。
它的用处体现在下面几个方面:
●通过接口指明多个类需要实现的方法。
●通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。
●通过接口了解对象的交互界面,而无需了解对象所对应的类。
接口的定义包括接口声明和接口体,接口声明的格式如下:
[public]interfaceinterfaceName[extendslistOfSuperInterface]{…}
其中,extends子句与类声明的extends子句基本相同,不同的是一个接口可有多个父接口,用逗号隔开,而一个类只能有一个基类。
4)多态的两种表现形式
(1)同一类中的方法多态(方法重载):
同一类中允许多个同名方法,通过参数的数量、类型的差异进行区分。
(2)子类对父类方法的重新定义(方法覆盖):
方法名、返回值和参数形态完全一样。
四、实验步骤
1)编写程序实现如下功能:
已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(构造方法、修改年龄、显示基本信息)和一个构造方法。
定义一组学生对象,并初始化他们的基本信息,然后依次输出。
步骤
(1):
定义类Person,并添加以下公共域变量
publicStringname;publiccharsex;publicintage;
添加构造方法Person(Stringname,charsex,intage){……}
步骤
(2):
基于类Person派生类Student,并添加如下公共域变量和方法
publicStringclassno;publicSt