目 录
上机实验总的目的和要求
学习Java语言程序设计课程必须重视实践环节。即独立编写程序,独立上机调试程序。
上机的目的,绝不仅是为了验证教材和上课的内容或者验证自己所编的程序正确与否。学习程序设计,上机实验的目的应该说是:
(1)加深对讲授内容的理解,尤其是一些语法规定,通过多次上机,就能自然地、熟练地掌握。
(2)熟悉所用的计算机系统的操作方法,了解和熟悉Java语言程序开发的环境。
(3)学会上机调试程序,培养对程序的纠错能力。善于发现程序中的错误,并能很快的排除这些错误。
上机实验一般包括以下几个步骤:
(1)准备好上机所需的程序。手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率。对程序中存在的问题,应做出记号,切记不能事先不编程序或临时抄别人程序去上机。
(2)上机输入和调试自己的程序。应该一人一机,独立上机。上机过程中出现的问题,除了系统问题以外,应该自己调试,独立处理。
(3)上机结束后,应整理出实验报告,实验报告应包括以下内容:
a、题目。
b、程序清单(计算机打印出的程序清单)。
c、运行结果(必须是上面程序清单所对应打印输出的结果)。
d、对运行情况所做的分析以及本次调试程序所取得的经验。如果程序未能通过,应分析其原因。
下面的每一次实验都对应教材中的相应内容。上机时间为每次2小时。
一、实验题目
设计一两个同样的“生日”类。在每个类里都有年、月、日三个成员变量。在一个类里设计一个成员方法,用这个成员方法为三个成员变量赋初值,用隐含的构造方法实例化一个对象。在另一个类里设计一个有参构造方法,用这个构造方法为三个成员变量赋初值。用有参的构造方法实例化一个对象。在两个类里都设计一个输出成员方法,用以输出年、月、日的值。
二、实验目的
根据所学Java“面向对象程序设计”章节中关于类、对象、成员变量、成员方法、构造方法的定义与使用规则,进行相应程序设计训练,进一步加强对Java编程基本思想的理解,根据所编的例子进行比较,区别有关知识异同点,巩固已学的基本知识。
三、实验内容
根据类、对象、成员变量、成员方法和构造方法的概念编程:
1、建立Bir类,声明3个成员变量year、month、day;两个成员方法setD和print;
一个对象b并用隐含构造方法进行初始化;调用setD( )方法,进行成员变量赋初
值。输入年、月、日具体数据,调用print( )方法,输出这组数据。
2、对上述题目进行改写:撤销setD( )方法;描述一个有参的构造方法Bir( ),调用
Bir( ) 方法,在构造方法中对成员变量赋初值,其他要求不变。
3、程序运行后要对两个程序的功能进行比较,要体会构造方法在Java程序中的作用。
四、实验步骤
1、编制含有setD( )方法的程序。编程、调试、编译、运行程序得出正确结果。
2、在原程序中撤销setD( )方法,建立构造方法Bir( ),并对程序进行相应改造。编辑、调试、编译、运行程序,得出与上例相同的结果。
五、实验要求
1、在规定的实验时间内所编程序能得出正确结果,完成实验任务。
2、所编程序必须具备实现“实验题目”中要求的各程序功能要素。
3、所编程序必须语句正确、速写规范、逻辑清晰。
六、实验结果
1、class Bir
{int year,month,day;
void setD(int y,int n,int d)//成员方法
{year=y;
month=n;
day=d;
}
void print( )
{System.out.println(”年”+year+”月”+month+”日”+day);
}
public static void main(String args[ ])
{Bir b=new Bir( );
b.setD(2002,4,8);
b.print( );
}
}
2、class Bir
{int year,month,day;
Bir(int y,int n,int d) //构造方法
{year=y;
month=n;
day=d;
}
void print( )
{System.out.println(”年”+year+”月”+month+”日”+day);
}
public static void main(String args[ ])
{Bir b=new Bir(2002,4,8);
b.print( );
}
}
七、实验心得:(根据本次实验体会写出心得,不得少于200字)
设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声。要求如下:
Animal抽象类有2个抽象方法cry()和getAnimaName(),即要求各种具体的动物给出自己的叫声和种类名称。
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音、调用子类重写的getAnimalName()方法显示动物种类的名称。
如图是Simulator、Animal、Dog、Cat的UML图。
二、实验目的
根据所学Java“面向对象程序设计”章节中关于子类与继承、多态、重写、抽象类进行相应程序设计训练,进一步加强对Java编程基本思想的理解,根据所编的例子进一步加深对面向对象的“对象的上转型对象与重写实现多态”、“抽象类实现开闭原则”使用规则的理解,巩固已学的基本知识。
三、实验内容
1、根据抽象类的定义,定义一个抽象类,由子类Dog、Cat实现该抽象类Animal。
2、定义Simulator,使用抽象类Animal对象上转型对象,实现多态。
1、按题目的要求编写编写抽象类AnimalAnimal抽象类有2个抽象方法cry()和getAnimaName()。
2、编写模拟器类Simulator、Animal类的子类:Dog,Cat类
3、最后编写主类进行调试、编译、运行程序。
五、实验要求
1、在规定的实验时间内所编程序能得出正确结果,完成实验任务。
2、所编程序必须具备实现“实验题目”中要求的各程序功能要素。
3、所编程序必须语句正确、速写规范、逻辑清晰。
六、实验结果
Animal.java
public abstract class Animal {
public abstract void cry();
public abstract String getAnimalName();
}
Simulator.java
public class Simulator {
public void playSound(Animal animal) {
System.out.print("现在播放"+animal.getAnimalName()+"类的声音:");
animal.cry();
}
}
Dog.java
public class Dog extends Animal {
public void cry() {
System.out.println("汪汪...汪汪");
}
public String getAnimalName() {
return "狗";
}
}
Cat.java
public class Cat extends Animal {
public void cry() {
System.out.println("喵喵...喵喵");
}
public String getAnimalName() {
return "猫";
}
}
Application.java
public class Example5_13 {
public static void main(String args[]) {
Simulator simulator = new Simulator();
simulator.playSound(new Dog());
simulator.playSound(new Cat());
}
}
七、实验心得:(根据本次实验体会写出心得,不得少于200字)
一、实验题目
设计一个超圆的接口,再设计一个圆的超类,该超类实现了超圆接口的方法,可以计算圆的面积。分别设计一个子类(继承该超类):可以计算圆球的表面积;最后设计执行主方法的类,在这个类中分别圆的面积、圆球的表面积,并分别输出;另外还要输出本题一共计算了几个几何面积的计数。
根据所学Java“面向对象程序设计”章节中关于多态、覆盖、重载、接口的定义与规则进行相应程序设计训练,进一步加强对Java编程基本思想的理解,根据所编的例子进一步加深对面向对象的“子类变量隐藏超类变量”、“子类方法重写超类方法”、“方法的重载”“接口的定义”、“接口的实现”使用规则的理解,巩固已学的基本知识。
三、实验内容
1、根据接口的定义,定义一个接口,由一个超类实现该接口。
2、根据子类与超类的继承关系,子类变量、方法覆盖超类变量、方法的定义编制程序,
实现java覆盖技术。
3、使用super强制调用超类构造方法,强制调用已被子类重写的超类成员方法,理解
java多态技术思想,实现多态性编程。
四、实验步骤
子类Acircle、Sphere继承超类Circle,超类实现接口Ccir
1、定义接口Ccir,接口中有成员变量PI=3.14,计算面积的抽象方法fun()和输出方
法show()。
2、定义超类Circle,构建Circle的无参、有参构造方法;无参构造方法为子类有参
构造方法调用;有参构造方法为超类对象赋初值。
3、超类实现接口方法fun()和show()。
4、定义子类Acircle、Sphere,由于子类不能继承超类的有参构造方法,故构建子类
有参构造方法,在该方法中使用super()方法强制调用超类构造方法。
5、在子类中定义并重写超类的fun()方法,使用super()方法强制调用fun()方法,
并进行相应计算,实现多态;
6、在超类中定义静态成员变量sum,用以累计计算次数。
7、定义运行类Ex,用以定义相应对象,分别调用本类的fun()方法,在调用所继承的
show()方法输出;在输出计算次数时使用<类名>.<类变量>格式:Circle.sum。
五、实验要求
1、在规定的实验时间内所编程序能得出正确结果,完成实验任务。
2、所编程序必须具备实现“实验题目”中要求的各程序功能要素。
3、所编程序必须语句正确、速写规范、逻辑清晰。
六、实验结果
public interface Ccir
{ float PI=3.14f;
float fun();
float show(String s,float f);
}
public class Circle implements Ccir
{ static int sum=0;
float r;
String st="圆面积";
Circle(){}
Circle(float r1)
{ r=r1;}
public float fun()
{ sum+=1;
return PI*r*r;
}
public void show(String s,float f)
{ System.out.println(s+'='+f);}
}
class Acircle extends Circle
{ String st="圆球表面积";
Acircle(float r1)
{ super(r1);}
public float fun()
{ float f;
f=4*super.fun();
return f;
}
}
class Ex
{ public static void main(String args[])
{ float f;
Circle c=new Circle(4.3f);
f=c.fun();
c.show(c.st,f);
Acircle a=new Acircle(5.4f);
f=a.fun();
a.show(a.st,f);
System.out.println("运算计数:"+Circle.sum);
}
}
七、实验心得:(根据本次实验体会写出心得,不得少于200字)
一、实验题目
设置一个自定义“年限超出”异常类,该异常类中定义一个有参构造方法,定义一个输出自定义异常信息的方法。设定一个计算年龄的区间,用户输入的年份超出该区间的则人工抛出异常,并输出“年限超出”异常信息。如果在此区间则输出正确年龄。
二、实验目的
根据所学Java“面向对象程序设计”章节中关于异常的定义与规则进行相应程序设计训练,进一步加强对Java编程基本思想的理解,根据所编的例子进一步加深对java的“异常类”和“错误类”的区分;对java如何“抛出、捕捉、匹配、处理”异常的过程进一步加深理解;学会使用异常处理的“try—catch—finaliy”格式;掌握“方法抛出异常”的使用;学会使用“自定义异常”处理的方法。
三、实验内容
1、确定自定义异常的名称,建立相应的异常类的子类。
2、进行“方法抛出异常”的方法名、方法体的程序描述。
3、根据异常处理的“try—catch—finally”格式,对自定义异常的处理过程进行程序描述。
四、实验步骤
1、设立Ovyear为自定义异常的名称(年份异常),描述自定义异常类的类体,建立子
类构造方法,输出异常信息方法printMsg()。
2、使用关键字throws创建抛出异常方法的方法名、方法体。
3、设立本类age()方法,使用try—catch—finaliy格式、关键字throw编制对自
定义异常处理过程的程序描述。
4、当年份正常时输出年龄,当年份不正常时输出异常信息。
五、实验要求
1、在规定的实验时间内所编程序能得出正确结果,完成实验任务。
2、所编程序必须具备实现“实验题目”中要求的各程序功能要素。
3、所编程序必须语句正确、速写规范、逻辑清晰。
六、实验结果
class Ovyear extends Exception
{ Ovyear(String s)
{super(s);}
void printMsg()
{System.out.println("异常信息:"+this.getMessage());
}
}
public class Year1
{ public void abnor(int y) throws Ovyear
{ if (y<=1856||y>2009)
throw new Ovyear("异常年份");
else System.out.println("年龄="+(2009-y));
}
void age(int y)
{ try {abnor(y);}
catch(Ovyear e)
{e.printMsg();}
}
public static void main(String args[])
{ Year2 ye2=new Year2();
ye2.age(2010);
}
}
七、实验心得:(根据本次实验体会写出心得,不得少于200字)
}
}
}
一、实验题目
文件加密解密。给定一个密钥,读取文件内容,加密后,输出到另一个文件。
二、实验目的
根据所学Java“面向对象程序设计”章节中关于“输入输出流”的定义与规则进行
相应程序设计训练,进一步加强对Java编程基本思想的理解,根据所编的例子进一步加深对java的“字节流”、“字符流”、“文件”的理解;学会使用文件输入流读取文件,然后使用输出流向文件进行写入。
三、实验内容
1、使用文件输入流读取文件。
2、每个字节和密码进行异或加密。
3、加密后,使用文件输出流写入另外一个文件中。
4、可以用记事本打开加密后的文件进行查看。
四、实验步骤
1、在程序的头部导入java.io.*包。
2、根据实验内容进行编程。
3、调试程序是否符合要求
五、实验要求
1、在规定的实验时间内所编程序能得出正确结果,完成实验任务
2、所编程序必须具备实现“实验题目”中要求的各程序功能要素
3、所编程序必须语句正确、速写规范、逻辑清晰
六、实验结果
package code0804;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class EncryptFile {
public static void main(String[] args) throws IOException {
byte pwd = 123;
FileInputStream f = new FileInputStream("src/code0804/BufferedStreamCopy.java");
FileOutputStream fout = new FileOutputStream("encrypted.txt");
System.out.println("开始加密...");
int n = f.available() / 5;
byte buf[] = new byte[n];
int count = 0;
while ((count = f.read(buf, 0, n)) != -1) {
for (int i = 0; i < count; i++) {
buf[i] = (byte) (buf[i] ^ pwd);//密码与值进行异或运算
}
fout.write(buf, 0, count);
}
System.out.println("完成加密");
f.close();
fout.close();
f = new FileInputStream("encrypted.txt");
fout = new FileOutputStream("unencrypted.txt");
System.out.println("开始解密...");
n = f.available() / 5;
buf = new byte[n];
count = 0;
while ((count = f.read(buf, 0, n)) != -1) {
for (int i = 0; i < count; i++) {
buf[i] = (byte) (buf[i] ^ pwd);//密码与值进行异或运算
}
fout.write(buf, 0, count);
}
System.out.println("完成解密");
f.close();
fout.close();
}
}
七、实验心得(根据本次实验体会写出心得,不得少于`100字)
一、实验题目:
有一批3个学生的信息,需要输入到MySQL数据库中已经存在的TestDB数据表中,进行新数据的输入。新输入的学生信息内容为:
编号:0001,姓名:王明,成绩:80
编号:0002,姓名:高强,成绩:94
编号:0003,姓名:李莉,成绩:82
要求:1、建立Java与数据库MySQL的连接。
2、建立Java与数据表TestDB的通信联系。
3、进行SQL命令的操作
二、实验目的
本实验的目的掌握String类的常用方法。
三、实验内容
1、建立Java与数据库的连接方式。
2、选择与MySql相适应的JDBC驱动程序。
3、加载和注册驱动程序。
4、选择正确的SQL执行命令的形式。
四、实验步骤
1、在程序的首部用import语句将java.sql包引入。
2、使用Class.forName( )方法加载相应数据库的JDBC数据库桥驱动程序。相应的语
句格式为:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
3、定义JDBC现有数据表的URL对象。即:String conURL="jdbc:odbc:TestDB";
4、通过DriverManager类的getConnection(conURL)方法,产生连接数据库的
Connection类对象。Connection s=DriverManager.getConnection(conURL);。
5、使用SQL 命令insert insert into student values(<记录内容>)向数据表 插入三
条学生记录。
五、实验要求
1、在规定的实验时间内所编程序能得出正确结果,完成实验任务。
2、所编程序必须具备实现“实验题目”中要求的各程序功能要素。
3、所编程序必须语句正确、速写规范、逻辑清晰。
六、实验结果:
import java.sql.*;
public class In_Test
{ public static void main(String[] args)
{ String JDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String conURL="jdbc:odbc:TestDB";
try { Class.forName(JDriver);}
catch(java.lang.ClassNotFoundException e)
{ System.out.println("ForName :" + e.getMessage()); }
try { Connection con=DriverManager.getConnection(conURL);
Statement s=con.createStatement();
String r1="insert into student values("+"'0001','王明',80)";
String r2="insert into student values("+"'0002','高强',94)";
String r3="insert into student values("+"'0003','李莉',82)";
//使用SQL 命令insert插入三条学生记录到表中
s.executeUpdate(r1);
s.executeUpdate(r2);
s.executeUpdate(r3);
s.close();
con.close();
}
catch(SQLException e)
{ System.out.println("SQLException: " +e.getMessage()); }
}
}
七、实验心得:(根据本次实验体会写出心得,不得少于200字)