《Java程序设计》实验指导书21.docx
《《Java程序设计》实验指导书21.docx》由会员分享,可在线阅读,更多相关《《Java程序设计》实验指导书21.docx(22页珍藏版)》请在冰豆网上搜索。
《Java程序设计》实验指导书21
Java语言程序设计
实验指导书
实验一 JDK的安装和运行环境变量的设置
实验目的
1.通过实验使学生掌握J2SDK安装和运行环境设置。
2.掌握java最简单的程序结构,会使用javac和java命令。
实验内容
1.下载j2sdk1.4.2。
在网站的download链接中选择J2SE1.4.2链接,选择j2sdk-1.4.2-04-windows-i586.exe下载。
2.安装该程序。
默认安装路径为c:
\jdk1.4.2。
3.设置环境变量。
主要有path和classpath两个环境变量需设置。
在windows98中的设置方式为:
使用记事本打开autoexec.bat文件,加入:
SETPATH=%PATH%;c:
\jdk1.4.2\bin
SET CLASSPATH=.;c:
\jdk1.4.2\lib
在windows2000按如下方法设置:
进入“控制面板”->“系统”->“高级”->“环境变量”->“系统变量”后,双击path,在后面添加:
c:
\jdk1.4.2\bin,双击classpath,在后面添加:
c:
\jdk1.4.2\lib。
重新启动系统。
4、编写一个输出“这是我的第一个JAVA程序”程序。
5、示例程序:
publicclassHelloWorld{
publicstaticvoidmain(String[]args){
System.out.println(“HelloWorld”);
}
}
在记事本中编写该程序,并保存为d:
\my\HelloWorld.java。
运行过程为:
进入dos环境,切换到保存路径,然后在命令行中输入下列命令:
javacHelloWorld.java
编译通过后,在命令行中输入下面的命令
javaHelloWorld
运行结果应该为:
HelloWorld
实验二 JAVA语言基础实验
实验目的
1.通过实验使学生掌握JAVA变量、标识符以及语法规则。
2.掌握JAVA三种程序结构的设计方法。
3.掌握数组的声明,使用方法。
4.掌握JAVA基本程序设计的方法。
实验原理
Java中数据类型分为基本数据类型与复合数据类型,相应地变量分为基本类型与引用类型。
基本类型变量有8种,而类、接口和数组变量是引用类型。
基本类型变量使用和C及C++完全一样,但引用类型的使用有点与C中的指针相同(注意Java中并没有指针的概念)。
引用类型变量的使用有引用空间与数据空间的概念,当变量声明时只是给该变量分配引用空间(或可以理解为地址空间),数据空间并没有分配。
例如定义:
Mydatetoday;定义的变量名today为引用空间的变量名
today=newMydate();实例化Mydate类的一个对象,也即产生了数据空间用于存放该对象的数据。
并且将该对象的地址赋给today,这样对象名today就指向了相应的数据空间。
数组的定义和使用举例inta[]=newint[6];
程序的流程控制结构和C语言基本类同,有顺序结构、选择结构、循环结构。
但初学面向对象编程容易犯程序结构上的毛病,许多同学编出的程序和面向过程语言的一样只是换成Java的语法。
原则上面向对象编程的结构,应该以类为基本组织单位。
实验内容
1.写程序,创建一个整型5*5矩阵,并输出。
本程序源文件名为shiyan21.java,包含两个类matrix及主类shiyan21
importjava.io.*;
//矩阵类包含input()及output()两个方法
classmatrix{
voidinput(inta[][]){
inti,j;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
a[i][j]=i+j;
}
}
}
//output()方法完成矩阵的输出,请在下面的方法中完成相应的代码
voidoutput(inta[][]){
}
publicclassshiyan21{
publicstaticvoidmain(String[]args){
inta[][]=newint[5][5];
matrixm=newmatrix();
m.input(a);
m.output(a);
}
}
2.给出一百分制成绩,要求输出“优”,“良”,“中”,“合格”,“差”。
90分以上为“优”,80-89为“良”,70-79为“中”,60-69为“合格”,60分以下为“差”。
importjava.io.*;
publicclassshiyan22{
//以下grade()方法的功能是根据所给成绩,得出成绩的等第请完成相应的代码
voidgrade(intscore){
}
publicstaticvoidmain(String[]args){
//该语句功能是将标准输入流system.in与输入流、缓冲流套接,从键盘接受一个字符串
BufferedReaderstrin=newBufferedReader(newInputStreamReader(System.in));
System.out.print("pleaseinputtodata:
");
//这里try{}catch(){}结构为Java系统要求的异常处理为第六章的内容
try{
//将键盘输入的字符串转换成整数类型,并赋值给变量s
s=Integer.parseInt(strin.readLine());
//以上方法注意在以后自己的程序中加以应用
}catch(IOExceptione){}
shiyan12x=newshiyan22();
x.grade(s);
}
}
3.给出一个不多于5位的正整数,要求
(1)求出他是几位数
(2)分别打印出每一位数字(3)按照逆序打印出各位数值。
例如123应输出321。
4.求40的阶乘。
本题编程时要考虑到所求结果的准确性
5.给出10个数,使用某种排序方法,按照从小到大的顺序输出各个数。
实验三 JAVA面向对象特性实验
实验目的
1.过实验使学生类的封装、继承和多态等特性。
2.掌握JAVA类的设计方法。
3.掌握JAVA类继承以及方法重写的实现。
4.掌握接口的设计方法。
5.掌握包的设计以及使用方法。
实验原理
面向对象是Java语言最基本的特征,其中封装、继承和多态是面向对象程序设计的三个关键特征。
将对象的数据与操作数据的方法结合,通过方法将对象的数据与实现细节保护起来就是封装。
外界只能通过对象的方法访问对象,这样既保证了对象数据的一致性,又提高了软件模块的内聚性。
继承性使得子类继承父类的状态(变量)和行为(方法),这样提高了编程的效率和代码的利用率。
Java中类都有构造方法,通常构造方法用来进行该类的初始化。
构造方法与所属的类同名,但是要注意只有无参数的构造方法可以继承,而有参数的构造方法是不能够被继承的。
方法重写可以隐藏父类定义的方法,可以使子类有自己特有的行为方法。
要注意子类中重写的方法必须与父类中对应的方法具有相同的返回值、方法名和参数列表。
方法重写又是实现对象运行时多态的基础,而多态性又使得程序具有良好的可扩展性。
包又是Java的重要特色,它可以将一组相关类与接口包裹起来形成包。
提供了以包为单位的独立命名空间,有效地解决了命名冲突的问题。
通过以下几个实验,可以掌握和理解类的这些基本特性。
实验内容
1.设计一个水果类,要求包括名称(name),颜色(color),产地(place)等属性以及得到和输出这些属性的方法。
要求各有一个无参和有参的构造函数。
2.设计一个苹果类和一个菠萝类,继承水果类。
并至少具有一个品种属性。
重写父类的部分方法。
要求这两个类都有各自的构造函数。
3.将以上各类包含在一个包中。
4.设计一个接口Action,该接口中至少包含吃(eat),摘(pick)和存储(store)方法。
要求以上各类实现该接口。
5.计一个测试类,输出所有信息。
实验四 Java输入输出实验
实验目的
1.通过实验使学生理解JAVA输入输出系统的基本原理。
2.掌握字节流输入输出类(FileInputStream,FileOutputStream)、字符流输入输出类(FileReader,FileWriter)、随机存取文件类RandomAccessFile及File类的使用方法。
实验原理
应用程序常常需要从外界输入数据,或者把数据输出到外界。
Java的输入输出系统支持流式输入/输出(即顺序存取方式)和随机存取文件的方式,保存数据的粒度从字节、字符到对象。
其中流式输入输出是最基础的,应该重点掌握。
实验内容
1.编写一个程序,求2—200之间的素数,并将结果保存在文件prime.dat中。
再从该文件中读取内容并在屏幕上显示出来。
以下程序共有两个类,类prime完成求素数。
请根据所述功能,在程序空白处填空。
importjava.io.*;
classprime{
voidgetprime(intm,intn,inta[]){
inti,j,k;
for(i=m,k=0;i<=n;i++){
for(j=2;j<=i/2;j++){
if(i%j==0)break;
}
if(j>i/2)a[k++]=i;
}
}
}
publicclassshiyan41{
publicstaticvoidmain(String[]args){
Fileprimefile=newFile("prime1.dat");
primep=newprime();
inta[]=newint[50];
inti=0,c;
p.getprime(2,200,a);
try{
FileOutputStreamout=;//创建文件输出字节流
FileInputStreamin=;//创建文件输入字节流
while(a[i]!
=0){
;//写数据
}
while((c=in.read())!
=-1){
System.out.println(c);
}
in.close();
out.close();}catch(IOExceptione){e.printStackTrace();}
}
}
2.写一个程序显示在程序的命令行中指定的目录中所有的文件和目录,包括文件大小以及是文件还是目录类型,并且按照字母顺序排列显示。
3.使用随机访问流读出文本文件最后n个字符,文本文件名和数字n用命令行参数的方式提供。
以下程序是本题的主要代码,按照题目要求运行时命令行指定文本文件名和数字n。
例如:
javashiyan44text.txt12其中文本文件名text.txt对应args[0],12对应args[1]。
必须加以注意的是这里12为字符串,要求在程序中加以处理转化为数值类型。
请根据功能要求将空白处的语句填写完整。
importjava.io.*;
publicclassshiyan44{
publicstaticvoidmain(Stringargs[])throwsException{
Stringfilename,s,t;
intn=0;
longleng,filepoint;//注意这里定义为长整型
RandomAccessFilefile=;//创建随机文件读写对象
leng=file.length();
t=args[1];
//以下循环语句完成将从命令行接受到的数字字符转换成为整数类型
for(inti=0;in=10*n+(int)(t.charAt(i)-48);
}
file.skipBytes((int)(leng-n));
//将文件指针向前移动到最后n个字符,请注意这里为何要将长整形转换为整型类型
filepoint=file.getFilePointer();
while(filepoints=;//读出内容并赋值给变量s
System.out.println(s);
filepoint=file.getFilePointer();
}
file.close();
}
}
4.编写一个程序,保存一个包含整数、日期和地址的对象到文件sample.dat中,并从该文件中读取对象显示出来。
实验五 基于AWT及SWING的GUI及事件处理实验
实验目的
1.熟悉JAVA的图形用户界面的基本组件,以及它们的层次关系和使用方法。
2.掌握常见的布局管理设计器,如FlowLayout,GridLayout,BorderLayout。
学会如何进行布局设计。
3.掌握事件驱动原理,使GUI中的基本组件能够响应用户的操作。
实验原理
在应用程序的开发中,开发出友好的图形用户界面是极为重要的。
在Java中有AWT(AbstractWindowsToolkit抽象窗口工具集)和Swing两类工具集,其中AWT和本地代码有关并不完全独立于平台,而Swing成为轻量级组件完全支持跨平台。
但是两者的机制完全一样,例如事件处理机制都采用监听方式;都提供了容器、布局管理器的机制。
实验内容
1.编写程序,包括一个标签、文本框和命令按钮。
当用户单击按钮时,程序把文本框中的内容复制到当前的位置。
2.编写程序,利用JtextField和JpasswordField分别接收用户输入的用户名和密码,并对用户输入的密码进行检验。
对于每个用户名有三次密码输入机会。
3.编写程序实现一个计算器,包括10个数字(0-9)按钮和4个运算符(加、减、乘、除)按钮,以及等号和清空两个辅助按钮,还有一个显示输入输出的文本框。
以下是本题的参考代码,请大家调试运行然后根据自己的需求添加相应的功能。
如增加开平方根、求阶乘等功能。
importjava.awt.event.*;
importjavax.swing.*;
importjava.awt.*;
publicclassshiyan53extendsJFrame{
JButtonjbut0,jbut1,jbut2,jbut3,jbut4,jbut5;
JButtonjbut6,jbut7,jbut8,jbut9,jbutClear,jbutCalculate;
JButtonjbutAdd,jbutSubtract,jbutMultiply,jbutDivide;
JTextFieldjTxt;
floats=0,t=0,result;
intoperator;
booleanflag=true;
JLabeljlab=newJLabel();
//
shiyan53(){
super("");
ContainercontentPane=getContentPane();
contentPane.setLayout(newGridLayout(5,4));
jbut0=newJButton("0");
jbut1=newJButton("1");
jbut2=newJButton("2");
jbut3=newJButton("3");
jbut4=newJButton("4");
jbut5=newJButton("5");
jbut6=newJButton("6");
jbut7=newJButton("7");
jbut8=newJButton("8");
jbut9=newJButton("9");
jbutAdd=newJButton("+");
jbutSubtract=newJButton("-");
jbutMultiply=newJButton("*");
jbutDivide=newJButton("/");
jbutClear=newJButton("Clear");
jbutCalculate=newJButton("=");
jTxt=newJTextField();
contentPane.add(jbut0);
contentPane.add(jbut1);
contentPane.add(jbut2);
contentPane.add(jbut3);
contentPane.add(jbut4);
contentPane.add(jbut5);
contentPane.add(jbut6);
contentPane.add(jbut7);
contentPane.add(jbut8);
contentPane.add(jbut9);
contentPane.add(jbutAdd);
contentPane.add(jbutSubtract);
contentPane.add(jbutMultiply);
contentPane.add(jbutDivide);
contentPane.add(jbutClear);
contentPane.add(jbutCalculate);
contentPane.add(jTxt);
jbut0.addActionListener(newButtonHandler());
jbut1.addActionListener(newButtonHandler());
jbut2.addActionListener(newButtonHandler());
jbut3.addActionListener(newButtonHandler());
jbut4.addActionListener(newButtonHandler());
jbut5.addActionListener(newButtonHandler());
jbut6.addActionListener(newButtonHandler());
jbut7.addActionListener(newButtonHandler());
jbut8.addActionListener(newButtonHandler());
jbut9.addActionListener(newButtonHandler());
jbutAdd.addActionListener(newButtonHandler());
jbutSubtract.addActionListener(newButtonHandler());
jbutMultiply.addActionListener(newButtonHandler());
jbutDivide.addActionListener(newButtonHandler());
jbutClear.addActionListener(newButtonHandler1());
jbutCalculate.addActionListener(newButtonHandler2());
}
//ActionEvent
classButtonHandlerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Stringo,p;
p=e.getActionCommand();
o=jTxt.getText();
jTxt.setText(o+p);
if(p=="+"){flag=false;operator=1;}
elseif(p=="-"){flag=false;operator=2;}
elseif(p=="*"){flag=false;operator=3;}
elseif(p=="/"){flag=false;operator=4;}
elseif(flag)s=10*s+(int)(p.charAt(0)-48);
elset=10*t+(int)(p.charAt(0)-48);
}
}
//ActionEventclearjTxt
classButtonHandler1implementsActionListener{
publicvoidactionPerformed(ActionEvente){
jTxt.setText("");
flag=true;
s=0;
t=0;
}
}
//ActionEventcalculator
classButtonHandler2implementsActionListener{
publicvoidactionPerformed(ActionEvente){
switch(operator){
case1:
result=s+t;
break;
case2:
result=s-t;
break;
case3:
result=s*t;
break;
case4:
result=s/t;
break;
}
jTxt.setText(""+result);
}
}
publicstaticvoidmain(Stringargs[]){
shiyan53cal=newshiyan53();
cal.setSize(400,150);
cal.setDefaultCloseOperation(cal.EXIT_ON_CLOSE);
cal.setVisible(true);
}
}
实验六Applet
实验目的
1.掌握JavaApplet程序结构和开发过程
2.了解Applet运行机制
3.学会编写Applet对应的HTML文件,掌握从HTML文件向Applet传递参数的方法。
4.了解Applet与浏览器的通信。
5.掌握在Applet图形界面设计。
实验原理
Applet小应用程序,是Java与Web相结合的一种应用形式。
它可以使Web页具有动画、声音、图象和其他特效功能,可使Web页能够与用户动态交互,接受用户的输入并且给用户以相应的回应。
而且在Applet中支持使用AWT和SWING组件构建图形化用户界面。
实验内容
1.编写Applet,从HTML文件中获取两个字符串参数,并将它们在浏览器中