实验二:类与对象
一、实验目的
1.掌握面向对象程序设计的方法和Java作为面向对象程序设计语
言的特点;
2.掌握如何构造一个类和如何创建一个对象,了解类与对象的关系;
3.掌握修饰符和构造方法的使用规则;
4.掌握如何创建包,通过包如何管理类;
5.掌握Java的继承机制和实现多态的方法。
二、实验要求
1.编写一个体现面向对象思想的程序。
2.编写一个创建对象和使用对象的方法的程序。
3.编写不同成员变量、成员方法修饰方法的程序。
4.编写创建自定义包的程序。
三、实验内容
(一)创建 Applet 应用小程序
1.创建一个Applet 应用程序SY2_1.java 文件。
●程序功能:建立一个Applet 小程序,使其可以进行简单的加
法运算。该程序要包含类、接口、属性、方法、事件等面向对
象的基本元素。
●程序源代码如下:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class SY2_1 extends Applet implements ActionListener {
Label label1=new Label("+");
Label label2=new Label("=");
TextField field1=new TextField(6);
TextField field2=new TextField(6);
TextField field3=new TextField(6);
Button button1=new Button("相加");
public void init() { // 初始化
add(field1);
add(label1);
add(field2);
add(label2);
add(field3);
add(button1);
button1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) { // 处理按钮事件
int
x=Integer.parseInt(field1.getText())+Integer.parseInt(field 2.getText());
field3.setText(Integer.toString(x)); // 数值
转换为字符串
}
}
2.编写一个浏览Applet 应用程序的页面文件SY2_1.HTML,源代码如。
3.将SY2_1.java 源程序编译为SY2_1.class 文件
4.使用浏览器或使用小程序查看器浏览SY2_1.HTML 文件(即在
命令提示符窗口输入:appletviewer SY2_1.HTML),运行。
(二)创建对象并使用对象
1.编写Applet 程序
●程序功能:这个Applet 程序要在页面上输出两个矩形,并
伴有文字输出。
●SY2_2.java 程序的源代码如下:
import java.awt.*;
import java.applet.Applet;
public class SY2_2 extends Applet {
MyBox b1=new MyBox();//创建对象b1
MyBox b2=new MyBox(170,20,60,60); //创建对象b2
public void paint(Graphics g) {
b1.setPosition(20,20);
b1.setSize(60,60);
b1.draw(g);
g.drawString("矩形 1 的X 位置: "+b1.getX(), 20, 100);
g.drawString("矩形 1 的Y 位置: "+b1.getY(), 20, 120);
b2.draw(g);
g.drawString("矩形 2 的X 位置: "+b2.getX(),
b2.getX(), b2.getY()+80);
g.drawString("矩形 2 的Y 位置: "+b2.getY(),
b2.getX(), b2.getY()+100);
}
}
class MyBox {
private int x, y, width, height;
MyBox() {
x=0;
y=0;
width=0;
height=0;
}
MyBox(int xPos, int yPos, int w, int h) {
x=xPos;
y=yPos;
width=w;
height=h;
}
public void setPosition (int xPos, int yPos) {
x=xPos;
y=yPos;
}
public void setSize (int w, int h) {
width=w;
height=h;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void draw(Graphics g) {
g.drawRect(x, y, width, height);
}
}
2.编写一个浏览Applet 应用程序的页面文件SY3_2.HTML
3.将SY2_2.java 源程序编译为SY2_2.class 文件
4.使用浏览器或使用小程序查看器浏览SY2_2.HTML文件(即在命令提示符下输入:appletviewer SY2_2.HTML),运行.
思考:程序的结构。类与对象的关系。对象创建、使用、销毁的过程。(三)使用修饰符
有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符如下。Public,private,protected,package,static,final,transient,volatile
1.程序功能:通过两个类StaticDemo、SY2_3 说明静态变量/方法与实例变量/方法的区别。
2.编写类文件SY2_3.java,程序源代码如下:
class StaticDemo {
static int x;
int y;
public static int getX(){
return x;
}
public void setX(int x ) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int newY) {
y = newY;
}
}
public class SY2_3 {
public static void main(String[] args){
System.out.println("静态变量
x="+StaticDemo.getX());
//System.out.println("实例变量y="+StaticDemo.getY()); // 非法,编译时将出错
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
a.setX(1);
a.setY(2);
b.setX(3);
b.setY(4);
System.out.println("静态变量a.x="+a.getX());
System.out.println("实例变量a.y="+a.getY());
System.out.println("静态变量b.x="+b.getX());
System.out.println("实例变量b.y="+b.getY());
}
}
3.对上面的源程序进行编译,排错并运行。
(四)包的使用
1.了解并使用Java 的系统包
包是类和接口的集合。利用包可以把常用的类或功能相似的类
放在一个包中。Java 语言提供系统包,其中包含了大量的类,可以在编写Java 程序时直接引用它们。为便于管理和使用它们,将这些类分为了不同的包。包又称类库或API 包,所谓API(Application Program Interface)即应用程序接口。API 包—方面提供丰富的类与方法供大家使用,如画图形、播放声音等,另一方面又负责和系统软硬件打交道,圆满实现用户程序的功能。所有Java API 包都以“java.”开头,以区别用户创建的包。
接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。
处理程序运行时的错误和设计程序同样重要,只有能够完善处理运行时出错的程序,软件系统才能长期稳定地运行,异常处理就是说明如何处理程序运行时出错的问题。
2.创建并使用自定义包
●自定义包的声明方式
声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。
●创建自定义包Mypackage
在存放源程序的文件夹中建立一个子文件夹Mypackage。例如,在“C:\j2sdk1.4.2_01\lib ”文件夹之中创建一个与包同名的子文件夹Mypackage(C:\j2sdk1.4.2_01\lib \Mypackage),并将编译过的class 文件放入该文件夹中。注意:包名与文件夹名大小写要一致。再添加环境变量classpath 的路径,例如:
C:\j2sdk1.4.2_01\lib;
●在包中创建类
?YMD.java 程序功能:在源程序中,首先声明使用的包名Mypackage,然后创建YMD 类,该类具有计算今年的年份,
可以输出一个带有年月日的字符串的功能。
?编写YMD.java 文件,源代码如下:
package Mypackage; //声明存放类的包
import java.util.*; //引用java.util 包
public class SY2_4_YMD {
private int year,month,day;
public static void main(String[] arg3){}
public SY2_4_YMD(int y,int m,int d) {
year = y;
month = (((m>=1) & (m<=12)) ? m : 1);
day = (((d>=1) & (d<=31)) ? d : 1);
}
public SY2_4_YMD() {
this(0,0,0);
}
public static int thisyear() {
return
Calendar.getInstance().get(Calendar.YEAR);//返回当年的年份}
public int year() {
return year;//返回年份
}
public String toString(){
return year+"-"+month+"-"+day;//返回转化
为字符串的年-月-日
}
}
?编译SY2_4_YMD.java 文件,然后将SY2_4_YMD.class 文件存放到Mypackage 文件夹中。
3.编写使用包Mypackage 中SY2_4_YMD 类的程序
?SY2_5.java 程序功能:给定某人姓名与出生日期,计算该人年龄,并输出该人姓名,年龄,出生日期。程序使用了
SY2_4_YMD 的方法来计算年龄。
?编写SY2_5.java 程序文件,源代码如下:
import Mypackage.SY2_4_YMD; //引用Mypackage 包中的SY2_4_YMD 类
public class SY2_5{
private String name;
private SY2_4_YMD birth;
public static void main(String args[]) {
SY2_5 a = new SY2_5("吴斌",1993,10,10);
a.output();
}
public SY2_5(String n1,SY2_4_YMD d1) {
name = n1;
birth = d1;
}
public SY2_5(String n1,int y,int m,int d) {
this(n1,new SY2_4_YMD(y,m,d));//初始化变量与对象
}
public int age()
{ //计算年龄
return SY2_4_YMD.thisyear() - birth.year();
//返回当前年与出生年的差即年龄
}
public void output() {
System.out.println("姓名: "+name);
System.out.println("出生日期:
"+birth.toString());
System.out.println("今年年龄: "+age());
}
}
●编译并运行程序。
(五)构造方法的重载
构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。
因此,构造方法不能直接调用,只能由new 操作符调用。
构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。
●编写构造方法RunDemo 的重载程序文件SY2_6,源代码如
下:
class RunDemo {
private String userName, password;
RunDemo() {
System.out.println("全部为空!");
}
RunDemo(String name) {
userName=name;
}
RunDemo(String name, String pwd) {
this(name);
password=pwd;
check();
}
void check() {
String s=null;
if (userName!=null)
s="用户名:"+userName;
else
s="用户名不能为空!";
if (password!="12345678")
s=s+" 口令无效!";
else
s=s+" 口令:********";
System.out.println(s);
}
}
public class SY2_6 {
public static void main(String[] args) {
new RunDemo();
new RunDemo("吴斌");
new RunDemo(null,"郝书华");
new RunDemo("周璐","12345678");
}
}
●编译并运行程序。
●三个构造方法,其中第一个无参构造方法RunDemo() 的实
际作用是对成员变量赋缺省初值,由于userName和password
都是String 类,所以它们的缺省初值为null。第二个构造方
法RunDemo(String) 只有一个参数,用来对成员变量
userName 赋初值。第三个构造方法RunDemo(String, String) 有两个参数,并有更多的内容,首先调用this(name),其实
际作用就是调用当前类的构造方法RunDemo(String name);
然后对成员变量password 赋值;最后调用check 方法来检查
userName 和password,类似于一般程序的口令验证。重载构
造方法的执行由对象根据实际参数的个数、类型和顺序确定。
四、实验练习题(1-3题写在实验报告上并进行上机检查)
1.定义一个表示二维空间中点的类Point,其中包含点的坐标x和坐标y,以及相应的输出点坐标(x,y)的方法printInfo。
public class SY2_Test1 {
public static void main(String[] args) {
Point p=new Point();
p.printInfo(20,30);
}
}
class Point{
private int x,y;
public void setX(int x){
this.x=x;
}
public int getX(){
return x;
}
public void setY(int y){
this.y=y;
}
public int getY(){
return y;
}
public void printInfo(int x,int y){
setX(x);
setY(y);
System.out.println("输出点的坐标
是:"+"x="+getX()+",y="+getY());
}
}
2.创建一个学生类,该类包含学生的信息:学号、姓名、年龄、专业。创建2个学生对象:(本人和一个同学),输出你们的学号、姓名、年龄和专业信息。
public class Student {
private String sNum, name,specialty;
private int age;
public Student(String sNum,String name,int age,String specialty) {
this.sNum=sNum;
https://www.wendangku.net/doc/5b6557538.html,=name;
this.age=age;
this.specialty=specialty;
}
public String getSNum(){
return sNum;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getSpecialty(){
return specialty;
}
public static void main(String[] args) { Student zww=new Student("1114040127","周维维",20,"电子信息科学与技术");
Student wqq=new Student("1114040232","吴强强",19,"电子信息科学与技术");
System.out.println("我和同学的信息是:");
System.out.println(" 学号 "+" 姓名"+" 年龄"+" 专业");
System.out.println (zww.getSNum()+
zww.getName()+zww.getAge()+zww.getSpecialty());
System.out.println (wqq.getSNum()+
wqq.getName()+wqq.getAge()+wqq.getSpecialty());
}
}
3.定义类PerfectNum,其中包含一个方法用于判读某个数是否为完全数。编写代码测试输出1000以内的所有完全数。
public class Test4_3 {
public static void main(String[] args) { PerfectNum perfectNum=new PerfectNum();
for(int i=2;i<1000;i++){
if(perfectNum.prime(i))
System.out.println(i);
}
System.out.println();
}
}
class PerfectNum{
public boolean prime(int x){
boolean flag=false;
int sum=0;
for(int i=1;i if(x%i==0) sum=sum+i; } if (sum==x) { flag=true; } return flag; } } 4.选做:编写一个Java应用程序,要求能处理银行业务中简单的帐户存款、取款及查询等功能。 实验3 类和对象的创建与使用 一、实验目的 1、掌握类的定义和对象的创建; 2、掌握构造方法的作用、格式及重载; 3、掌握修饰词对成员存取权限的限制。 4、掌握实例成员、类成员的定义和使用方法。 二、实验内容 1、定义储蓄账户类,并创建对象模拟银行基本操作。 2、两游戏角色决斗。给定二个不同的角色,判定交手的胜负关系。(选做) 3、设计学生类、学校类、录取类,根据学生成绩和学校分数线,判断是否录取。 三、实验步骤 说明:请将第1,3题代码写入实验报告实验步骤处。 1、模拟银行账户功能。 编写程序,模拟银行账户功能。要求如下: 属性:账号、姓名、地址、存款余额、最小余额。 方法:存款、取款、查询。 根据用户操作显示储户相关信息。 如存款操作后,显示储户原有余额、今日存款数额及最终存款余额。 取款时,若取款成功,显示信息提示;若最后余额小于最小余额,拒绝取款,并显示信息提示。具体显示信息可据方便性原则自拟。 public class AccountOperation { public static void main(String [] args) { Account account1=new Account("650101","柳眉","天河学院",800.00); Account account2=new Account("650102","郑杰","天河学院",200.00); account1.transfer(account1,account2,300.0); account1.deposit(300.5); account1.withdraw(200); account1.withdraw(300); account1.query(); System.out.println(account1.toString()); //System.out.println(https://www.wendangku.net/doc/5b6557538.html,); error!! } } class Account { private String account; private String name; private String address; private double balance; 宁夏师范学院数学与计算机科学学院《面向对象程序设计(C++)》实验报告 }*/ // ~CPU() {cout<<"析构了一个CPU!"< 实验04 类与对象(6学时) (第4章类与对象) 一、实验目的 二、实验任务 4_1 声明一个CPU类。 包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,声明为enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 }; frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 4_2 声明一个简单的Computer类。 有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run和stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。 4_3 声明一个表示时间的结构体。 可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。 4_4(习题4-10)设计一个用于人事管理的People(人员)类。 考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号),sex(性别)、birthday(出生日期)、id(身份证号)等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现人员信息的录入和显示。要求包括:构造函数和析构函数、内联成员函数、组合。 三、实验步骤 1.(验证)声明一个CPU类,观察构造函数和析构函数的调用顺序。 首先声明枚举类型CPU_Rank,例如enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 },再声明CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,声明成员函数run和stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示顺序。在主程序中声明一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:。(程序见步骤2) ★程序的运行结果: 2.(示例)调试程序文件。 使用调试功能观察程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。参考程序如下: 操作)调试操作步骤如下: (1)单击“调试 | 逐语句”命令,系统进行单步执行状态,程序开始运行,一个DOS 窗口出现,此时Visual Studio中光标停在main()函数的入口处。 实验一:类和对象 【实验目的】 1.理解对象和类,掌握类的定义及如何创建一个对象; 2.掌握构造方法的运用; 3.掌握方法的定义和参数传递; 4. 掌握类的继承机制。 【实验准备】 一、复习配套教材相关章节的内容; 二、预习本次实验; 【实验内容】 1.编写一个程序,显示水果的定购行情。定义一个带有参数的构造方法,这些参数用于存放产品名,数量和价格。在主程序中输出三种不同的水果。package avage; public class text { String name; int agr; double page; public text(){ } public text(String name,int agr,double page){ https://www.wendangku.net/doc/5b6557538.html,=name; this.agr=agr; this.page=page; } public void evagre(){ System.out.println("水果名为:"+https://www.wendangku.net/doc/5b6557538.html,); System.out.println("水果数量:"+this.agr); System.out.println("水果单价:"+this.page); } } public class text1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub text s=new text(); https://www.wendangku.net/doc/5b6557538.html,="苹果"; s.agr =10; s.page=1.0; s.evagre(); text c=new text(); https://www.wendangku.net/doc/5b6557538.html,="香蕉"; s.agr =10; s.page=1.0; s.evagre(); text d=new text(); https://www.wendangku.net/doc/5b6557538.html,="橘子"; s.agr =10; s.page=1.0; s.evagre(); 2. 编写一个学生类,封装学生的学号、姓名、成绩等信息。再编写一个主类, 实验报告_实验3 类与对象(学生学号_姓 名) 一、实验目的 1.熟悉类的组成,掌握类的声明方法; 2.理解构造方法的作用,并掌握构造方法的定义; 3.熟练使用访问器和设置器实现信息隐藏和封装; 4.熟悉一般方法、构造方法的重载; 5.能够正确地区分静态变量与实例变量、静态方法与实例方法的不同,掌握静态变量和静态方法的使用;6.掌握对象的创建、引用和使用及向方法传递参数的方式; 7.掌握this关键字的使用以及对象数组的创建和访问; 8.掌握Java包的创建、包成员的各种访问方式; 9.掌握一维数组:声明,创建,初始化,数组元素的访问; 10.掌握多维数组的概念:二维数组的声明,初始化,元素的访问。 二、实验内容与步骤 1.请回答下列问题: (1)Cirecle类定义了几个属性?它们的类型、访问权限各为什么? 答:两个PI,floatl类型,静态私有权限 Radius,float;类型,私有权限 (2)类中的“PI”的值可以在程序的方法中更改吗? 答:不可以,因为PI为静态变量 (3)Cirecle类定义了几个方法?它们的访问权限怎样? 答:四个,getRadius(),setRadius(float radius),getPerimeter(),getArea()都是公有权限 2.写出Rectangle类的程序代码: class Rectangle { private float width; private float length; public float getWidth( ) //获取矩形宽度 {return width;} public float getLength( ) //获取矩形长度 {return length;} public float getPerimeter( ) //获取矩形周长 {return 2*(width+length);} public float getArea( ) //获取矩形面积 {return (width*length);} public void setWidth(float w) //设置矩形宽度 {width=w;} public void setLength(float l) //设置矩形长度 {length=l;} } 3.回答下列问题: (1)该程序中有几个类?主类是什么?如果将这两个类放在一个文件中,源程序文件名应是什么?答:两个类:Circle、CircleTest;主类是CircleTest;源程序文件名是CircleTest。 实验2 类和对象(一) 1、实验目的 (1)掌握声明类的方法,类和类的成员的的概念以及定义对象的方法。 (2)初步掌握用类和对象编制基于对象的程序。 (3)学习检查和调试基于对象的程序。 2、实验内容 (1)有以下程序: #include 实验一类和对象 Visual C++ 6.0集成开发环境的使用: Visual C++系列产品是微软公司推出的一款优秀的C++集成开发环境,其产品定位为Windows 95/98、NT、2000 系列Win32 系统程序开发,由于其良好的界面和可操作性,被广泛应用。由于2000 年以后,微软全面转向.NET 平台,Visual C++6.0 成为支持标准C/C++规范的最后版本。 1.启动 安装完系统后,可以选择如下两种方式启动 1) 点击Windows “开始”菜单,选择“程序”菜单下“Microsoft Visual Studio 6.0”子菜单下的快捷方式Microsoft Visual C++ 6.0 启动Visual C++ 6.0。 2) 点击Windows “开始”菜单,选择“运行”,输入msdev,即可启动。启动后的界面如下: 图 1 启动界面 2.建立工程 选择“File”菜单下的“New”菜单项或直接按Ctrl+N,启动新建向导,如图2 所示: 图 2 新建向导 选择在“Projects”属性页选择Win32 Console Application,在Project Name 中输入项目名称demo,在Location 中选择项目文件,如图2 中c:\test\demo,项目所有文件将保存在此文件。输入完毕,单击确定按钮,进入下一界面如图3: 图 3 项目类型向导 在图 3 所示界面中选择a simple application,然后点击Finish 按钮,系统显示图4 所示界面。如果想退回上一步可以选择“Back”按钮。 图 4 项目信息 在图 4 中选择OK 按钮,系统完成项目的创建,并保存项目相关的信息。项目的目录结构如图5 所示。 1) Demo.dsw 是项目工作区文件,双击此文件,即可打开此项目; 2) Demo.dsp 为项目文件; 3) demo.cpp 是项目中的一个源程序;stdafx.h 和stdafx.cpp 为自动创建的源程序,一般不用修改。 图 5 目录结构实验3 类和对象
实验四 类与对象
C++语言程序设计实验答案_类与对象
实验:类和对象1
实验报告_实验3 类与对象
实验2 类和对象(一)
实验一 类和对象
C++实验二类与对象(附答案)