5异常包访问权限文档格式.docx
- 文档编号:6146181
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:15
- 大小:600.82KB
5异常包访问权限文档格式.docx
《5异常包访问权限文档格式.docx》由会员分享,可在线阅读,更多相关《5异常包访问权限文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
掌握JAVA的异常处理机制
在整个JAVA的异常处理中,实际上也是按照面向对象的方式进行处理的,处理的步骤如下:
一旦产生异常,则首先会产生一个异常类的实例对象;
在try语句中对此异常对象进行捕获;
产生的异常对象与catch语句中的各个异常类进行匹配,如果匹配成功,则执行catch语句中的代码。
在异常处理中,捕获更粗的异常要放在捕获更细的异常之后。
当所有的异常处理的方式是一样的时候就可以直接使用Exception进行捕获。
当然,在一个比较细致的开发中不建议这样使用,所有的异常最好分别捕获。
当然,也可以直接用Throwabe进行捕获,但是正常的开发人员是不会这样做的,因为在程序的try中永远只会抛出Exception子类,而Throwabe中还有Error子类。
掌握throws与throws关键字的作用
Throws关键字:
在定义一个方法的时候可以使用throws关键字申明,使用throws申明的方法表示此方法不处理异常,而是交给方法的调用处进行处理。
使用格式:
public返回值类型方法名称(参数)throws异常类{}
假设定义了一个除法的方法,这样的方法可能会出现异常,也可能不会出现异常。
所以对于这样的方法最好将它使用throws关键字申明,一旦出现了异常,则应该交给调用处处理。
classMath{
publicintdiv(inti,intj)throwsException{//定义除法操作,如果有异常,则交给被调用出处理
inttemp=i/j;
//计算,但是此处有可能出现异常
returntemp;
}
}
此时,如果调用此类的div方法的时候就必须进行异常处理,否则编译会出现错误:
Test.java:
10:
未报告的异常java.lang.Exception;
必须对其进行捕捉或声明以便抛出
System.out.println(m.div(12,3));
因为方法中使用了throws关键字申明,所以在调用此方法的时候,方法必须进行异常处理。
publicclassTest{
publicstaticvoidmain(Stringargs[]){
Mathm=newMath();
try{
System.out.println(m.div(12,3));
}catch(Exceptione){
System.out.println(e);
//可以直接打印对象信息,会直接调用toString方法
}
如果现在在主方法的申明上也申明了throws关键字呢?
程序会把异常交给JVM,默认的处理方式也是使用JVM完成的。
throw关键字:
Throw关键字的作用是在程序中抛出一个异常。
抛出的时候抛出的是一个异常类的实例化对象。
与throws不同的是,可以直接使用throw抛出一个异常。
抛出的时候直接抛出异常类的实例化对象即可。
在异常的处理中,try语句中要捕获的一个异常的对象,那么此异常对象也可以自己抛出。
thrownewException("
自己抛着玩"
);
//抛出异常的实例化对象
范例:
throws与throw的应用
在一般的开发中,try...catch..finally、throw、throws联合使用的情况是最多的。
例如下面的程序,设计的一个除法的类的设计就是比较合理的。
System.out.println("
开始"
inttemp=0;
temp=i/j;
throwe;
//抛出后让被调用者处理
}finally{//不管是否有异常,都打印
System.out.println("
结束"
掌握Exception与RuntimeException的区别(面试常问)
Exception在程序中是必须使用try...catch进行处理
RuntimeException可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。
但是为了保证程序的健康性,建议在有可能出现异常的地方还是使用try...catch进行处理。
可以自定义异常类
只需要继承Exception就可以完成自定义异常类。
因为在JAVA中提供的都是标准的异常类,如果需要定义自己想要的异常信息的时候就可以自定义异常类。
classMyExceptionextendsException{//自定义异常类,继承Exception类
publicMyException(Stringmsg){//调用Exception类中有一个参数的构造方法,传递错误信息
super(msg);
thrownewMyException("
自定义异常"
一般如果项目很大的时候有可能自定义异常,可以得到一些准确的信息。
了解断言(assert)的作用及应用
在JDK1.4之后,系统增加了断言的功能。
就是断定某一个操作肯定是正确的,如果程序执行到出现断言语句的时候发现结果不正确了,则会出现错误的信息。
格式:
·
assertboolean表达式;
assertboolean表达式:
详细的信息(打印出来的信息)
intx[]={1,2,3};
assertx.length==0;
//此处断言数组的长度为0
断言本身不会影响程序的执行,但是如果要想让一个断言起作用,则必须对断言进行验证。
在java命令中有:
-enableassertions可以简写为-ea如:
java-eaTest
出现下面的异常:
Exceptioninthread"
main"
java.lang.AssertionError
atTest.main(Test.java:
4)
此断言的信息默认为JAVA提供,如果觉得不好,可以自己设置错误的信息:
assertx.length==0:
"
数组不为0"
;
出现的错误见下:
java.lang.AssertionError:
数组不为0
--异常定义了程序中遇到的非致命的错误,而不是编译时的语法错误,如程序要打开一个不存在的文件、网络连接中断、操作数越界、装载一个不存在的类等;
--用try-catch语句进行捕获,catch可以有多个;
--也可以用throws关键字,在程序中申明了throws,就必须对后面调用的语句进行try-catch捕获,如果在main()方法中使用throws,则不用捕获都会通过编译,但是实际应用中不这样使用;
--自定义异常与throw关键字
--如何对多个异常做出处理,try-catch-finally
--我们可以在一个方法中使用throw,try-catch语句来实现程序的跳转,使用多个catch进行操作,相当于if;
--一个方法被覆盖时,覆盖它的方法必须扔出相同的异常或异常的子类;
--如果父类扔出多个异常,那么重写方法必须扔出那些异常的一个子集,也就是说不能扔出新的异常。
捕获异常的例子:
publicclassTest{//组装者规范,把主板和网卡、声卡组装起来
publicstaticvoidmain(Stringargs[]){
Testt1=newTest();
try{
t1.devide(2,0);
//必须进行捕获,因为前面已经申明了throws
}catch(Exceptione){
e.printStackTrace();
//要对异常进行处理,养成良好的习惯
System.out.println("
programisloadinghere"
voiddevide(intx,inty)throwsException{//申明了throws后就必须对调用的代码进行try-catch捕获
intsum;
sum=x/y;
System.out.print(sum);
包及访问控制权限-包的定义及导入
掌握包的作用及定义
在JAVA中,可以将一个大型项目中的类分别独立出来,分门别类地存到文件里,再将这些文件一起编译执行,如此的程序将更易于维护。
----多人开发
但是难免会遇到会产生文件名相同的情况,这时就要用包来解决此问题。
Package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序中加入package关键字即可。
包的定义格式:
package包名称.子包名称
packageorg.lxh.demo08;
//定义一个包
classDemo{
publicStringgetInfo(){
return"
Helloworld"
System.out.println(newDemo().getInfo());
定义了包之后,实际上类的名称就是:
包.类名称。
为程序打包
所谓的包实际上就是一个文件夹,一个*.class文件要保存在一个文件夹之中,既然包本身就是一个文件夹,所以在JAVA的编译指令中就提供了专门的打包编译命令,在编译的时候加上参数。
打包编译:
javac-d.Test.java-d表示打包,.表示打包在当前目录中
此时,生成完*.class之后,就可以直接访问了。
javaorg.lxh.demo08.Test
为批量的程序打包
编译时的命令为:
javac-d.*.java
掌握包的导入语法及导入限制
当一个包的class文件需要使用另外一个包的class文件的时候就需要使用导入指令。
语法:
import包名称.子包名称.类名称;
------手工导入所需要的类
import包名称.子包名称.*;
-----由JVM自动加载所需要的类
例如下面的实例:
Demo.java
packageorg.xzl.a;
Test.java
packageorg.xzl.b;
importorg.xzl.a;
//导入不同包中的Demo类
编译的时候,应该先编译Demo.java类,之后再编译Test类,因为后者使用了前者的类进行;
在编译Test类的时候会出现Demo不是公共类的提示:
2:
org.xzl.a.Demo在org.xzl.a中不是公共的;
无法从外部软件包中对其进
行访问
importorg.xzl.a.Demo;
也就是说Demo类如果需要被外包访问的时候需要定义成publicclass,修改Demo类。
publicclassDemo{
关于publicclass与class申明的完整解释
如果一个类申明为publicclass则文件名称与类名称一致,而且在一个类中只能有一个publicclass,而如果使用class申明一个类,则文件名称可以与类名称不一致,但是执行的时候必须执行生成的class文件名称。
除此之外,publicclass和class还在包的访问上有所限制,如果一个只在本包中访问,不需要被外包访问,则直接申明成class即可,而如果一个类需要被外包访问,则必须申明为publicclass。
如果现在要导入一个包中的很多类,这样写肯定很麻烦。
可以直接使用.*的方式导入。
对于以上的两种导入方式,其实性能是一样的,因为.*是JVM帮助用户判定需要的导入类,不需要的类,是不会被加载进来的。
但是在导包的时候,需要注意:
如果现在导入了不同包的同名类的时候,需要在使用的时候加上完整的包名。
了解系统常用包
掌握JAVA新特性-静态导入
在JDK1.5之后提供了静态导入功能:
如果一个类中的方法全部是使用static申明的静态方法,则在导入的时候就可以直接使用importstatic的方式导入,导入的格式如下:
importstatic包.类.*;
publicclassDemo{//里面的方法都是static
publicstaticadd(inti,intj){//加法操作
returni+j;
publicstaticsub(inti,intj){//减法操作
publicstaticmul(inti,intj){//乘法操作
publicstaticdiv(inti,intj){//除法操作
如果按照之前的import导入的话,则调用的时候肯定使用的类名.方法().
但是,如果是静态导入的话,就可以直接用方法即可。
importstaticorg.xzl.a.Demo.*;
//导入不同包中的Demo类,注意此时导入的是方法
System.out.println(add(4,2));
//不用使用类名.方法
System.out.println(sub(4,2));
System.out.println(mul(4,2));
System.out.println(div(4,2));
掌握jar命令的使用
当开发者为客户开发出了一套JAVA类之后,肯定要把这些类交给用户使用,但是如果所有的类是直接通过*.class的格式给用户,则会比较麻烦,所以一般情况下会将这些*.class文件压缩成一个文件交付给用户使用,那么这样的文件就称为jar文件(JavaArchiveFile),如果想要生成jar文件,直接使用JDK中的bin目录里的ja.exe就可以。
Jar命令中的主要参数:
C:
创建新的文档
V:
生成详细的输出信息
f:
指定归档的文件名
将其打包编译:
javac-d.Test.java
将其打成jar包:
jar-cvfmy.jarorg//把org整个目录打到jar包中
一个jar包如果要想使用的话,则必须配置classpath路径。
setclasspath=.;
d:
\test\my.jar
使用jar中的类
System.out.println(Demo.add(2,3));
其中的目录结构是:
在eclipse中,可以用export,然后选择jar文件即可生成;
Java中的访问控制:
可以将属性使用protected进行封装,这样外部无法直接操作,但是子类是可以继承并操作的。
封装===继承===多态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 异常 访问 权限