《Java语言程序设计基础教程》
上机实验指导手册
实验一 Java环境演练
【目的】
①安装并配置Java运行开发环境;
②掌握开发Java应用程序的3个步骤:编写源文件、编译源文件和运行应用程序; ③掌握开发Java Applet程序的3个步骤:编写源文件、编译源文件和运行Java Applet程序;
④学习同时编译多个Java源文件。 【内容】
1.一个简单的应用程序
实验要求:
编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
public class Hello {
public static void main (String args[ ]) {
【代码1】 ; import .*;
public class FirstApplet extends Applet {
public void paint(Graphics g) {
;
1. 【代码1】ava
【结果】
将本次上机实验结果按照以上内容依次填写实验目标、过程、结果。
【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
实验二 Java基本数据类型与控制语句
【目的】
①掌握char型数据和int型数据之间的相互转换,同时了解unicode字符表; ②掌握使用if…else if多分支语句;
③使用if…else分支和while循环语句解决问题。 【内容】
1.输出希腊字母表。
实验要求:
编写一个Java应用程序,该程序在命令行窗口输出希腊字母表。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
public class GreekAlphabet {
public static void main (String args[ ])
{
int startPosition=0,endPosition=0; char cStart='α',cEnd='ω';
【代码1】 用“yourGuess>realNumber”替换【代码1】,可以么
2. 语句:“猜对了!”);”为何要放在while循环语句之后放在while语句的循环体中合理吗
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。
【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
实验三 类与对象、继承
【目的】
①使用类来封装对象的属性和功能;
②掌握类变量与实例变量,以及类方法与实例方法的区别; ③掌握使用package和import语句。 ④巩固以下概念:
子类的继承性 子类对象的创建过程 成员变量的继承与隐藏 方法的继承与重写
【内容】
1.三角形、梯形和圆形的类封装
实验要求:
编写一个Java应用程序,该程序中有3个类:Trangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。具体要求如下:
a) Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有返回周长、面积以及修改三个边的功能。另外,Trangle类还具有一个boolean型的属性,该属性用来判断三个属能否构成一个三角形。
b) Lader类具有类型double的上底、下底、高、面积属性,具有返回面积的功能。
c) Circle类具有类型为double的半径、周长和面积属性,具有返回周长、面积的功能。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
class Trangle {
double sideA,sideB,sideC,area,length; boolean boo;
public Trangle(double a,double b,double c) {
【代码1】 程序中仅仅省略【代码15】,编译能通过吗
2. 程序中仅仅省略【代码16】,编译能通过吗
3. 程序中仅仅省略【代码15】,运行时出现怎样的异常提示
1. 给Trangle类增加3个方法,分别用来返回3个边:sideA、sideB和sideC。 2. 让AreaAndLength类中的circle对象调用方法修改半径,然后输出修改后的
半径以及修改半径后的圆的面积和周长。
2.实例成员与类成员。
实验要求:
按程序模板的要求编写源文件,要特别注意程序的输出结果,并能正确解释输出的结果。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
class A {
【代码1】 将inputA()方法中的
改写为
编译是否出错为什么 2. 将inputB()方法中的
改写为
编译是否报错为什么
3.使用package语句与import语句。
实验要求:
按实验要求使用package语句,并用import语句使用Java平台提供的包中的类以及自定义包中的类。掌握一些重要的操作步骤。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
模板1:
将模板1给出的Java源文件命名为,将编译后得到的字节码文件复制到
c:\\1000\om\\jiafei目录中。
package ;
public class SquareEquation {
double a,b,c; double root1,root2; boolean boo;
public SquareEquation(double a,double b,double c) {
=a; =b; =c; if(a!=0) {
boo=true; } else {
boo=false; } }
public void getRoots() { if(boo) {
\"是一元2次方程\"); double disk=b*b-4*a*c; if(disk>=0) {
root1=(-b+(disk))/(2*a); root2=(disk))/(2*a);
\"方程的根:%f,%f\\n\ } else {
\"方程没有实根\\n\"); } } else {
\"不是一元2次方程\"); } }
public void setCoefficient(double a,double b,double c) { =a; =b; =c; if(a!=0) {
boo=true; } else {
boo=false; } } }
模板2:
将模板2给出的Java源程序保存到d:\\2000中。在编译模板2给出的Java
源文件之前,要重新设置classpath。假设本地机SDK的安装目录是E:\\。
在命令行执行如下命令:
set classpath=e:\\\\jre\\lib\\;.;c:\\1000
然后编译模板2给出的Java源程序。或用鼠标右键点击“我的电脑”,弹
出快捷菜单,然后选择“属性”命令,弹出“系统属性”对话框,再单击该对话框中的“高级”选项卡,然后单击“环境变量”按钮。将classpath的值修改为:
E:\\\\jre\\lib\\;.;c:\\1000
然后重新打开一个命令行窗口,编译模板2给出的Java源程序。
import .*;
class SunRise {
public static void main(String args[ ]) {
SquareEquation equation=new SquareEquation(4,5,1); (); (-3,4,5); (); } }
实验后的练习:
假设SDK的安装目录是E:\\,那么Java运行系统默认classpath的值是:E:\\\\jre\\lib\\;.;
其中的“”表示应用程序可以使用当前目录中的无名包类以及当前目录下的子目录中的类,子目录中的类必须有包名,而且包名要和子目录结构相对应。
因此,如果将模板2应用程序的字节码文件存放到d:\\5000中,并将的字节码文件存放在D:\\5000\om\\jiafei中,那么就不需要修改classpath。要特别注意的是,因为有包名,切不可将以及它的字节码文件存放在d:\\5000中,即不可以和的字节码存放在一起,请进行如下的练习: 1. 将存放在D:\\5000\om\\jiafei中,编译: D:\\5000\om\\jiafei\\javac 2. 将存放到D:\\5000中,编译: D:\\5000\\javac 3. 运行: java Sunrise
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。 【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
实验四 字符串、时间与数字类
【目的】
①掌握String类的常用方法
②掌握Date类以及Calendar类的常用方法; ③掌握BigInteger类的常用方法。 【内容】
1.String类的常用方法。
实验要求:
编写一个Java应用程序,判断两个字符串是否相同,判断字符串的前缀、后缀是否和某个字符串相同,按字典顺序比较两个字符串的大小关系,检索字符串,创建字符串,将数字型字符串转换为数字,将字符串存放到数组中,用字符数组创建字符串。。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
class StringExample
{ public static void main(String args[]) { String s1=new String(\"you are a student\"), s2=new String(\"how are you\"); if(【代码1】) 220302”; String temp=(position+1); \"数字\"+m+\"有\"+()+\"位小数\") ; String s9=new String(\"ABCDEF\"); char a[]=【代码10】 程序中的s6改写成
String s6=new String(“1a12b”); 运行时提示怎样的错误
2. 请用数组a的前3个单元创建一个字符串并输出该串。 3. 请给出获取path中“jsp”子字符串的代码。 4. 在程序的适当位置增加如下代码,注意输出的结果。
String str1=new String(“ABCABC”),
str2=null, str3=null, str4=null;
str2=(“A”,”First”); str3=(“B”,”Second”); str4=(“C”,”Third”);
可以使用Long类中的下列static方法得到整数各种进制的字符串表示:
Public static String toBinaryString(long i) Public static String toOctalString(long i)
Public static String toHexString(long i) Public static String toString(long i,int p)
其中的toString(long i, int p)返回整数i的p进制表示。请在适当位置添加代码输出12345的二进制、八进制和十六进制表示。
6. 在适当位置添加代码,分别输出数字m的整数部分和小数部分。
2.比较日期的大小。
实验要求:
编写一个Java应用程序,用户从输入对话框输入了两个日期,程序将判断两个日期的大小关系,以及两个日期之间的间隔天数。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
DateExample
import .*;
import class DateExample {
public static void main(String args[ ]) {
String str=(\"输入第一个日期的年份:\"); int yearOne=(str); str=(\"输入该年的月份:\"); int monthOne=(str); str=(\"输入该月份的日期:\");
int dayOne=(str);
str=(\"输入第二个日期的年份:\"); int yearTwo=(str); str=(\"输入该年的月份:\"); int monthTwo=(str); str=(\"输入该月份的日期:\"); int dayTwo=(str);
Calendar calendar=【代码1】 Calendar对象可以将时间设置到年、月、日、
时、分、秒。请改进上面的程序,使用户输入的两个日期包括时、分、秒。 2. 根据本程序中的一些知识,编写一个计算利息(按天计算)的程序。从输入对话框输入存款的数目和起止时间。
3.处理大整数。
实验要求:
编写一个Java应用程序,计算两个大整数的和、差、积和商,并计算一个大整数的因子个数(因子中不包括1和大整数本身)。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
BigintegerExample
import .*;
class BigIntegerExample {
public static void main(String args[]) { BigInteger n1=new BigInteger(\"654321\"),
n2=new BigInteger(\"456789\"), result=null;
result=【代码1】编写程序,计算大整数的阶乘。
2. 编写程序,计算1+2+3…的前9项的和。
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。 【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
实验五 组件与事件处理
【目的】
①学习处理ActionEvent事件;
②学习处理ItemEvent事件和paint方法; ③学习使用布局类。 【内容】
1.算术测试。
实验要求:
编写一个算书测试小软件,用来训练小学生的算术能力。程序由3个类组成,
其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案;MainClass是软件的主类。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
public class Teacher { int numberOne,numberTwo; String operator=\"\"; boolean right;
public int giveNumberOne(int n) { numberOne=(int)()*n)+1; return numberOne; }
public int giveNumberTwo(int n)
{ numberTwo=(int)()*n)+1;
return numberTwo; }
public String giveOperator() { double d=(); if(d>=
operator=\"+\"; else
operator=\"-\";
return operator;
}
public boolean getRight(int answer) { if(\"+\"))
{ if(answer==numberOne+numberTwo) right=true; else
right=false;
}
else if(\"-\"))
{ if(answer==numberOne-numberTwo) right=true; else
right=false; }
return right;
}
}
import .*;
import class ComputerFrame extends Frame implements ActionListener { TextField textOne,textTwo,textResult; Button getProblem,giveAnwser; Label operatorLabel,message; Teacher teacher; ComputerFrame(String s)
{ super(s);
teacher=new Teacher(); setLayout(new FlowLayout());
textOne=【代码1】 给上述程序增加测试乘、除的功能。
2.信号灯。
实验要求:
编写一个带有窗口的应用程序。在窗口的北面添加一个下拉列表,该下拉列表有“”、“”和“”三个选项。在窗口的中心添加一个画布,当用户在下拉列表选择某项后,画布上绘制相应的信号灯。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import .*;
public class SignalCanvas extends Canvas { int red,green,yellow,x,y,r; SignalCanvas() { setBackground; }
public void setRed(int r) { red=r; }
public void setGreen(int g) { green=g; }
public void setYellow(int y) { yellow=y; }
public void setPosition(int x,int y) { =x; =y; }
public void setRadius(int r) { =r; }
public void paint(Graphics g) { if(red==1) { ; }
else if(green==1) { ; }
else if(yellow==1) { ; }
(x,y,2*r,2*r); } }
import .*; import .*;
import class SignalFrame extends Frame implements ItemListener { Choice choice;
SignalCanvas signal=null;
String itemRed=\"红灯\黄灯\绿灯\"; public SignalFrame()
{ choice=【代码1】 idth; int h=().height; int m=(w,h); (m/6); if(itemRed)) { if(signal!=null) { (1); (0); (0); (w/3,0); (); } }
else if(itemYellow)) { if(signal!=null) { (0); (1); (0); (w/3,h/3); (); } }
else if(itemGreen)) { if(signal!=null) { (0); (0); (1);
(w/3,2*h/3); (); } } } }
public class SignalMainClass
{ public static void main(String args[]) { SignalFrame frame; frame=new SignalFrame() ; (\"信号灯\"); } }
实验后的练习:
1. 改进上述程序,在下拉列表中增加“熄灭所有灯”选项,当选中该项时,画布上绘制一个半径为0,位置是(0,0)的圆。
3.布局与日历。
实验要求:
编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenter的布局是7行7列的GriderLayout布局,pCenter
中放置49个标签,用来显示日历。窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮,可以显示当前月的上一月的日历。窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import class CalendarBean {
String day[];
int year=2005,month=0; public void setYear(int year) { =year; }
public int getYear() { return year; }
public void setMonth(int month) { =month; }
public int getMonth() { return month; }
public String[] getCalendar()
{ String a[]=new String[42]; Calendar 日历=();
日历.set(year,month-1,1); int 星期几=日历.get-1; int day=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { day=31; }
if(month==4||month==6||month==9||month==11) { day=30; }
if(month==2)
{ if(((year%4==0)&&(year%100!=0))||(year%400==0)) { day=29; } else
{ day=28; } }
for(int i=星期几,n=1;i<星期几+day;i++) {
a[i]=(n) ; n++; } return a; }
}
import .*; import .*; import .*;
public class CalendarFrame extends Frame implements ActionListener { Label labelDay[]=new Label[42]; Button titleName[]=new Button[7];
String name[]={\"日\一\二\三\四\五\六\ Button nextMonth,previousMonth; int year=2006,month=10; CalendarBean calendar;
Label showMessage=new Label(\"\ public CalendarFrame() { Panel pCenter=new Panel(); 【代码1】 etText(day[i]); }
nextMonth=new Button(\"下月\"); previousMonth=new Button(\"上月\"); (this); (this);
Panel pNorth=new Panel(), pSouth=new Panel(); (previousMonth); (nextMonth); (showMessage);
(\"日历:\"+()+\"年\"+ ()+\"月\" );
ScrollPane scrollPane=new ScrollPane(); (pCenter);
【代码4】etText(day[i]); } }
else if()==previousMonth) { month=month-1; if(month<1) month=12; (month); String day[]=(); for(int i=0;i<42;i++)
{ labelDay[i].setText(day[i]); } }
(\"日历:\"+()+\"年\"+()+\"月\" ); } }
public class CalendarMainClass
{ public static void main(String args[]) { CalendarFrame frame=new CalendarFrame(); (100,100,360,300); (true); ();
(new { public void windowClosing e) { (0); } } ); } }
实验后的练习:
1. 请在CalendarFrame类中增加一个TextField文本框,用户可以通过在文本框中输入年份来修改calendar对象的int成员year。
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。 【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
实验六 多线程
【目的】
①掌握使用Thread的子类创建线程; ②学习使用Thread类创建线程; ③学习处理线程同步问题。 【内容】
1.汉字打字练习。
实验要求:
编写一个Java应用程序,在主线程中再创建一个Frame类型的窗口,在该窗口中再创建1个线程giveWord。线程giveWord每隔2秒钟给出一个汉字,用户使用一种汉字输入法将该汉字输入到文本框中。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import .*;
public class WordThread extends Thread { char word; int k=19968; Label com;
WordThread(Label com) { =com; }
public void run() { k=19968; while(true) {
word=(char)k;
(\"\"+word); try{ 【代码1】;
import class ThreadFrame extends Frame implements ActionListener {
Label wordLabel; Button button;
TextField inputText,scoreText; 【代码2】quals())) { score++; }
(\"得分:\"+score); (null); } } }
public class ThreadWordMainClass
{ public static void main(String args[]) { new ThreadFrame(); }
实验后的练习:
1. 在WordThread类中增加int型的成员time,其初值为6000,将其中的【代码1】更改为线程中断time毫秒。在WordThread类增加public void setTime(int n)方法,使得WordThread线程对象可以调用该方法修改time的值。
2.旋转的行星。
实验要求:
编写一个应用程序,模拟月亮围绕地球旋转、地球围绕太阳旋转。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import .*;
public class Mycanvas extends Canvas { int r; Color c;
public void setColor(Color c) { =c; }
public void setR(int r) { =r; }
public void paint(Graphics g) { (c);
(0,0,2*r,2*r); }
public int getR() { return r; } }
import .*;
public class Planet extends Panel implements Runnable { 【代码1】 tart(); }
catch(Exception exe){} }
public void paint(Graphics g) { ;
(w/2-9,h/2-9,18,18); }
public void run() { int i=0; while(true) { i=(i+1)%360; ((int)pointX[i](),
(int)pointY[i]());
try{ 【代码3】 ;
import class HaveThreadFrame extends Frame implements Runnable { 【代码4】 idth;
height=getBounds().height; pointX[0]=0; pointY[0]=-radius; double angle=1*180; for(int i=0;i<359;i++)
{ pointX[i+1]=pointX[i]*(angle)(angle)*pointY[i]; pointY[i+1]=pointY[i]*(angle)+pointX[i]*(angle); }
for(int i=0;i<360;i++) { pointX[i]=pointX[i]+width/2; pointY[i]=pointY[i]+height/2; }
setLayout(null); setVisible(true); validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e) { (0); } } ); add(earth);
((int)pointX[0]().width/2,
(int)pointY[0]().height/2); ();
【代码5】 idth/2,
(int)pointY[i]().height/2); try{ (100); }
catch(InterruptedException e){} } }
public void paint(Graphics g) { ;
(width/2-15,height/2-15,30,30);
} }
public class ThreadRotateMainClass { public static void main(String args[]) { new HaveThreadFrame(); } }
实验后的练习:
1. 在Planet类中再增加一个Mycanvas对象greenBall和一个Thread对象Satellite,线程Satellite占有CPU资源期间可以让greenBall画布旋转。
3.双线程接力。
实验要求:
编写一个应用程序,除了主线程外,还有两个线程:first和second。first负责模拟一个红色的按钮从坐标(10,60)运动到(100,60);second负责模拟一个绿色的按钮从坐标(100,60)运动到(200,60)。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import .*;
import class MoveButton extends Frame implements Runnable,ActionListener { 【代码1】在MoveButton类中再增加一个蓝色的按钮和一个third线程,third
线程负责将这个蓝色的按钮从(200,60)运动到(300,60)。
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。 【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
实验七
【目的】
输入输出流
①掌握字符输入、输出流的用法; ②掌握RandomAccessFil类的使用; ③掌握ZipInputStream流的使用。 【内容】
1.学读汉字。
实验要求:
编写一个Java应用程序,要求如下:
(1)可以将一个由汉字字符组成的文本文件读入到程序中;
(2)单击名为“下一个汉字”的按钮,可以在一个标签中显示程序读入的一个汉字;
(3)单击名为“发音”的按钮,可以听到标签上显示的汉字的读音。 (4)用户可以使用文本编辑器编辑程序中用到的3个由汉字字符组成的文本文件:、和,这些文本文件中的汉字需要用空格、逗号或回车分隔。
()需要自己制作相应的声音文件,比如:文件包含汉字“你”,那么在当前应用程序的运行目录中需要有“你.wav”格式的声音文件。
()用户选择“帮助”菜单,可以查看软件的帮助信息。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import .*;
import class ChineseCharacters
{ public StringBuffer getChinesecharacters(File file) { StringBuffer hanzi=new StringBuffer(); try{ FileReader inOne=【代码1】 ;
import .*; import
class
StudyFrame
extends
Frame
implements
ItemListener,ActionListener,Runnable
{ ChineseCharacters chinese; Choice choice;
Button getCharacters,voiceCharacters; Label showCharacters;
StringBuffer trainedChinese=null; Clip clip=null; Thread voiceThread; int k=0; Panel pCenter; CardLayout mycard; TextArea textHelp; MenuBar menubar; Menu menu; MenuItem help; public StudyFrame()
{ chinese=new ChineseCharacters(); choice=new Choice(); (\"\"); (\"\"); (\"\");
showCharacters=new Label(\"\ (new Font(\"宋体\ ;
getCharacters=new Button(\"下一个汉字\");
voiceCharacters=new Button(\"发音\"); voiceThread=new Thread(this); (this); (this); (this);
Panel pNorth=new Panel();
(new Label(\"选择一个汉字字符组成的文件\")); (choice); add(pNorth,;
Panel pSouth=new Panel(); (getCharacters); (voiceCharacters); add(pSouth,; pCenter=new Panel(); mycard=new CardLayout(); (mycard);
textHelp=new TextArea(); (\"hanzi\ (\"help\ add(pCenter,;
menubar=new MenuBar(); menu=new Menu(\"帮助\"); help=new MenuItem(\"关于学汉字\"); (this); (help); (menu);
setMenuBar(menubar);
setSize(350,220); setVisible(true);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e) { (0); } }); validate(); }
public void itemStateChanged(ItemEvent e) { String fileName=();
File file=new File(fileName); trainedChinese=(file); k=0;
(pCenter,\"hanzi\") ; }
public void actionPerformed(ActionEvent e) { if()==getCharacters) { if(trainedChinese!=null) { char c=(k); k++; if(k>=()) k=0; (\"\"+c); } else
{ (\"请选择一个汉字字符文件\");
} }
if()==voiceCharacters) { if(!()))
{ voiceThread=new Thread(this); } try{ (); }
catch(Exception exp){} }
if()==help)
{ (pCenter,\"help\") ;
try{ File helpFile=new File(\"\");
FileReader inOne=【代码4】 (voiceFile)); }
catch(Exception exp){} (); (true); } }
public class StudyMainClass
{ public static void main(String args[]) { new StudyFrame(); }
rim()+\".wav\");
}
实验后的练习:
1. 在StudyFrame类中增加一个按钮previousButton,单击该按钮可以读取前一个汉字。
2.统计英文单词。
实验要求:
使用RandomAccessFile流统计一篇英文中的单词,要求如下: (1)一共出现了多少个单词; (2)有多少个互不相同的单词;
(3)给出每个单词出现的频率,并将这些单词按频率大小顺序显示在一个TextArea中。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import .*;
import class WordStatistic { Vector allWorsd,noSameWord; WordStatistic()
{ allWorsd=new Vector(); noSameWord=new Vector(); }
public void wordStatistic(File file)
{ try{ RandomAccessFile inOne=【代码1】 ;
import class StatisticFrame extends Frame implements ActionListener { WordStatistic statistic; TextArea showMessage; Button openFile;
FileDialog openFileDialog; Vector allWord,noSameWord; public StatisticFrame()
{ statistic=new WordStatistic(); showMessage=new TextArea(); openFile=new Button(\"Open File\"); (this); add(openFile,; add(showMessage,;
openFileDialog=new FileDialog(this,\"打开文件话框\ allWord=new Vector(); noSameWord=new Vector(); setSize(350,300); setVisible(true);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e) { (0); } }); validate(); }
public void actionPerformed(ActionEvent e) { ();
(); (null); (true);
String fileName=(); if(fileName!=null)
{ (new File(fileName)); allWord=(); noSameWord=();
(\"\\n\"+fileName+\"中有\"+()+\"个英文单词\"); (\"\\n其中有\"+()+\"个互不相同英文单词\"); (\"\\n按使用频率排列:\\n\"); int count[]=new int[()]; for(int i=0;i<();i++) { String s1=(String)(i); for(int j=0;j<();j++) { String s2=(String)(j); if(s2)) count[i]++; } }
for(int m=0;m<();m++) { for(int n=m+1;n<();n++) { if(count[n]>count[m]) { String temp=(String)(m); ((String)(n),m); (temp,n); int t=count[m];
count[m]=count[n]; count[n]=t; } } }
for(int m=0;m<();m++) { (\"\\n\"+(String)(m)+
\":\"+count[m]+\"/\"+()+ \"=\"+*count[m])/()); } } } }
public class StatisticMainClass
{ public static void main(String args[]) { new StatisticFrame(); } }
实验后的练习:
1. 在StatisticFrame的showMessage中增加单词按字典序排序输出的信息。
3.读取Zip文件。
实验要求:
读取,并将中含有的文件重新存放到当前目录中的book文件夹中,即将的内容解压到book文件夹中。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import .*;
import class ReadZipFile
{ public static void main(String args[]) { File f=new File(\"\"); File dir=new File(\"Book\"); byte b[]=new byte[100]; (); try
{ ZipInputStream in=new ZipInputStream(new FileInputStream(f)); ZipEntry zipEntry=null; while((zipEntry=())!=null) { File file=new File(dir,());
FileOutputStream out=new FileOutputStream(file); int n=-1; \"的内容:\");
while((n=(b,0,100))!=-1) { String str=new String(b,0,n); (b,0,n); } (); } ();
}
catch(IOException ee) {
} } }
实验后的练习:
1. 编写一个GUI程序,提供1个对话框,用户可以使用这个对话框选择要解压缩的zip文件,设置解压后所得到的文件的存放目录。
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。 【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
实验八 网络编程
【目的】
①学会使用URL对象;
②学会使用套接字读取服务器端的对象; ③掌握DatagramSocket类的使用。 【内容】
1.读取服务器端文件。
实验要求:
创建一个URL对象,然后让URL对象返回输入流,通过该输入流读取URL所包含
的资源文件。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
import .*; import .*; import .*;
public class ReadURLSource
{ public static void main(String args[]) { new NetWin(); } }
class NetWin extends Frame implements ActionListener,Runnable { Button button; URL url; TextField text; TextArea area; byte b[]=new byte[118]; Thread thread; NetWin()
{ text=new TextField(20); area=new TextArea(12,12); button=new Button(\"确定\"); (this);
thread=new Thread(this); Panel p=new Panel(); (new Label(\"输入网址:\")); (text); (button); add(area,; add(p,;
setBounds(60,60,360,300); setVisible(true); validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e) { (0); } }); }
public void actionPerformed(ActionEvent e) {
if(!()))
thread=new Thread(this); try{ (); }
catch(Exception ee) { (\"我正在读取\"+url); } }
public void run() { try { int n=-1; (null);
String name=().trim();
【代码1】 public int getDefaultPort()、public String
getRef()、public StringgetProtocol()等方法都是URL对象常有的方法,在模板中让url调用这些方法,并输出这些方法返回的值。
2.使用套接字读取服务器端对象。
实验要求:
客户端将服务器端的文本区对象读取到客户端,并添加到窗口中。首先将服务器端的程序编译通过,并运行,等待客户的呼叫。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
客户端模板:
import .*; import .*; import .*;
import Client extends Frame implements Runnable,ActionListener { Button connection; Socket socket=null;
ObjectInputStream in=null; ObjectOutputStream out=null; Thread thread; public Client()
{ socket=new Socket();
connection=new Button(\"连接服务器,读取文本区对象\"); add(connection,; (this);
thread = new Thread(this); setBounds(100,100,360,310); setVisible(true);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e) { (0); } } ); }
public void run() { while(true)
{ try{ TextArea text=(TextArea)(); add(text,; validate(); }
catch(Exception e) { break; } } }
public void actionPerformed(ActionEvent e) { if()==connection)
{ try { if()) { } else
{ InetAddress address=(\"\");
InetSocketAddress socketAddress=【代码1】; import .*; import .*; import .*;
public class Server
{ public static void main(String args[]) { ServerSocket server=null; ServerThread thread; Socket you=null; while(true)
{ try{ server=【代码1】tart(); }
else{ continue; } } } }
class ServerThread extends Thread { Socket socket;
ObjectInputStream in=null; ObjectOutputStream out=null;
String s=null; ServerThread(Socket t) { socket=t;
try { out=new ObjectOutputStream(【代码3】); 参照模板程序,编写一个客
户/服务器程序,服务器向客户发送一个TextArea对象和一个Button对象。
3.基于UDP的图像传输。
实验要求:
编写客户/服务器程序,客户端使用DatagramSocket对象将数据包发送到服务器,请求获取服务器端的图像。服务器端将图像文件包装成数据包,并使用DatagramSocket对象将该数据包发送到客户端。首先将服务器端的程序编译通过,并运行起来,等待客户的请求。
程序运行效果示例:
程序运行效果如下图所示:
程序模板:
客户端模板:
import .*; import .*; import .*;
class ImageCanvas extends Canvas { Image image=null; public ImageCanvas() { setSize(200,200); }
public void paint(Graphics g) { if(image!=null)
(image,0,0,this); }
public void setImage(Image image) { =image; } }
class Client extends Frame implements Runnable,ActionListener { Button b=new Button(\"获取图像\"); ImageCanvas canvas; Client()
{ super(\"I am a client\"); setSize(320,200); setVisible(true); (this); add(b,;
canvas=new ImageCanvas(); add(canvas,;
Thread thread=new Thread(this); validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e) { (0); } } );
(); }
public void actionPerformed(ActionEvent event) { byte b[]=\"请发图像\".trim().getBytes(); try{ InetAddress address=(\"\"); DatagramPacket data=【代码1】 ; import .*;
public class Server {
public static void main(String args[]) { DatagramPacket pack=null; DatagramSocket mailReceive=null; ServerThread thread; byte b[]=new byte[8192]; InetAddress address=null; pack=new DatagramPacket(b,; while(true)
{ try{ mailReceive=【代码1】tart(); } else
{ continue; } } } }
class ServerThread extends Thread { InetAddress address; DataOutputStream out=null; DataInputStream in=null;
String s=null;
ServerThread(InetAddress address) { =address; }
public void run() { FileInputStream in; byte b[]=new byte[8192];
try{ in=new FileInputStream (\"\"); int n=-1;
while((n=(b))!=-1)
{ DatagramPacket data=【代码3】 etBytes();
DatagramPacket data=【代码6】 将上述模板程序改成用户从服务器获
取一个文本文件的内容,并在客户端显示。
【结果】
将本次上机实验结果按照实验要求内容依次进行,填写实验目标、过程、结果。 【注意事项】
①实验报告要求每人提交一份,使用专门的报告纸,内容写全,包括实验名称、班级、姓名、同组人,试验日期、交报告日期等。
②报告不需要填写源代码,只要将完成情况和所有练习题结果写上就可以。 【思考题】
《Java语言程序设计基础教程》
练习思考题参考答案
第1章 Java程序设计概述
练习思考题
1、 Java运行平台包括三个版本,请选择正确的三项:( ) A. J2EE C. J2SE
B. J2ME
D. J2E
解答:A,B,C
2、 Java JDK中反编译工具是:( ) A. javac C. jdb
解答:D
3、 public static void main方法的参数描述是:( )
A. String args[]
B. String[] args D. String args
B. java
D. javap
C. Strings args[] 解答:A,B
4、 在Java中,关于CLASSPATH环境变量的说法不正确的是:( )
A. CLASSPATH一旦设置之后不可修改,但可以将目录添加到该环境变量中。 B. 编译器用它来搜索各自的类文件。 C. CLASSPATH是一个目录列表。 D. 解释器用它来搜索各自的类文件。 解答:A
5、 编译Java Application源文件将产生相应的字节码文件,扩展名为( ) A. .java C. .html
解答:B
6、 开发与运行Java程序需要经过的三个主要步骤为____________、____________和____________。
7、 如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是______类的子类并且存储该源程序文件的文件名为______。
8、 如果一个Java Applet程序文件中定义有3个类,则使用Sun公司的JDK编译器 编译该源程序文件将产生______个文件名与类名相同而扩展名为______的字节码文件。
9、 开发与运行Java程序需要经过哪些主要步骤和过程
10、Java程序是由什么组成的一个程序中必须要有public类吗Java源文件的命名规
B. .class
D. .exe
则是怎么样的
11、编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
第2章 Java基本的程序设计结构
练习思考题
1、 从下面选项中,选择三个有效的标示符:( )
A. IDoLikeTheLongNameClass C. const E. 3_case 解答:A,B,D
2、 下面哪一项在java中是非法的标识符( )
A. $user B. point C. You&me D. _endline 解答:C
3、 下列不属于Java保留字的是:( )
A. sizeof B. super C. abstract D. break 解答:A
4、 下面哪些java语句会导致无限循环( )
I、 while (true) i = 0;
B. $byte D. _ok
II、 while (false) i = 1;
III、 while (!false) i = 0; A、仅仅III B、I 和III C、仅仅I D、I, II 和III 解答:B
5、 下列整型数据类型中,需要内存空间最少的是 ( )A. short
B. long
C. int
D. byte
解答:D
6、 下面代码执行后,正确的输出结果是:( )
public class Example { public static void main(String args[]) { int l = 0; do {
\"Doing it for l is:\" + l); } while (--l > 0); \"Finish\");
}
}
A. Doing it for l is 3 B. Doing it for l is 1 C. Doing it for l is 2 D. Doing it for l is 0 E. Doing it for l is C1 F. Finish
。
解答:D,F
7、 若有定义 int a=1,b=2; 那么表达式(a++)+(++b) 的值是:( )
A. 3 B. 4 C. 5
D. 6
解答:B
8、 若有定义 int a=9,b=6; 那么a>b的值是:( )
A. 0
B. 1 C. false
D. true
解答:D
9、 假定有变量定义: int k=7,x=12; 那么能使值为3的表达式是:( A. x%=(k%=5) B. x%=(k-k%5) C. x%=k-k%5
D. (x%=k)-(k%=5)
解答:D
10、执行完以下代码int[ ] x = new int[25];后,以下说明正确的是:( A. x[24]为0 B. x[24]未定义 C. x[25]为0
D. x[0]为空
解答:A
11、Java应用程序的main方法中有以下语句,则输出的结果是( )。int[] x={2,3,-8,7,9}; int max=x[0]; for(int i=1;i<;i++){
if(x[i]>max) max=x[i]; } A. 2 B. -8 C. 7
D. 9
)
)
解答:D
12、设 x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是( )
A. 3 C. 4 解答:A
13、有整型数组:int[] x={2,33,88,5,10};,则调用方法 (x) 后,数组x中的元素值依次是( )
A. 88 33 10 5 2 B. 2
5 10 33 88
B. D. 5
C. 88 10 2 33 5 D. 5
33 2 10 88
解答:B
14、下列语句有错误的是:( )
A. int []a;
B. int []b=new int[10];
C. int c[]=new int[]; D. int d[]=null;
解答:C
15、下列语句有错误的是:( )
A. int a[][]=new int[5][5]; B. int [][]b=new int[5][5]; C. int []c[]=new int[5][5]; D. int [][]d=new int[5,5]; 解答:D
16、关于下面的程序,正确的结论是______。
public class ex4_7{
public static void main(String args[]){
}
int a[]=new int[5]; boolean b[]=new boolean[5];
}
A. 运行结果为0false B. 运行结果为1true
C. 程序无法通过编译 D. 可以通过编译但结果不确定 解答:A
17、在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占用______字节内存空间,这样,无论是中文字符还是英文字符,都是占用______字节内存空间。
18、设 x = 2 ,则表达式 ( x + + )/3 的值是______。
19、若x = 5,y = 10,则x < y和x >= y的逻辑值分别为______和______。 20、设有数组定义:
int MyIntArray[] = { 10, 20, 30, 40, 50, 60, 70 }; 则执行以下几个语句后的输出结果是: 。
int MyIntArray[] = { 10, 20, 30, 40, 50, 60, 70 }; int s = 0;
for (int i = 0; i < ; i++)
if (i % 2 == 1)
s += MyIntArray[i];
、数组对象的长度在数组对象创建之后,就______改变。数组元素的下标总是从
______开始。
22、对于数组int[][]t={{1,2,3},{4,5,6}}来说,等于______,t[0].length等于______。
23、已知数组a的定义为“int a[]={1,2,3,4,5};”,则a[2]=______,数组b的定义为“int b[]=new int[5];”,则b[2]=______,数组c的定义为“Object []c=new Object[5];”,则c[2]=______。
24、调用数组元素时,用______和______来唯一确定数组中的元素。
25、什么是数组数组有哪些特点Java中创建数组需要哪些步骤如何访问数组的第一个元素
26、编程计算10~20的整数的平方值,将结果保存在一个数组中。
27、编写一个程序使之从键盘读入10个整数存入整型数组a中,然后逆序输出这10
个整数。
28、某人有5张3分和4张5分的邮票,请编写一个程序,计算由这些邮票中的1张或若干张可以得到多少种不同的邮资。
29、分析写出下列程序完成的功能。
public class sun { }
30、编写一个字符界面的Java Application程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。
31、如果我国经济以每年10%的速度保持稳定增长,请编写一个程序,计算每年达到多少,多少年可以实现总量翻两番。
class exA4_1{
public static void main(String args[]){ int a=0; double i=,sum=1; while(sum<=4){ sum=(i+1)*sum; a++;
\"第\"+a+\"年达到\"+sum); }
\"需要\"+a+\"年实现两番\"); }
public static void main(String args[]) { }
double sum = ;
for (int i = 1; i <= 100; i++)
sum += / (double) i;
\"sum=\" + sum);
}
第3章 类和对象
练习思考题
1、 下列关于变量的叙述哪个是错的( )
A. 实例变量是类的成员变量。
B. 在方法中定义的局部变量在该方法被执行时创建。
C. 实例变量用关键字static声明。 D. 局部变量在使用前必须被初始化。 解答:C
2、 在Java语言中,下列哪个包是编译器自动导入的( )
A. C.
B.
D.
解答:B
3、 当类的成员未用访问权限修饰符时,Java认为此成员的访问权限为( )。
A. private 解答:C
4、 下面哪个关键字不是用来控制对类成员的访问的( )
A. public C. default 解答:C
5、 下面哪一个特性不是面向对象编程主要体现的( )。
A. 封装性 C. 多态 解答:C
6、 不允许作为类及类成员的访问控制符的是( )。
A. public C. static 解答:C
7、 为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( )。
A、 static void method( ) C、 final void method( )
B、 public void method( )
D、 abstract void method( )
B. private D. protected
B. 继承
D. 类
B. protected D. private
B. protected
解答:A
8、 可以在下面代码段point x处写入的是( )
String str; B. static int PI=;
C. public class MyClass{import .*; 解答:D
9、 下列关于变量的叙述哪个是错的( )
A、实例变量是类的成员变量。
B、在方法中定义的局部变量在该方法被执行时创建。 C、实例变量用关键字static声明。 D、局部变量在使用前必须被初始化。 解答:C
10、下列哪个类声明是正确的( )
A、abstract final class HI{} B、abstract private move(){} C、protected private number; D、public abstract class Car{} 解答:D
11、已知A类被打包在packageA , B类被打包在packageB ,且B类被声明为public ,且有一个成员变量x被声明为protected控制方式 。C类也位于packageA包,且继承了B类 。则以下说法正确的是:( )
A、A类的实例不能访问到B类的实例
B、A类的实例能够访问到B类一个实例的x成员 C、C类的实例可以访问到B类一个实例的x成员 D、C类的实例不能访问到B类的实例 解答:C
12、下列命题为真的是:( )
A、所有类都必须定义一个构造函数。 B、构造函数必须有返回值。
C、构造函数可以访问类的非静态成员。 D、构造函数必须初始化类的所有数据成员。 解答:C
13、在Java中,关于final关键字的说法正确的是( )
A、如果修饰变量,则一旦赋了值,就等同一个常量。 B、如果修饰类,则该类只能被一个子类继承。 C、如果修饰方法,则该方法不能在子类中被覆盖。 D、如果修饰方法,则该方法所在的类不能被继承。 解答:A,C
14、在Java中,下面关于包的陈述中正确的是( )
A、包的声明必须是源文件的第一句代码。 B、包的声明必须紧跟在import语句的后面。 C、只有公共类才能放在包中。
D、可以将多个源文件中的类放在同一个包中。 解答:A,D
15、______方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。______方法是不能被当前类的子类重新定义的方法。
16、 什么叫方法的重载 构造方法可以重载么 17、 简述实例变量和类变量的区别。
第4章 继承、接口和内部类
练习思考题
1、 Java中用于定义接口的关键字是( )
A、import C、class 解答:D
2、 以下关于abstract的说法,正确的是( )
A、abstract只能修饰类 B、abstract只能修饰方法
C、abstract类中必须有abstract方法 D、abstarct方法所在的类必须用abstract修饰 解答:D
3、 下列哪种说法是正确的( )
A、私有方法不能被子类覆盖。 B、子类可以覆盖超类中的任何方法。
C、覆盖方法可以声明自己抛出的异常多于那个被覆盖的方法。 D、覆盖方法中的参数清单必须是被覆盖方法参数清单的子集。 解答:A
4、关于类继承的说法,正确的是( )
A、Java 类允许多重继承 B、Java接口允许多继承 C、接口和类都允许多继承 D、接口和类都不允许多继承 解答:B
5、 关于抽象类,正确的是______。
B、package D、interface
A. 抽象类中不可以有非抽象方法
B. 某个非抽象类的父类是抽象类,则这个子类必须重载父类的所有抽象方法 C. 不能用抽象类去创建对象 D. 接口和抽象类是同一个概念 解答:B
6、 下列哪个类是由编译器自动生成对象的特殊类,是用于类操作( )
A、Class类 B、Thread类 C、System类 D、Object类 解答:A
7、 下面关于继承的哪些叙述是正确的。 ( )
A、在java中只允许单一继承。 B、在java中一个类只能实现一个接口。
C、在java中一个类不能同时继承一个类和实现一个接口。 D、java的单一继承使代码更可靠。 解答:A,D
8、 抽象类A和抽象类B的定义如下:
abstract class ex4_5_10_A { abstract int getinfo();
}
public class ex4_5_10 extends ex4_5_10_A { private int a = 0; public int getinfo() { return a;
}
public static void main(String args[]) {
}
ex4_5_10 b = new ex4_5_10();
}
关于上述代码说明正确的是( )。 A. 输出结果为0
B.通过编译但没有输出任何结果
C. 第5行不能通过编译 D. 程序第2行不能通过编译 解答:A
9、 下面程序的运行结果是______
class ex4_5_11_A { }
class ex4_5_11_B extends ex4_5_11_A { }
class ex4_5_11 { }
A. count=1 C. count=3
B. count=2 D. count=4
public static void main(String args[]) { }
ex4_5_11_B x = new ex4_5_11_B(); \"count=\" + ; public ex4_5_11_B() { }
count++;
protected static int count = 0; public ex4_5_11_A() { }
count++;
解答:B
9、设有下面两个类的定义:
class Person
{ long id; You are fired!
You are hired! C. You are hired!
You are hired! 解答:A
5、下面的程序段执行后输出的结果是( )
StringBuffer buf=new StringBuffer(\"China2008\"); (5,\"@\");
A、China2008@ B、@China2008 C、China@2008 D、China#2008
解答:C
You are fired!
D. You are hired!
You are fired!
6、在Java中,所有类的根类是( )。
A、 B、、 D、解答:A
第6章 图形用户界面设计
练习思考题
1、 下列哪个布局管理器中的按钮位置会根据Frame的大小改变而改变( )
A. BorderLayout B. CardLayout C. GridLayout D. FlowLayout 解答:D
2、 下面的组件都属于容器,父类属于的容器是( )
A、Frame B、Panel C、Container D、Applet 解答:A
3、 关于以下的组件的接口,正确的是( )
A、TextArea组件可实现的接口是ActionListener
B、List组件可实现的接口,除了ItemListener,还可以是ActionListener C、Choice组件可实现的接口是ActionListener D、以上都不对 解答:B
4、 下列哪一项是一个用于在GridLayout中的特定区域中放置多个组件的容器
A、Applet B、Panel C、Button D、Rectangle
解答:B
5、 关于对话框(Dialog)说法错误的是( )
A、对话框是Window类的子类。
B、对话框和一般窗口的区别在于它依赖于其他窗口。 C、对话框分为模式和非模式两种。
D、文件对话框的构造方法:Filedialog fdlg=new FileDialog(\"filedialog\"); 解答:D
6、 下列容器中哪一个是从继承的( )
A、Frame B、Panel C、Container D、Applet 解答:A
7、 在Java中,对组件可实现不同的布局,下列哪个不对( ) A、顺序布局(FlowLayout) B、边界布局(BorderLayout) C、网络布局(GridLayout)
D、中央布局(CenterLayout) 解答:D
8、下面关于事件监听的说明,哪一个语句是正确的。 ( )
A. 所有组件,都不允许附加多个监听器
B. 如果多个监听器加在一个组件上,那么事件只会触发一个监听器 C. 组件不允许附加多个监听器
D. 监听器机制允许按照我们的需要,任意调用addXxxxListener 方法多次,而且没有次序区别 解答:D
9、 下面哪个事件监听器可以处理在文本框中输入回车键的事件______。
A. ItemListener C. KeyListener 解答:B
B. ActionListener D. MouseListener
10、Frame类对象的默认布局是什么布局( )。
A、FlowLayout布局 C、CardLayout布局 解答:B
11、不能添加到Container中的是( )
A、an Applet B、a Component C、a Container D、a MenuComponent 解答:A
12、Panel类对象的默认布局是什么布局( )。
A、FlowLayout布局 C、CardLayout布局 解答:A
13、Java中GUI工具包有______和______。
14、通过调用方法______可以改变当前容器的布局方式。 15、通过______方法向容器中添加组件。
16、AWT布局管理器有______、______、______、______和______。 17、什么是GUI功能是什么
18、利用AWT控件编写一个求解一元二次方程根的程序,要求:
(1)具有一元二次方程三个系数a、b、c的输入界面。 (2)显示b*b-4*a*c的值。 (3)显示求出的根。
19、编写一个应用程序,窗口标题为“移动按钮”,窗口布局为null,在窗口中有两个
B、BorderLayout布局 D、GridLayout布局 B、BorderLayout布局 D、GridLayout布局
按钮,单击其中一个按钮能够让另一个按钮移动。
20、实现窗口登陆对话框,要求输入用户名和密码,如果输入正确,弹出对话框提示正确,否则提示错误。
第7章 多线程
练习思考题
1、 Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序并行机制的特
点( )
A、安全性 C、跨平台 解答:B
2、 Runnable接口中的抽象方法是( )。
A、start C、yield
解答:D 3、 有以下程序段
class MyThread extends Thread {
public static void main(String args[]) {
MyThread t = new MyThread(); MyThread s = new MyThread(); (); \"one.\"); (); \"two.\"); }
public void run() {
\"Thread\"); } }
则下面正确的选项是( ) A、编译失败
B、程序运行结果为:、程序运行结果是:、程序运行结果不确定 解答:D
4、 下列方法中可以用来创建一个新线程的是( )
B、stop D、run
B、多线性 D、可移植
A、实现接口并重写start()方法。 B、实现接口并重写run()方法。 C、继承类并重写run()方法。 D、实现类并实现start()方法。 解答:B
5、 作为类中新线程的开始点,线程的执行是从下面哪个方法开始的。( )
A、public void start() B、public void run() C、public void int()
D、public static void main(String args[]) 解答:A
6、 创建一个新线程的方法,可以使用下面哪2种 ( )
A、继承类,并且重载run方法。 B、继承类,并且重载start方法。 C、实现类,实现run方法。 D、实现接口,实现run方法。 E、实现类,实现start方法。 解答:A,D 7、 线程有几种状态
8、 引起线程中断的常见原因是什么
9、 一个线程执行完run()方法后,进入了什么状态该线程还能再调用start()方法么 10、线程在什么状态时,调用isAlive()方法返回的值是false。 11、建立线程有几种方法 12、怎样设置线程的优先级
13、线程在它的一个完整的生命周期中通常要经历哪几种状态写出这些种状态并加以说明。
第8章 文件和流
练习思考题
1、 创建一个向文件“”追加内容的输出流对象的语句是( )。
A. OutputStream out=new FileOutputStream(“”);
B. OutputStream out=new FileOutputStream(“”, “append”); C. FileOutputStream out=new FileOutputStream(“”, true); D. FileOutputStream out=new FileOutputStream(new file(“”)); E. OutputStream out=new FileOutputStream(new File(“”)true); 解答:C,E
2、 下面类中,属于过滤流FilterInputStream的子类的是( )。
A、DataInputStream C、PrintStream 解答:A
3、 FileInputStream流的read方法和FileRead流的read方法有何不同 4、 BufferedReader流能直接指向一个文件对象吗
5、 请编写一个程序,开启一个文本文件,一次读取其内的一行文本,令每行形成一个String,并将读出的String对象置于LinkedList中,以反相次序显示出LinkedList内的所有内容。
B、DataOutputStream D、BufferedOutputStream
import .*; import .*; class exA4_2{
public static void main(String args[]) throws Exception{ LinkedList lines=new LinkedList(); BufferedReader in=
new BufferedReader(new FileReader(\"\")); String s;
while((s=())!=null) (s); ();
ListIterator it=()); while()) } }
第9章 异常处理
练习思考题
1、 为了捕获一个异常,代码必须放在下面( )语句块中。
A、try块 B、catch块 C、throws块
D、finally块
解答:A
2、 下列常见的系统定义的异常中,有可能是网络原因导致的异常是( A、ClassNotFoundException B、IOException
C、FileNotFoundException
D、UnknownHostException解答:D
3、 下列常见的系统定义的异常中,哪个是输入、输出异常( )A、ClassNotFoundException B、IOException
C、FileNotFoundException D、UnknownHostException 解答:B
4、 在代码中,使用catch(Exception e)的好处是 ( )
A、只会捕获个别类型的异常
。 )
B、捕获try块中产生的所有类型的异常 C、忽略一些异常 D、执行一些程序 解答:B
6、 异常包含下列那一个内容 ( )
A、程序中的语法错误 B、程序的编译错误
C、程序执行过程中遇到的事先没有预料到的情况 D、程序事先定义好的可能出现的意外情况 解答:C
7、 编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法public void speak(int m) throws MyException,要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。
第10章 Java网络编程
练习思考题
1、 在JAVA语言网络编程中,URL类是在包中,该类中提供了许多方法用来访问URL对象的各种资源,下列哪个用来获取URL中的端口号()。
A、getFile() C、getHost() 解答:D
2、 一个URL对象通常包含哪些信息 3、 怎样读取URL中的资源
4、 Java使用哪个组件来显示URL中的HTML文件
5、 客户端的Socket对象和服务器端的Socket对象是怎样通信的 6、 基于UDP的通信和基于TCP的通信有什么不同
B、getProtocol() D、getPort()
中级开发篇
第11章 Java Applet基础
练习思考题
1、 关于Applet类,正确的说法是( )
A、Applet类是中的类
B、Applet类是Container的间接子类 C、Applet类不是容器类 D、以上都不对 解答:B
2、 浏览器禁止Applet执行下列哪些操作( )
A、在运行时调用其它程序。 B、文件读写操作。
C、装载动态连接库和调用任何本地方法。
D、试图打开一个socket进行通信,但所连接的主机并不是提供Applet的主机。 解答:A,B,C,D 3、 下面说法正确的是( )
A. java Applet 程序必须在浏览器中执行 B. java 应用程序必须在浏览器里执行 C. java Applet 程序不一定在浏览器中执行 D. java 应用程序可以在浏览器中执行 解答:C
4、 每当浏览器的用户离开applet所在的HTML页时都调用方法( )
A、stop() B、init () C、paint() D、repaint() 解答:A
5、 任何一个Applet开始执行时必然会被自动调用三个方法,被调用的顺序是( )
A、init paint start B、start paint init C、paint start init D、init start paint 解答:D
6、 在Applet的关键方法中,哪个方法是关闭浏览器以释放Applet占用的所有资源( )
A、init() B、start()
C、paint() D、destroy() 解答:D
7、 下面哪个操作Applet可以完成______。
A、读取客户端文件
B、在客户端创建新文件
C、读取Applet所在服务器的文件 D、在客户端调用其他程序 解答:C
8、 分析下面的HTML部分代码 :
下列哪一项可以替代文件名以正确装载运行Hello 类 的小程序A 、\"\" B 、\"\" C 、\"\" D 、\"\" 解答:B
9、 下面不是Applet基本方法的是( )
A. start() B. stop() C. init()
()
解答:D
10、关于Applet的生命周期正确的说法是( )
A. stop方法在start方法之前执行
) ( B. init方法在start方法之后执行
C. stop方法在Applet退出时被调用,只能被调用1次 D. stop方法在Applet不可见时会被调用,可以被调用多次 解答:D
11、下面程序代码正确的排列顺序是______。
(1)import .*; (2)ex12_9_a() (3)package myclasses;
(4)public class ex12_9 extends 1、2、3、4 B. 1、3、2、4 C. 3、1、4、2 D. 1、3、4、2 解答:C
12、简述Java Applet的开发和运行步骤。
13、小应用程序界面的宽度和高度一般在______文件中指定,其中用来指定宽度和高度的关键字分别是______和______。
14、如果一个Java程序既是应用程序又是小应用程序,那么它必定含有______类的子类,同时含有成员方法______。
15、JDK中提供的一个专为查看Applet的工具是______。 16、在Applet坐标系中,(0,0)代表输出窗口______角的像素点。 17、利用Applet绘制一个国际象棋棋盘。
18、编写一个Applet,添加两个文本框和一个命令按钮。其中一个文本框接收用户输入的一行字符串,回车后在另一个文本框中重复输出三行,单击命令按钮可清空所有文本框内容。
19、准备一组图片及相关文字说明,编写Applet制作音乐相册,要求有背景音乐和向前、向后翻动相册的按钮。
第12章 常见数据结构的Java实现
练习思考题
1、 下列哪个不是线性表( )。
A、链表 C、栈 解答:D
2、 可以实现的接口是( )
A. B. C. D.
B、队列 D、关联数组
解答:A
3、set collection 遇到重复的元素,处理的方式是:( )
A、试图添加一个重复值的元素时,会抛出一个异常 B、试图添加一个重复值的元素时,add方法会返回失败值 C、一个set可以包含重复值元素 D、编译的时候,重复的元素值会导致错误 解答:B
4、创建一个类,来存储唯一的对象元素,元素不需要保持特定顺序,但是必须唯一。最能满足这种要求的接口是:( ) 。
A、Set B、List C、Map D、Vector E、HashSet 解答:A,E
5、 使用堆栈结构输出an的若干项,其中an=2an1+2an2,a1=3,a2=8。 6、 编写一个程序,用散列表实现学生成绩单的存储和查询,并将若干个查询结果存放到一个树集中,通过树集实现对查询结果的自动排序,并将排序结果显示在一个文本区中。
第13章 Java数据库连接--JDBC
练习思考题
1、 使用Connection的哪个方法可以建立一个PreparedStatement接口( )
A、createPrepareStatement()
B、prepareStatement() C、createPreparedStatement() D、preparedStatement() 解答:B
2、 在JDBC中可以调用数据库的存储过程的接口是 ( )
A、Statement
B、PreparedStatement D、PrepareStatement
C、CallableStatement 解答:C
3、 下面的描述正确的是( )。
A、PreparedStatement继承自Statement B、Statement继承自PreparedStatement C、ResultSet继承自Statement
D、CallableStatement继承自PreparedStatement 解答:A
4、 下面的描述错误的是( )。
A、Statement的executeQuery()方法会返回一个结果集
B、Statement的executeUpdate()方法会返回是否更新成功的boolean值 C、使用ResultSet中的getString()可以获得一个对应于数据库中char类型的值 D、ResultSet中的next()方法会使结果集中的下一行成为当前行 解答:C
5、 如果数据库中某个字段为numberic型,那么通过结果集中的哪个方法获取( )。
A、getNumberic() C、setNumberic() 解答:A
6、 在JDBC中使用事务,想要回滚事务事务的方法是( )。
A、Connection的commit() B、Connection的setAutoCommit()
B、getDouble() D、setDouble()
C、Connection的rollback() D、Connection的close() 解答:C 7、 简述()的作用。
8、 写出几个在JDBC中常用的接口。
9、 简述你对Statement,PreparedStatement,CallableStatement的理解。 10、 在JDBC编程时为什么要养成经常释放连接的习惯。 11、 简单写一下编写JDBC程序的一般过程和步骤。
12、 写一个连接Oracle数据库在T_User表中根据用户名把其中的密码更新成指定的密码的JDBC程序。
T_User表: 字段名称 FUserName FPwd 数据示例 提示代码:
String driverName = \"\";
String url = \"jdbc:oracle:thin:@\" + serverName + \":\" + serverPort + \":\" + serverID ;
catch(ClassNotFoundException cnfe){();();} catch(SQLException sqle){();();}
说明 用户名 密码 数据类型 Varchar(10) Varchar(6) 约束 主键 不允许空 备注
第14章 Java
练习思考题
多媒体编程:图形、图像和声音
1、paint( )方法使用哪种类型的参数 ( )
A、 Graphics C、 String 解答:A
2、 编写一个播放音乐的应用程序,当客户选择某个音乐之后,程序在适当的位置显示一幅图像。
3、 编写一个播放视频的Java Applet小应用程序,要求视频文件的名字通过HTML文件传送给程序。
B、 Graphics2D D、 Color
因篇幅问题不能全部显示,请点此查看更多更全内容