10异常,自定义异常,包,修饰符,jar包

来源:互联网 发布:保利尼奥 知乎 编辑:程序博客网 时间:2024/05/01 22:43


try{}

catch (){}

finally{}//finally中存放的是一定会被执行的代码。

作用:定义一定执行的代码,通常用于关闭资源,比如对数据库的操作,在连接数据库之后,操作数据

的时候出现异常了,程序就停止了,但是数据库还没有被关闭,资源还在浪费,这时候就用finally关闭数据库。

try有三种格式,1,try catch 2 try catch finally 3 try  finally 4 try+多个 catch

记住一点:catch是用于处理异常,如果没有catch就代表异常没有被处理过,如果该异常是检测异常,那么必须声明。

异常在子父类覆盖中的体现是什么样的呢?

1子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类,

2如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的自给

2如果父类或者借口的方法中没有异常抛出,那么子类在覆盖方法时,也不可能抛出异常。如果子类方法发生了异常,就必须要进行try处理,绝对不能抛,

 

异常是什么?是对问题的描述,将问题进行对象的封装,

异常体系,

       Throwable

              |--Error

              |--Exception

                     |--RuntimeException

异常体系的特点:异常体系中的所有类,以及建立的对象都具备可抛性,也就是说可以被throw和throws关键字所操作,只有异常体系具备这个特点。

 

throw和throws的用法

throw定义在函数内,用于抛出异常对象,

throw定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。

 

当函数内有throw抛出异常对象,并未进行try处理,必须要在函数上声明,否则编译失败,

注意,RuntimeException除外,也就是说,函数内如果抛出的是RuntimeException异常,函数上可以不用声明。

 

如果函数声明了异常,调用者需要进行处理,处理方式可以throws可以try。

 

异常有两种:编译时被检测异常。

                            该异常在编译时,如果没有处理(没有throw也没有try),编译失败

                            该异常被标识,代表可以被处理。

                     运行时异常(编译时不检测)

                            在编译时,没有处理。编译器不检查,

                            该异常的发生,建议不处理,让程序停止,需要对代码进行修正。

异常处理的语句

 

try

{

需要被检测的代码

catch

{

处理异常的代码

}

finally

{

一定会执行的代码

}

 

有三种结合的方式,看上边,

1注意finally中定义的通常是 关闭资源代码,比如数据库,因为组员必须释放。

|2,finally只有一种情况不会被执行,当执行到System.out.ext(0);系统退出,finally不会被执行。

 

自定义异常:

       定义类继承Exception或者RuntimeException。

              1为了让该自定义类具备可抛性。

              2,让该类具备操作异常的共性方法。

             

              当要定义自定义异常信息时,可以使用父类已经定义好的功能。

将异常信息传递给父类的构造函数。

class MyException extends Exception

{

       MyException ( Strinfg   message)

              {

                     super(message)

}

}    

自定义异常:是按照java的面向对象思想,将程序成出现的特有问题进行封装。、

 

异常的好处:

 1 将问题进行封装。

2,将正常流程代码和问题处理代码相分离,方便阅读。

 

异常的处理原则:1处理方式有两种try或者throw。

                            2,调用到抛出异常的功能时,抛出几个,就处理几个。

                            就有可能出现一个try对应多个catch的情况。

                            3,多个catch,父类的catch放在最下边。

       4,catch内,需要定义针对性的处理方式,不要简单的定义printStackTrace,或者输出语句。也不要不写

              当捕获到的异常,奔功能处理不了时,可以继续在catch中跑出,

             

 

异常的注意事项:在子父类覆盖式,

1, 子类抛出的异常,必须是父类异常的子类或者子集。

2, 如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛

 

包          对类文件进行分类管理2给类提供多层命名空间,3写在程序的第一行

全国那么多同名的地方,中关村,有俩,是北京的还是美国的?

定义包:package  pack;定义包名,所有字母小写

包与包之间的访问:

1包与包之间进行访问,被访问的包中的类,以及类中的成员需要public修饰,一个包9个类,只有一个类被public修饰了,那么,不同包只能访问这个被public修饰的。

不同包中的类是可以有关系的,一个包中的类可以去继承另外一个包中的类。继承的时候记得要写上包名,而且可以直接使用父类的方法。

2不同包中的子类,还可以直接访问父类中被protected权限修饰的成员。(如果不用protected修饰的话,不同包中的类,可以互相访问,你继承一个包中的类,能访问父类的方法,人家没继承这个类,也能访问,所以要用protected吧父类修饰起来,这样的话,不继承就不能访问了。)

3包与包之间可以使用的权限修饰符只有两种,public 和protected(有局限性,只能给子类使用)

 

总结,权限从大到小

      Public      protected       default(应该什么都不写)  private

同一个类中         ok                        ok                        ok                                      ok

同一个包中         ok             ok                          ok                                     no

子类                    ok                        ok                       no默认的话子类拿不到  no

不同包中             ok                        no                         no                                       no

Protected:用处不大,只有在继承中覆盖时,如果父类被protected修饰,那么就不能覆盖了,只能子类加上protected或者public才能覆盖,权限必须大于等于父类才行。

 

如果同一个包中有两个public修饰的类,另一个包中的类想访问这个包中的类可以吗,

不可以,因为一个java文件中,只能含有一个public修饰的类,并且类名和文件名一致。那怎么办?

再新建一个java文件,但是包名还是那个包的名称。

 

多层包目录:包里边还有包,eg:

 

为了简化类名的书写,使用一个关键字,import(导入的意思),一个程序可以不用import,它只为简化类名书写。

Import 导入的是包中的类。(如果一个包中还有下一个包,那么不继续导入)

Eg: *通配符代表着导入这个子包中所有的类,就不用挨个导入了。

如果import只写到packb,那么只导入了了DemoA.Class,其他的子包中的类是导入不进去的。

建议,不要写通配符*,需要用到包中的哪个类,就导入哪个类。

 

以后开发会用强大的开发工具,所以不用担心,shift+ctrl+O,自动导入

但是,如果开发工具导入了包中的类,两个包中有相同类,在写代码的时候必须加上包名,区分开来。

 

建议定义包名不要重复,可以使用url来完成定义,url是唯一的。吧网址倒过来写eg:packge cn.itcast.demo 因为网址是不重复的。

J——————————————————————————————

Jar包, c创建,f指定名字,packa和pack是要生成jar包的名字。

吧jar包位置放在classpath中

 


原创粉丝点击