




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验1 包的使用与访问控制实验目的:(1) 理解java包的组织结构;(2) 学会编写带有包结构的程序;(3) 掌握包结构下的成员访问控制实验任务:编写3个类,类名分别是Clock 、A、B,其中类Clock和类A放在同一个包packone中,而类B则放在另一个包packtwo中,包packone和包packtwo放在同一个目录下。类Clock中还有3个整型数据hour、minute、second,它们分别是public、private、protected,类Clock还包含一些方法使用这些数据。类A和类B的功能相似,都是使用类Clock并调用类Clock中的方法。请按下面的方法完成实验,并回答问题。(1) 新建Java Project,命名为Shiyan7_1,在src目录下新建Package,命名为packone,并在packone包下新建Class,命名为Clock,Clock.java.程序代码如下:/Clock.javapackage packone;public class Clockpublic int hour;private int minute;protected int second;public Clock(int i,int j,int k) setAll(i,j,k);void setAll(int i,int j,int k)hour=i;minute=j;second=k;public int getHour() return hour;public int getMinute() return minute;public int getSecond() return second;(2) 在packone包下新建Class,命名为A。A.java代码如下:/A.javapackage packone;class A public static void main(String args) Clock c=new Clock(5,20,10); System.out.println(从类A中访问Clock hour=+c.getHour(); System.out.println(从类A中访问Clock minute=+c.getMinute(); System.out.println(从类A中访问Clock second=+c.getSecond(); (3)现在在src目录下新建Package,命名为packtwo,然后在该包下新建Class,命名为B,B.java代码如下:/B.javapackage packtwo;import packone.*;class B public static void main(String args)Clock c=new Clock(8,30,5); System.out.println(从类B中访问Clock hour=+c.getHour(); System.out.println(从类B中访问Clock minute=+c.getMinute();System.out.println(从类B中访问Clock second=+c.getSecond(); 所建的程序目录情况如下:分别运行A.java和B.java程序,结果如下: 思考题:(1) 现在将Clock类中的构造函数public Clock(int i,int j,int k)改成Clock(int i,int j,int k)运行A.java和B.java查看结果。每次运行时都会弹出如下对话框:运行A.java时:运行B.java时,出现以下错误,表明不能访问:从运行结果可看出,在同一个包中的成员可直接访问另一个包中的非public成员,而另一个包中的成员则不能访问其它包中的非public成员,修改回则可正确运行。(2) 用import语句可以导入所需的类,如果不用import语句,那么在使用包中的类时就必须带上完整的路径。将B.java修改如下;package packtwo;class B public static void main(String args)packone.Clock c=new packone.Clock(8,30,5); System.out.println(从类B中访问Clock hour=+c.getHour(); System.out.println(从类B中访问Clock minute=+c.getMinute();System.out.println(从类B中访问Clock second=+c.getSecond(); 运行结果如图:可见,import packone.*;导入了packone包,可直接使用packone包中的成员而不需要加完整路径,书写简洁方便不易出错;packone.Clock c=new packone.Clock(8,30,5);语句冗长易出错。第九章 实验1 Applet生命周期实验目的:(1) 掌握Java Applet程序的基本结构和编写方法;(2) 了解Applet的生命周期和运行过程。实验任务:编写Applet程序实现init()、start()、stop()、的story()方法,并观察其运行过程。实验步骤:(1) 启动eclipse,新建java项目为AppletLifeCycle。(2) 在项目中新建包Applet接着新建一个名为AppletLifeCycle的类。(3) 在JBuilder 2005 生成的AppletLifeCycle.java中按程序清单9-1编辑的Java源代码。程序清单9-1/AppletLifeCycle.javaimport java.awt.*;import java.applet.*;public class AppletLifeCycle extends Applet /Initialize the Appletpublic void init()System.out.println(Now init() is working.);/Start the Appletpublic void start()System.out.println(Now start() is working.);/stop the Appletpublic void stop()System.out.println(Now stop() is working.);/Destory the Appletpublic void destory()System.out.println(Now destory() is working.);public void paint(Graphics g)System.out.println(The apple runs paint().);g.setColor(Color.red);g.drawString(This is an Applet!,150,100); 运行Applet所需的相应的文档可使用JBuilder 2005在创建AppletLifeCycle时默认生成的AppletLifeCycle.html 文件。文件代码见程序清单9-2程序清单9-2/HTML Test PageAppletLifeCycle will appear below in a Java enabled browser.(4)运行所有文件,编译AppletLifeCycle.java文件,然后选择菜单栏中Run| Run Poject或是直接使用快捷键F9,运行该Applet程序。得到结果:(4) 双击项目窗口中的AppletLifeCycle.html,在工作界面的内容窗口查看在浏览器的运行结果下图9-2所示,同时可以选择菜单栏中Run| Run AppletLifeCycle.html using AppletLifeCycle,在Applet阅读器中观察输出结果如图9-3所示。思考:(1) 运行AppletLifeCycle是,观察JBuilder 2005主界面下方的消息输出窗口的输出内容。(2) 将图9-3窗口最小化,然后还原,观察JBuilder主工作界面下消息输出窗口的输出内容。分析为什么不同动作会有不同的语句输出。刚开始:最小化:还原:因为Applet小程序运行是有生命周期的,调用显示时是暂时性的,再次显示时必须在此调用。(3) 请单击图9-1中的Stop按钮,观察JBuilder主界面下的结果显示的输出区内容;再单击Start按钮,观察JBuilder主界面下的结果显示的输出区内容;再单击Exit按钮,观察JBuilder主界面下的结果显示的输出区内容;分析为什么单击相应的按钮会有不同的语句在控制台输出。因为没有JBuilder,没有实行,我的猜想应该是它每次单击某个按钮时,会相应的调用某个函数,输出会显示出对某个函数的调用。疑问:这里不知道什么不对,我用浏览器无法显示那个Applet的小程序,请叫老师怎么解决!鼠标响应监测实验目的:(1) 进一步熟悉Java Applet程序的编写方法;(2) 了解如何进行鼠标事件监听实验任务:在Applet窗口监测鼠标事件,获取鼠标单击的坐标位置,将该点的x坐标和y坐标信息在Applet显示窗口输出,并以该点为矩形的左上角坐标位置绘制实心矩形,矩形长、宽均为50像素。实验步骤:(1) 新建一个工程,名称为MousePressEvent,在该工程中创建一个Applet文件,包括MousePressEvent.java和MousePressEvent.html。(2) 编辑MousePressEvent.java文件的源代码。代码如下:/MousePressEvent.javaimport java.awt.*;import java.awt.event.*;import java.applet.*;public class MousePressEvent extends Appletint x=0;int y=0;int width,height;/Construct the Appletpublic MousePressEvent()/Instialize the Appletpublic void init()addMouseListener(new MousePress();class MousePress extends MouseAdapterpublic void mousePressed(MouseEvent m)x=m.getX();y=m.getY();width=50;height=50;repaint();public void paint(Graphics g)System.out.println(Position_x=+x+ +Position_y=+y);g.setColor(Color.red);g.drawRect(x, y, width, height);编辑MousePressEvent.html文件的源代码,代码如下:HTML Test PageMousePressEvent will appear below in a Java enabled browser.实验结果:实验新建项目结构如下运行结果如下在浏览器中运行的结果思考题:1、 在新建MousePressEvent.java和MousePressEvent.html文件时,要注意MousePressEvent.html的命名要包含.html ,否则将运行出错。2、 将Applet小应用查看器拉大或缩小时,控制台中的x及y坐标都会改变,因为每次对小应用查看器的改变都调用了paint(Graphicsg) System.out.println(Position_x=+x+Position_y=+y );方法,都会重新计算并输出x及y的坐标,此时鼠标并没有点击窗口,所以x及y的坐标仍然是0。运行结果如下11.2 实验一 按钮的有序排列实验目的:(1) 了解GUI的概念;(2) 了解java.awt包和javax.swing包,以及比较它们具有的同性质的组件的异同;(3) 掌握和运用Java的基本GUI组件,了解它们的特点。实验任务:本实验由以下两个练习组成,要求定义按钮若干让它们按照从左向右的顺序依次排列,显示五个带图标的按钮。这两个练习分贝考察了用程序代码直接设计界面和Jbuilder2005的用户界面设计器设计界面的两种不同情况。练习1:调试和运行程序ButtonCounter.java;练习2:用Jbuilder2005用户界面设计器设计界面。实验步骤:在Jbuilder2005中新建一个Chapter11.jpx工程,按照下列要求完成实验。1. 练习1 调试和运行程序ButtonCounter.java要求:在当前工程Chapter11.jpx中,新建一个ButtonCounter.java,将程序清单11-1中的程序输入并保存。该程序可以定义按钮若干使它们按照从左至右的顺序依次排列,显示5个带图标的按钮,运行结果如图11-2所示。阅读和分析程序ButtonCounter.java,调试编译并运行该程序,观察该程序的运行结果是否和题意一致,如果不一致,请修改该程序。程序结构图:程序清单11-1/ButtonCounter.javaimport javax.swing.*;import java.awt.*;public class ButtonCounter extends JFramepublic ButtonCounter()super(显示按钮窗口);ImageIcon Icon=new ImageIcon(image/image.gif);JButton jbt1=new JButton(按钮,Icon);JButton jbt2=new JButton(按钮,Icon);JButton jbt3=new JButton(按钮,Icon);JPanel p1=new JPanel();p1.add(jbt1);JPanel p2=new JPanel();p2.add(jbt2);JPanel p3=new JPanel();p2.add(jbt3);JPanel p4=new JPanel();p4.add(jbt2);JPanel p5=new JPanel();p5.add(jbt3);getContentPane().setLayout(new FlowLayout();getContentPane().add(p1);getContentPane().add(p2);getContentPane().add(p3);getContentPane().add(p4);getContentPane().add(p5);public static void main(Stringargs)/Creater a frame and ser its propertiesJFrame frame=new ButtonCounter();frame.pack();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);实验结果:思考(1) 给出的ButtonCounter.java程序的运行结果是否和题目给出的运行结果一致?如果不一致,为什么不一致?请写出原因。如果需要修改,请写出在那个地方做修改,做什么修改?答:不一致。(2) 在程序的main()方法中有语句frame.pack(),该方法的作用是什么?(3) 程序中语句frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);的作用是什么?去掉该语句,程序会出现怎样的运行结果?(4) 如果将程序的语句getContentPane().setLayout(new FlowLayout();去掉, 程序的运行结果会发生变化吗?如果不发生变化是什么原因?如果发生变化,会出现什么现象?请解释原因。(5) 如果将程序中的按钮组件jbt1换成java.awt包中的Button组件对象,换过后的组件和原来的JButton在外观上会出现什么不同?11.3 实验2 密码验证问题实验目的:(1) 进一步了解和掌握javax.swing包中的常用GUI组件;(2) 比较Swing包中的JTextField和JPasswordField在使用中的异同;(3) 初步了解和运用事件处理机制和Action事件的处理。实验任务:编写一个Java程序,实现用户根据自己的密码进入界面,如果用户输入的信息正确,则输出“欢迎*用户”,否则用户还可以尝试两次,如果尝试阶段输入的信息错误,则输出“请输入正确的信息”,如果尝试失败,用户则退出。实验步骤:打开JBuilder2005 ,打开一个已有工程如Chapter11.jpx,在该工程下完成如下练习。练习 密码验证要求:在当前工程如Chapter11.jpx下,新建一个文件PasswordVerification.java,将程序清单11-2中的程序输入并保存。要求该程序完成如下功能:用户根据自己的密码进入界面,如果用户输入的信息正确,则输出“欢迎*用户”,否则用户还可以尝试两次,如果尝试阶段输入的信息错误,则输出“请输入正确的信息”,如果尝试失败,用户则退出。调试并编译程序PasswordVerification.java,运行该程序,运行结果如下11-6、11-7、11-8、11-9所示,请将代码1-代码7补充完整。图11-6程序清单11-2/PasswordVerification.javaimport javax.swing.*;import java.awt.event.*;import java.awt.*;public class PasswordVerification extends JFrame implements ActionListener JLabel userLabel; /定义用户标签提示JLabel passwordLabel; /定义密码标签提示JTextField userText; /定义用户文本框JPasswordField passwordText; /定义密码文本框int count=1; /统计输入信息的次数public PasswordVerification()super (请输入信息);Container container=getContentPane(); /代码1 得到容器对象containercontainer.setLayout(new FlowLayout(); /设置默认布局userLabel=new JLabel(用户); /代码2 创建用户标签passwordLabel=new JLabel(密码); /代码3 创建密码标签userText=new JTextField(20); /代码4 创建用户文本输入框passwordText=new JPasswordField(20); /代码5 创建密码输入文本框passwordText.addActionListener(this); /代码6 注册事件监听者container.add(userLabel);container.add(userText);container.add(passwordLabel);container.add(passwordText);setSize(240,100);setVisible(true);public void actionPerformed(ActionEvent a) /代码7 事件处理String userName=new String(陈三); /假设为正确的用户名String password=new String(123456);if(e.getSource()=passwordText)count+;charpasswords=passwordText.getPassword();if(userText().equals(userName)&password.equals(new String(passwords)JOptionPane.showMessageDialog(null, 欢迎您:+nameName);System.exit(status0);else if(count3)System.exit(status0);elseJOptionPane.showMessageDialog(null,userText()+请输入正确信息);public static void main(String args) PasswordVerification pv=new PasswordVerification();pv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);思考:(1) 程序PasswordVerification.java中第3行语句java.awt.*的作用什么?(2) 程序actionPerformed()方法中if(e.getSource()=passwordText)的作用是什么?如果去掉该条件判断,程序运行结果会发上什么变化?(3) 观察程序actionPerformed()方法中语句“charpasswords=passwordText.getPassword()”的作用是什么?(4) 观察程序定义中的main()语句,如果在PasswordVerification pv=PasswordVerification();语句后,添加语句System.exit(0),会出现什么问题,为什么呢?(5) 从给定程序的运行结果看,密码输入的回显字符是“*”,如果把回显字符换成“#”,该如何处理?(6) 如果要求在信息输入错误处理中,一旦输入完密码信息,用户输入框和密码输入框可以清空,请将上述程序修改,使之实现该功能。第13章 实验1 使用Thread类创建4线程程序实验目的:(1) 理解线程的概念;(2) 了解现成的状态和生命周期;(3) 学习继承Thread类来创建线程;(4) 使用Runnable接口。实验任务:本实验是要设计一个包含多线程运行的程序,在主程序中一次创建4个线程,然后按顺序启动这4个线程,每个线程在运行时所执行的动作都实现水面sleep一会儿,醒来之后再继续执行,在这个过程中注意观察线程是如何调度运行的。实验步骤:(3) 首先在eclipse中建立一个空项目命名为MultiThread,然后为该项目选择合适的路径Directory存放它,例如:C:programmingJavaProject。(4) 接着在该项目中创建第一个程序命名为FourThreads.java,请按照程序清单13-1输入改程序。程序清单13-1/FourThreads.javapublic class FourThreads public static void main(Stringargs) MyThread thread1=new MyThread(thread1); MyThread thread2=new MyThread(thread2); MyThread thread3=new MyThread(thread3); MyThread thread4=new MyThread(thread4); System.err.println(准备启动线程.); thread1.start(); thread2.start(); thread3.start(); thread4.start(); System.err.println(子线程已全部启动,主线程结束n); class MyThread extends Thread private int sleepTime; public MyThread(String name) super(name); sleepTime=(int)(Math.random()*5001); public void run() try System.err.println( getName()+将休眠+sleepTime+毫秒); Thread.sleep(sleepTime); catch(InterruptedException exception) exception.printStackTrace(); System.err.println(getName()+结束休眠); (3) 编辑好程序并保存,变异并运行,程序的输入结果是什么?(3) 现在请重复多次运行这个程序,观察每一次运行结果是否一致,如果不一致,请说明原因。 答:经过多次的重复运行发现,每一次的运行结果数据都不相同。这是因为sleepTime()方法在设置睡眠时间时是随机的,所以导致结果不一样! 第13章实验2 一个实现Runnable接口的小应用程序实验目的:(3) 学习Runnable接口在Applet程序中的使用;(4) 掌握Runnable接口实现多线程的优点;(5) 加深对Applet中的几个常用方法的理解。实验任务:在这个试验中要设计一个能显示时间的Applet程序,要完成这个实验,学生应对Applet程序有基本的了解,我们会先运行一个有些错误的程序,然后在分析错误的原因逐步修改以得出正确的程序,改程序的基本运行效果如图13-3所示。 实验步骤:(1) 首先在现有工程MultiThread中新建一个Applet程序,步骤是:菜单NWebApplet,classname为AppletNoThread,Packange为空,Base class为javax.swing.JApplet,注意不要勾选Can run standalone。然后输入以下程序清单13-2中的程序。 程序清单13-2/AppletNoThread.javaimport javax.swing.*; /JAppletimport java.util.*; /Calendarimport java.awt.*; /Graphicspublic class AppletNoThread extends JApplet int hours,mins,secs; public void start() while(true) Calendar time=Calendar.getInstance(); hours=time.get(Calendar.HOUR); mins=time.get(Calendar.MINUTE); secs=time.get(Calendar.SECOND); System.out.println(秒:+secs); repaint(); public void paint(Graphics g) super.paint(g); g.drawString(String.valueOf(hours)+:+ String.valueOf(mins)+:+ String.valueOf(secs),50,50); (5) 编辑好源程序并保存好,编译运行,请问Applet中有时间显示吗?如果没有,这是什么原因?同时试着单机Applet窗口右上角的“关闭”按钮,程序能关闭吗?程序运行结果: 现在请修改上述Applet程序中的 start()方法,删除其中的while循环,使之成为: public void start() Calendar time=Calendar.getInstance(); hours=time.get(Calendar.HOUR); mins=time.get(Calendar.MINUTE); secs=time.get(Calendar.SECOND); System.out.println(秒:+secs); repaint(); 运行这个程序,现在应该在Applet中看到时间了。接着请试着单机Applet窗口右上角的最小化按钮,然后再还原程序,注意观察程序运行的变化情况。程序运行结果:以上Applet程序虽然能显示时间,但却是一个静态时间,不能实时更新,为此必须加上while循环,但是为了避免加上while循环后,无法正常显示时间,这次要在Applet程序中创建一个新的线程,让while运行在新的线程里。(4) 现在请在工程中创建这个新的Applet程序,命名为AppletThreaded。Java,请按程序清单13-3输入该程序。程序清单13-3/AppletThreaded.javaimport javax.swing.*; /JAppletimport java.util.*; /Calendarimport java.awt.*; /Graphicspublic class AppletThreaded extends JApplet implements Runnable Thread appletThread; int hours,mins,secs; /applet的start()方法 public void start() appletThread=new Thread(this); appletThread.start(); /线程的run()方法 public void run() while(true) /产生一个代表当前时间的Calendar子类的实例 Calendar time=Calendar.getInstance(); hours=time.get(Calendar.HOUR); mins=time.get(Calendar.MINUTE); secs=time.get(Calendar.SECOND); System.out.println(秒:+secs); repaint(); public void paint(Graphics g) super.paint(g); g.drawString(String.valueOf(hours)+:+ String.valueOf(mins)+:+ String.valueOf(secs),50,50); 思考:(1)编辑好程序并保存,然后编译运行,这次Applet程序能动态实时显示时间嘛?同时,再试试Applet右上角的关闭按钮能否其作用?请解释前后两个程序的差别?答:能动态显示时间,同时Applet右上角的关闭按钮也能起作用。原因是后一个程序中有while循环语句。 (2)在AppletThreaded.java程序中有两个start()方法,一个是Applet中的start()另一个是appletThread.start(),请问这两个start()方法有何区别?如果将语句appletThread.start()删除掉,程序运行结果还有怎么样的变化?程序运行结果: 分析结果:结果无法显示,这是没有初始化的结果 。(4)、到现在为止看,Applet程序终于可以动态的实时的显示时间了,然而用户可能会发现此时的时间刷新频率稍显太快,那么能否让Applet中的这个时间刷新稍微慢一点呢?(提示:在Applet的run()方法中加入Thread.sleep()语句)程序运行结果:try Thread.sleep(500); catch(InterruptedException exception) exception.printStackTrace(); 后来显示刷新得越来越快,几乎捉不到里面显示的时间!程序的运行是更慢了一点! 第十五章 网络编程 实验2 一个网络交付式汇率转换程序实验目的:(1) 学习典型的Client/Server编程;(2) 理解发送和接收数据的协议匹配;(3) 掌握输入输入流DataInput和DataOutput的用法。实验任务:本实验要设计一个基于C/S的货币转换程序,整个程序分为两个部分,服务器端和客户端,用户在客户端程序中输入需要转换的美元数,然后发送给服务器,服务器响应客户的请求,计算出对应的人民币,并将结果返回给客户端。程序运行效果如下图所示。实验步骤:(5) 打开eclipse中的项目Networking,在其中加入两个源程序分别命名为CurrencyServer.java和CurrencyClient.java,它们分别是服务器和客户端,请按照程序清单15-1和15-2输入这两个程序。程序清单15-1/CurrencyServer.javaimport java.io.*;import .*;public class CurrencyServer public static void main(String args) try ServerSocket serverSocket = new ServerSocket(8000); System.out.println(服务器已启动.); Socket connection = serverSocket.accept(); DataInputStream dataInput = new DataInputStream(connection.getInputStream(); DataOutputStream dataOutput = new DataOutputStream(connection.getOutputStream(); while(true) double dollar = dataInput.readDou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 入职感想课件
- 2025-2026学年高一上学期开学第一课生涯规划始业教育主题班会课件
- 倾听的魔力课件
- 铁路局员工管理办法
- 股骨颈骨折的治疗和护理
- 企业高管安全生产培训课件
- 税务风险管理办法试行
- 推动新质生产力加快发展的实践路径
- 新质生产力的代表性成果
- 畜牧兽医基础期末考试试题及答案
- 2025-2026学年人教版(2024)小学数学三年级上册(全册)教学设计(附目录P296)
- 招标投标法9个课件
- 100个最具争议的涉税经典稽查案例深度解析1增值税退税
- 高等数学上册ppt课件完整版
- 网店美工与视觉设计全书ppt完整版课件最全电子教案正本书教学教程
- 胸部检查(二)肺与胸膜检查
- 《中国古典舞》PPT课件
- 小学生个人简历WORD模板
- 医院临床科主任考核测评表
- 大国工匠精神PPT课件
- 中交二公局大西铁路大荔特大桥项目部拌合站管理制度汇编
评论
0/150
提交评论