您的位置:首页 > 职场人生

黑马程序员———异常,包的总结

2014-12-01 20:14 106 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

异常:就是程序中出现的不正常情况。

异常由来:问题是现实生活中的一个事物,也可以通过java的类的形式

进行描述,并封装成对象。

异常的体系Throwable--

Throwable:

Error:

通过出现重大问题如:运行的类不存在或者内存溢出。

不编写针对代码对其处理。

Exception:

在运行时运行出现的异常情况,可以通过try catch finally解决。

Exception和Error的子类名都是以父类名作为后缀起名的。

无论Error还是Exception都有共性内容,比如:引发原因,不正常情况的信息等。

2 异常的处理:

try{
需要被检测的语句;
}catch(异常类 变量) {
处理异常的代码(处理方式)
}finally {
一定会执行的语句;
}

3 对捕获到的对象进行常见方法操作:

String getMessage();
String toString();
e.printStackTrace();

其实虚拟机默认的异常处理机制就在调用e.printStackTrace();

在函数上声明异常:

便于提高安全性,让调用者进行处理。不处理编译失败。

对多异常的处理:

1.声明异常时,建议声明更为具体的异常,这样处理的可以更具体。

2.对方声明几个异常,就对应有几个catch块。不要定义多余的catch块

如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

建议在进行catch处理时,catch中一定要定义具体处理方式。

不要简单定义一句:e.ptintStachTrace(),也不要就书写一条输出语句。

实际开发,当出现问题时,会把问题以日志的形式体现,称为异常日志

因为项目中会出现特有的问题。而这些问题并未被java所描述并封装成对象。

所以对于这些特有的问题可以按照java对问题封装的思想,将特有的问题进行自定义的异常封装。

自定义异常:

需求:在本程序中,对于除数为负数的情况,视为错误,无法进行运算。

所以需要对这个问题进行自定义的描述。

当在函数内部出现了throw抛出异常对象,那么必须要给对应的处理动作。

要么在内部try catch处理。

要么在函数上声明让调用者处理。

一般情况,在函数内出现异常,函数上也需要声明。


发现打印的结果只有异常的名称,却没有异常的信息。因为自定义的异常没有定义信息。

那如何定义异常信息呢?

因为父类中已经把异常信息的操作都完成了。
所以子类只要在构造时,将异常信息传递给父类通过super()语句。
那么就可以直接通过getMessage方法获取自定义的异常信息。

自定义异常:必须是自定义类继承Exception

继承Exception原因:

异常体系有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性。这个可抛性是Throwable这个体系中国独有特点。

只有这个体系中的类和对象才可以被throws和throw操作。

throw和throws的区别:

throws使用在函数上

throw使用在函数内

throws后面跟的是异常类,可以跟多个,用逗号隔开。

throw后面跟的是异常对象。



Exception中有一个特殊的子类异常RuntimeException 运行时异常。

如果在函数内抛出该异常,函数上可以不用声明,编译一样通过。

如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过

之所以不用再函数声明,是因为不需要调用者处理。
当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。

自定义异常时:如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException

对于异常分两种:

1.编译时被检测的异常。
2.编译时不被检测的异常(运行时异常,RuntimeException及其子类)

finally代码块:一定会执行的语句,

通常用于关闭资源(如数据库的关闭)

------------------------------------

包(package)

对类文件进行分类管理

给类提供多层命名空间

写在程序文件的第一行。

类名的全称的是 包名.类名

包也是一种封装形式。

包名的定义:所有的字母小写

javac -d . PackageDemo.java//当前目录

javac -d c:\myclass PackageDemo.java//指定目录

set classpath = c:\myclass //不用设置到pack目录下。

java pack.PackageDemo

总结:

包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。

不同包中的子类还可以直接访问父类中被protected权限修饰的成员。

包与包之间可以使用的权限只有两种:public protected


public protected default private

同一个类中 T T T T

同一个包中 T T T

子类 T T

不同包中 T

导包:为了简化类名的书写,使用一个关键字import

import:导入的是包中的类。

通常在开发中,用到哪个类就导入哪个类,因为写通配符*,太占内存。

写包名可以方便管理,也可以避免类重名。

建议定义包名不要重复,可以使用url来完成定义,url是唯一的。

www.itcast.cn

package cn.itcast.demo

package cn.itcast.test

Jar包:

java的压缩包。

1.方便项目的携带。

2.方便于使用,只要在classpath设置jar路径即可。

3.数据库驱动,SSH框架等都是以jar包体现的。

打包成jar包:实例1:将两个类文件归档到一个名为classes.jar的归档文件中。

jar cvf classes.jar Foo.class Bar.class

实例2:使用现有的清单文件“mymanifest”归档到“classes.jar”中,

jar cvfm classes.jar mymanifest -C foo/.

jar -cf haha.jar packa pack


JDK中的工具:jar.exe

把jar包放到classpath路径下,就能使用包中的数据。

rt.jar是java的类库。

编译工具所属的类在tools.jar中。

把某个文件或者dos命令行中的界面存到硬盘中的一个文件中,可以使用:

jar -tf rt.jar > c:\rt.txt (把rt.jar中的数据存到rt.txt中)

Object中:

public class Object{

private static native void registerNatives();

static{

registerNatives();

}

//本地注册。 关键字native就是调用系统中的虚拟机。虚拟机找windows。

public native int hashCode();//用相应系统中的hashCode方法。

native走的就是本地方法区,底层的东西看不着。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: