{ classA objA=new classA(); classB objB=new classB(); objA.aaa(); objB.bbb(); } }
运行主类,观察运行结果。 运行结果:
classA的输出100 classB的输出200
如上两个实验表明封装在同包里的类,只要成员不是私有的,相互之间透明,相当在一个java文件中一样使用。默认访问控制符具有包访问性,即同包内可以互相访问 第三步:按【思考问题】提示理解打包的应用过程:
【思考问题】
①将主类文件Ex5_2.java封装在另一个包mypackage2,再进行编译,看编译结果提示什么错误?(提示:两者不在同包,classA和classB不能被识别)。
答:Exception in thread \无法解析的编译问题:
classA 无法解析为类型 classA 无法解析为类型 classB 无法解析为类型 classB 无法解析为类型
at mypackage2.Ex5_2.main(Ex5_2.java:8)
原因:不同胞内除了public之外不能使用
②上条件不变,在主类class Ex5_2加进import mypackage1.*语句,再编译,看是什么编译错误?(提示:载入了mypackag1包,可以识别这两个class,但这两个类不是public,不能被不同包使用)
答:Exception in thread \无法解析的编译问题:
类型 classA 不可视 类型 classA 不可视 类型 classB 不可视 类型 classB 不可视 类型 classA 不可视 类型 classB 不可视
at mypackage2.Ex5_2.main(Ex5_2.java:8)
③将类classA和classB修饰为public再编译,看发生了什么?为什么?(提示:一个java文件中只能有一个public类且类名与文件名相同,因此每个public类用一个单独的java文件,且文件名与类名相同) 答:一个java文件中只能有一个public类且类名与文件名相同,因此每个public类用一个单独的java文件,且文件名与类名相同
④上面通过编译后,再看Ex5_2还存在什么错误?(提示:classA和classB中的方法修饰符是默认的,另一个包中的代码允许访问吗?)
答:Exception in thread \无法解析的编译问题:
6
类型 classA 中的方法 aaa()不可视 类型 classB 中的方法 bbb()不可视
at mypackage2.Ex5_2.main(Ex5_2.java:10)
不允许
⑤将方法aaa()和bbb()修饰为public,重新编译,所有错误是否消失?无错误后可运行主类,观察运行结果。
独的java文件,且文件名与类名相同)
答:Exception in thread \无法解析的编译问题:
类型 classA 不可视 类型 classA 不可视 类型 classB 不可视 类型 classB 不可视 类型 classA 不可视 类型 classB 不可视
at mypackage2.Ex5_2.main(Ex5_2.java:8)
第四步:在不同工程下应用jar压缩包。按【思考问题】步骤理解软件重用和jar压缩包的使用。
①新建一个工程project2,将原主类文件Ex5_2原样加入该工程中。(提示,
importmypack1.*;不能被识别错误,当前工程没有找到包mypack1所在的classpath)
②在Eclipse工具下,由Project—properties—java Build Path—Libraries进入如下界面:
7
该界面可加入第三方类包。这里已有一个默认类包就是JDK,当前工程使用任何第三方包都可通过此界面加入。这里有个选项“Add Class Folder”可加入类文件目录。首先按此选项加入,可浏览到这两个类的包目录D:\\eclipse312\\myfile\\Test_pack\\mypack1“确定”,importmypack1.*;语句错误消
失,但整个文件错误仍然存在,说明直接加入包路径的方法不行。正确的选择应该 是“Add External JARs”,但mypack1还未压缩成jar文件。
③将类包压缩成jar文件。JDK提供了压缩命令,见附录1。在Eclipse下可由导出Export向导完成。“file”—“Export”进入如下界面:
选择JAR file—Next进入下界面:
在该界面可以浏览到被压缩的包mypack1,在JAR file文本栏中指定被压缩的jar文件名和路径。可通过“Browse”浏览到指定路径。按“Finish”可在该目录下得到压缩的jar文件。
8
④重新进入Project—properties—java Build Path—Libraries—Add External JARs:浏览到mypack1.jar所在目录,加入自定义的类包OK。 ⑤观察一切错误是否消失?观察运行结果。
第五步:其他人应用这个包。
任何想使用该包中的类的人,可将压缩的mypack1.jar拷贝到你的计算机中,然后按当前工程加载类包的方法即可使用该包。 第六步:验证protected修饰符
①将classA中的aaa()方法修饰为protected,观察Ex5_2.java文件有何错误? ②主类如何修改方能正确实用classA? 这里给出一段参考程序,请说明其原因:
package mypackage2; import mypack1.*;
publicclass Ex5_2 extends ClassA { publicstaticvoid main(String args[]) { //ClassA objA=new ClassA(); ClassB objB=new ClassB();
9
Ex5_2 objA=new Ex5_2(); objA.aaa(); objB.bbb(); } }
在JCreator2.5中如何处理参见附录1。
3.Java的异常处理
源文件是3.Java的异常处理
源文件是Ex5_3.java。要捕捉的异常是除数为零和数组下标越界。通过修改a和c[]下标值体验程序。
public class Ex5_3
{ public static void main (String args[]) {int a, b;
int c[]={1,2,3}; try{a=10; b=100/a;
System.out.println (\当前a值:\ c[2]=200;
System.out.println (\当前数组长:\ }catch(ArithmeticException e)
{ System.out.println (\除零错误:\}
catch(ArrayIndexOutOfBoundsException e)
{ System.out.println (\数组下标越界:\ finally
{ System.out.println (\我是finally\ System.out.println (\我能被正常执行到\ } }
【思考问题】
① 先运行上面没有错误程序,观察运行结果。
运行结果:
当前a值:10 当前数组长:3 我是finally 我能被正常执行到
② 按下条件分别修改数据,编译后运行,观察输出结果,分析在try?catch块里那
些语句没有被执行,为什么? 块外那些语句可被执行到,为什么? ? 修改a=0, 保持c[2]=200;
答:System.out.println (\当前a值:\+a);
c[2]=200;
System.out.println (\当前数组长:\+c.length);没有被执行· 因为当执行到 b=100/a;时就发生了“除数为0的错误“,执行
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库实验五(2)在线全文阅读。
相关推荐: