版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、山西大学大学计算机与信息技术学院姓名学号专业班级计算机科学与技术课程名称Java实验实验日期2014/5/29成绩指导教师陈千批改日期实验名称实验7成员访问控制与异常实验报告、实验目的(1) 理解Java包的组织结构;(2) 学会编写带有包结构的程序;(3) 掌握包结构下的成员访问控制。(4) 掌握基本异常的处理机制;(5) 熟悉try 语句与catch 语句的搭配使用(6) 了解有异常处理与没有异常处理的差别;(7) 多重catch 语句的使用 ;(8) 使用Throws声明异常和Throw抛出异常。二、实验要求编写3个类,类名分别为 Clock、A、B,其中类Clock 和类A放在同一个包
2、 packone中,而类B则放在另一个包 packtwo 中,包packone和包packtwo 放在同一个目录下。类 Clock 中 有 3 个整型数据 hour、mi nute、seco nd,它们分别是 public、private、protected, 类 Clock 还 包含一些方法使用这些数据。类A和类B的功能相似,都是使用类Clock并调用类C1ock中的方法。请按照下面的实验步骤,循序渐进的完成实验,并回答后面的问题。三、包的使用以及访问控制(1)首先在c:programming目录下创建一个文件夹,命名为packone,然后在该文件夹下创建一个名叫Clock.java 的程序
3、,打开文本编辑器按程序清单输入该程序。程序清单Clock.javapackage packone;classpublic int hour ; private int minute ; protected intsecond ;public Clock( int i, int j, int k) setAII(i, j, k); void setAll( int i, int j, int k) hour = i;min ute = j; sec ond = k;public int getHour() return hour ;public int getMinute() return mi
4、nute ;public int getSecond() returnsecond ;打开文本编辑器按程序清单(2)接着在packone文件夹下创建第二个程序命名为A.java,输入该程序。程序清单A.javapackage packone;class A public staticvoid main(String args) Clock c =new Clock(5, 20, 10);System. out .println( System. out .println(System. out .println(+ c. hour);+ c. minute );+ c. second );从类
5、A中访问Clock hour=从类A中访问Clock minute= 从类A中访问Clock second=(3)现在在c:programming目录下创建第二个文件夹,命名为packtwo,然后在该文件夹下创建一个名为B.java 的程序,打开文本编辑器按如下程序清单输入该程序。程序清单B.javapackage packtwo;import pack on e.Clock;class B public static void main(String args) Clock c =new Clock(8, 30, 5);System. out .println( System. out .p
6、rintln(System. out .println(从类B中访问 Clock hour= + c.getHour();从类B中访问 Clock minute= + c.getMinute(); 从类 B 中访问 Clock sec on d= + c.getSeco nd();至此已经编辑好了3个源程序,然后在Eclipse环境中分别编译运行packone文件夹和packtwo文件夹中的程序,编译的结果将分别在packone文件夹和packtwo文件夹中生成Clock.class,A.class 和B.class文件。接着分别运行这两个程序,观察程序输出结果并分析之。运行结果和分析写在下面
7、。答:A中存在一个错误,因为 A调用了私有数据minute,而私有数据无法在不同类中读取。B通过get ()函数正常读取,Eclipse中结果如下。A的运行截图怖1 Javadoc r-?.靑朗S扌边I台凉n .从捷B中询可Clo匸|jaua DiuidQBgZoroException in thread mairT jaua.lang.NoClassDefFoundError: DiuidByZero (wrong n ame: test.7/DiuideByZero)at jaua.langClassLoader,definedass1(Native Method) at jaua.lan
8、g.ClassLoader.defineClass(C1asLoader.jaua:8G6)mt jaua.security.SecureClassLoader.defineClass(SecureClasLoader.jaua:14 2)at jaua.nt.URLClassLoader.d&fineClass(URLCla$sLoad&r.jaua:449) at . URLClassLoader raccessj 10Q(URLClassLcader. jaua: 71) at jaua .net. URLClassLoader$1 .run(URLClassLoader . jiaua
9、: 361) at .URLClassLoader$1.run(URLClassLoader.jaua:355) mt jaua.security.AccessControlle厂.daPriuilogedlNatiuo Method) at .URLClassLoador.findClass(UALClassLoader.jaua;354) at java.lang.ClassLoadertioadClass(ClassLoaderJava:425) at sunrmisc.Launcher$AppClassLoader.loadClassfLauncher.jaua:3CS) at jau
10、a.lang.ClassLoader.laadClass(ClassLoader.jaus:358)mt sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.jaua: 42)现在请在工程中创建第2个程序命名为DivideByZeroTryCatch.java,该程序在上面的程序中加入以下的一组try/catch 语句块,以处理除数为0时才发生的异常。tryquotient = quotient( numerator, denominator);System.out.print(Quotient is + quotient);
11、catch(ArithmeticException ex)System.out.print(I found exception + ex.toString();(5) 编译并运行这个程序,观察运行结果。 运行结果贴图:JI Horkspac j aua实验课程bintest_7 jaua DiuidBij&roTrgCatch Exception in thread mairT jaua,lang.NoClassDefFoundError: DiuideByZeroTryCatch (wrong name: test_7/DiuideByZeroTryCatch)mt jaua.lang.Cl
12、assLoader.defineClassl(Native Method) at jaua.1ang.ClassLoader.defin&Class(ClassLoader.jaua:80G) at jaua.security.SecuroClassLoadQr.defineClasstSacureClassLoBdor.jaua:1斗 2)at .URLClassLoader.defineClass(URLClassLoader,jaua:H49) at .URLClassLoader.access$1GG(URLClassLcader.jaua:71) at .URLCla9sLdBder
13、$1.run(URLClassLoBder.jauai361) at .URLClassLoader$1.run(URLClassLoader.jaua:355) at jaua.security.trollor.doPriuil09d(Natiuo Method) at , URLClasLoader.f indClass(URLClassLoacter. jaua :354) at jaua.lang,C1assLoader.1oddClaee(ClassLoader.jaua:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launc
14、her.jaa:398) at jaua.lang.ClassLoader.loadClas$(ClassLoader.jaua:358) at 弓un.launcher.LauncherHolper.chcckAndLoadMain(LauncherHelp&r.jaua:482)|点评| 由于加入了 try/catch 语句,因此由函数 quotient(numerator,denominator)所产生的异常被捕获并进行了处理,记住try/catch语句必须搭配使用,如仅仅有try语句而无catch语句会导致编译错误。2.练习2 GUI图形环境下的多 catch 块异常处理上面的程序是普
15、通控制台环境下发生除数为0异常的情况,现在我们要看看 GUI图形环境下的除数为0时的异常情况。(1) 现在在工程中创建第 3个程序命名为DivideByZeroGUl.java,这个程序运行时会弹岀图形化窗口,要求用户输入数值进行除法运算。请按程序清单6-2输入该程序。程序清单 6-2 DivideByZeroGUI.java/ DivideByZeroGUI.javaimport java.awt.*;/ Container, GridLayoutimport java.awt.eve nt.*;/ Acti on Liste nerimport javax.swi ng.*;/ JFram
16、epublic class DivideByZeroGUI exte nds JFrameimpleme nts Acti on Liste nerprivate JTextField n umeratorField, denomin atorField, outputField;private int denomin ator, n umerator, quotie nt;public DivideByZeroGUI()super( 除数为 0异常);Container container = getC onten tPa ne();container.setLayout( new Grid
17、Layout( 3, 2 );contain er.add(new JLabel(输入被除数 , SwingConstants.RIGHT );n umeratorField = new JTextField( 10 );contain er.add( n umeratorField );contain er.add(new JLabel(输入除数并回车 ,Swi ngCo nsta nts.RIGHT );denomin atorField = new JTextField( 10 );contain er.add( denomin atorField );deno mi natorFiel
18、d.addActio nListe ner( this );contain er.add(new JLabel(结果, Swi ngCo nsta nts.RIGHT );outputField = new JTextField();contain er.add( outputField );setSize( 425, 100 );setVisible( true );public void actio nPerformed( Acti on Eve nt eve nt )outputField.setText();n umerator = In teger.parse lnt( n umer
19、atorField.getText();denomin ator= In teger.parse lnt( denomin atorField.getText();quotie nt = quotie nt( n umerator, denomin ator ); outputField.setText( Integer.toString(quotient);public int quotie nt( int n umerator, i nt denomin ator )retur n n umerator / denomin ator;public static void main( Str
20、ing args)DivideByZeroGUI applicatio n = new DivideByZeroGUI();applicati on .setDefaultCloseOperatio n( JFrame.EXIT_ON_CLOSE);(2)编译并运行这个程序,观察运行结果。运行结果贴图:思考 评估12/3,12/7 的结果, 有异常吗?答:没有异常。 评估12/0,12/2.2,12/a的结果,看到了什么?是异常吗?若是异常请解释原因,并分别指出导致异常发生的语句。答: 无法显示结果。因为public int quotient( intnumerator, int denomi
21、nator )。为 int类型,所以会出现异常。|点评|这个程序会因为除数为0和数值格式而导致异常,不过与前面的练习丨程序不同的是,尽管产生了异常,这个基于GUI的程序仍然可以继续运行而不会退岀,这使用户可以继续进行其他的除法运算。接下来创建程序 DivideByZeroGUIMultiTryCatch.java以处理上面程序中所产生的异常,该程序应包含两个catch 语句块,一个用于处理除数为 0的异常,另一个用于处理数值格式输入的异常。由于在程序中使用了Integer.parselnt()方法以获得用户输入的数值,因此当用户输入非整数时就会产生 NumberFormatException异
22、常,这个异常同样应该处理。catch (NumberFormatException ex)System.out.pri nt(l detected excepti on + ex.toStri ng();编译并运行这个 DivideByZeroGUIMultiTryCatch.java程序,确保已经处理了上述的两个异常。评估12/0,12/1.5,12/e,并写下所观察到的程序运行结果。运行结果:12/0:12/1.512/e:3.练习3 Throws 声明异常与 Throw抛岀异常在这个练习中我们要自己使用Throws 和Throw来声明和抛岀除数为0异常,而不是让系统去探测并抛出异常。首先
23、在工程中创建一个程序文件命名为DivideByZeroThrow.java,这个程序与前面DivideByZeroGUIMultiTryCatch.java程序基本一致,不过要把方法 quotie nt (i ntnumerator, int den omi nator)的返回类型改为double,并修改返回语句return(double) numerator/de no mi nator看到的结果是什么 ?有异常发生吗?若没有修改后,编译运行程序,评估12/6,12/7,12/0, 请解释原因。答:因为参数quotient为int类型,而函数返回值为 double类型所以又异常。当评估12/
24、7 时,因为己转化为double 型运算,其输岀结果的小数位数可能很多 想办法只输岀4位小数,为此需要在合适的位置加入以下语句,其中DecimalFormat,因此可以 是一个控制小数输出格式的类。import java.text.DecimalFormat;DecimalFormat precision = new DecimalFormat(“ 0.0000 ” );outputField.setText(precision.format(quotient)修改之后当运行l2/7和12/0 时,观察结果其中x代表Infinity由于当前的程序除0时不会产生异常因此现在用户必须自己设法 Th
25、row抛岀一个异常为此要试着修改quotient()方法如下public double quotie nt( int n umerator, int denomin ator ) throwsArithmeticExceptio nif (denominator = 0) throw new ArithmeticException();retur n (double )n umerator / denomin ator;编译运行修改好的程序,当再次运行12/0 时,看到异常了吗?屏幕的输岀是否准确地告诉用户这是一个什么异常,如果不能,请再稍微修改程序,以明确显示岀这是一个除数为0异常。运行截图
26、实验(2)创建自己的日期错误异常类实验目的(1)学会创建自己的异常类(2)掌握如何使用自己的异常类;了解简单的对话框 JOptio npa ne类的用法。实验任务:要求设计一个 GUI图形窗口程序该程序让用户输入一个星期中的任意一天的数字1到7,然后输出该数字所对应的是星期几但是当用户输入的数字不在l到7范围内时,程序应该弹出一个对话框以显示发生了异常。实验步骤:(1)分析实验任务尽管 Java 中有 ArithmeticException,NumberFormatException等异常类,但并没有这里想要的异常类因此用户必须设计自己的异常类BadDataException以处理上述情况。同
27、时还要设计一个主类 BadDataDays dayNumber)方法以根据输入值返回星期几在switch 块的default 语句处Throw(2)程序清单6-3 是主类BadDataDays分,并输入这个程序以运行它。以运行这个程序,该主类应包含一个 getDayName(i nt,在这个方法中应该使用一个switch 语句来判断,并抛岀用户的 BadDataException异常。的程序模板,请完成|代码1| |代码6|的程序部程序清单 2 3 BadDataDays.java/ BadDataDays.javaimport java.awt.*; / Container, GridLay
28、out import java.awt.eve nt.*;/ Action Liste nerimport javax.swi ng.*;publicclass BadDataDays_ exte nds JFrame impleme nts Action Liste ner private private privateJTextFielddayNumberFieldint dayNumber;Stri ngdayName;,dayNameFieldpublicBadDataDays() super (输入数字显示星期”);Container container = getC onten t
29、Pa ne(); contain er.setLayout(new GridLayout(2, 2);contain er.add( dayNumberFielddayNumberFieldcontain er.add( dayNumberField contain er.add( dayNameField = contain er.add( setSize(425, 100); setVisible( true );new JLabel(输入数字 ”,SwingConstants.RIGHT);=new JTextField(10);/ 创建一个JTextField 控件dayNumberF
30、ield ); .addActi on Liste ner( new JLabel(星期几 new JTextField(IO); dayNameField );/this );,SwingConstants.RIGHT);将控件dayNameField力口入到容器中/设置窗口的大小为(425 , 100 )public void action Performed(Act ion Eve nt eve nt) dayNameField .setText();try dayNumber = Integer.parseInt ( dayNumberField .getText();dayName = getDayName( dayNumber);dayNameField .setText( dayName); / 在控件 dayNameField 中输出结果 catch (BadDataException ex) JOptionPane. showMessageDialog (BadDataDays. this , ex.toString(),无效日期,JOptionPane.WARNING_MESSA$E catch (NumberFormatExce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江金华金东区面向区外选调在职教师6人笔试参考题库及答案解析
- 2026萍乡市消防救援支队招聘政府专职消防队员和消防文员85人笔试参考试题及答案解析
- 2026年会计初级职称笔试高频考点题集
- 2026年家庭电器用电安全知识
- 2026年高职(音乐剧表演基础)舞台表演方案考核试题及答案
- 2026年高职(药品生产质量管理)综合能力测试试题及答案
- 2026赣南医科大学第一附属医院劳动合同制人员招聘13人(江西)笔试备考题库及答案解析
- 2026年福建宁德市蕉城区教育局招聘教师4人笔试参考试题及答案解析
- 2026年咨询师职业资格鉴定仿真题集
- 2026年工业数据资产价值评估模型构建
- 2026贵州遵义市政务服务管理局下属事业单位招聘编外人员2人考试模拟试题及答案解析
- 校园创意设计
- 长期照护师职业技能鉴定考试复习题库(附答案)
- 2026年中国钢铁余热发电市场数据研究及竞争策略分析报告
- 2025-2030中国互联网家装市场发展现状及趋势前景分析研究报告
- (2025年)新GSP质管部长、质量负责人培训试卷及答案
- 建筑工程竣工验收报告贵州版
- 2026年安徽省合肥八中等高三下学期第一次统练(期末)物理试题试卷含解析
- 危化执法培训课件
- 建设工程抗震设防专篇编制指南
- 2025年贵州省高考化学试卷真题(含答案)
评论
0/150
提交评论