黑马程序员_JAVA笔记10——面向对象6(异常、包)
2013-09-01 16:46
232 查看
------- android培训、java培训、期待与您交流! ----------
1、finally,存放的是一定会被执行的代码,无论任何情况都会执行,包括程序终止。通常用于关闭资源。
2、异常三种格式
格式一:
try
{
}
catch()
{
}
格式二:
try
{
}
catch()
{
}
finally
{
}
格式三:
try
{
}
finally
{
}
异常:问题只要被解决就不用再函数后声明,catch是用于处理异常的,有catch就表示被解决。没有catch就没有处理(此时异常必须被声明出去)。
注意以下几种情况:
情况一:
class Demo
{
public void method()
{
try
{
throw new Exception();//此时的异常内部处理,
//catch解决了,因此可以编译通过
}
catch(Exception e)
{
}
}
}
情况二:
class Demo
{
public void method()
{
try
{
throw new Exception();//抛异常
}
catch(Exception e)//接收异常并处理
{
throw e;//处理方式为抛异常
//这次抛出的异常没有方式解决,编译不通过
}
}
}
情况三:
class Demo
{
public void method()
{
try
{
throw new Exception();//抛异常
}
catch(Exception e)//接收异常并处理
{
try
{
throw e;//此时的异常内部处理,
}
catch(Exception e)//被处理,编译通过
{
}
}
}
}
情况四:
class Demo
{
public void method()
{
try
{
throw new Exception();//没有catch,因此编译不
//通,需要声明出去,即在method()后加 throws
//Exception
}
finally
{
//关资源,一些必须执行的语句
}
}
}
3、异常在子父类覆盖中的体现:
子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集。
如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常,那么就必须进行try处理,绝对不能抛。
class AException extends Exception
{
}
class BException extends AException
{
}
class CException extends Exception
{
}
class Fu
{
void show() throws AException//父类抛异常
{
}
}
class Zi extends Fu
{
void show() throws AException//父类抛AException ,因此子类
//只能抛AException,或其子类BException ,不能抛Exception
}
class Test
{
void function(Fu f)
{
try
{
f.show();//调用了抛AException异常的方法
}
catch(AException e)//因此此时用
AException
{
}
}
}
4、异常总结
异常:是对问题的描述,将问题进行对象的封装。
异常体系:Throwable
Error
Exception
RunTimeException
异常体系特点:异常体重的所有类以及建立的对象都具备可抛性。也就是说可以被throw 和throws所操作,只有异常体系具备这个特点。
throw 和throws用法:
throw定义在函数内,用于抛出异常对象
throws定义在函数上,用于抛出异常,可以抛出多个,用逗号分开。
当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,否则编译失败。注意:RunTimeException除外,也就是说,函数内如果抛出的是RunTimeException,函数上可以不用声明
注意:throw语句下面不要放语句,因为永远执行不到,编译会失败,因为只要执行到throw,程序就终止到这里或跳转到catch了,throw后面的语句无法执行到。但是可以把throw封装到一个方法里,在该方法下面可以写语句,因为throw时,有函数声明,表明该方法可能出现问题,但也可能不出现,所以方法下面的语句有可能执行到,因此编译不出错
如果函数声明了异常,调用者需要进行处理,处理方法可以是throws或者try catch
异常有两种
编译时被检测异常
该异常在编译时,如果没有处理(没有抛也没有try)编译失败
该异常被标示,标示可以被处理
运行时异常(编译时不检测)
在编译时,不需要处理,编译器不检查
该异常发生,建议不处理,让程序停止,需要对代码进行修正。
异常处理语句
try
{
被检测的语句
}
catch()
{
异常处理语句
}
finally
{
一定执行的语句
通常是关闭资源代码,因为资源必须释放
}
finally 注意:只有一种情况finally读不到,执行到System.exit(0),表示系统退出,JVM结束。不读finally。(有return ,仍然执行finally)
自定义异常:定义类继承Exception或RunTimeException
为了让该自定义类具备可抛性
让该类具备操作异常的共性方法
当要定义自定义异常的信息时,可以使用父类已经定义好的功能,异常信息传递给父类的构造函数即可
class MyException extends Exception
{
MyException(String message)
{
super(message);
}
}
自定义异常,按照java的面向对象思想,将程序中出现的特有问题进行封装
异常的好处:
将问题进行封装
将正常流程代码和问题处理代码相分离,方便于阅读。
异常的处理原则:
a、处理方式有两种,try catch 或者throws
b、调用到抛出异常的功能时,抛出几个就处理几个,一个try多个catch
c、多个catch,父类的catch必须放到最下面,否则编译失败
d、catch,需要定义针对性的处理方式,不要简单的定义printStackTrace输出语句,也不要不写。
当捕获到异常,本功能处理不了时,可以继续在catch中抛出
try
{
trow new AException();
}
catch(AException e)
{
throw e;
)
该如果该异常处理不了,但并不属于该功能出现的异常。可以将异常转换后,再抛出和该功能相关的异常
或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道,并处理,也可以将捕获异常处理后,转换新的异常。
try
{
}
trow new AException();
catch(AException e)
{
//对AException进行处理
throw new BException();
)
异常注意事项:
在子父类覆盖时:
子类抛出的异常必须是父类的异常或者父类异常的子集
如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛。
5、包package
对类文件进行分类管理;
给类提供多层命名空间;
写在程序文件的第一行;
类名的全称是:包名.类名;
包也是一种封装形式;
package pack;//包名所有字母小写
class PackageDemo
{
public void main(String[] args)
{
}
}
注意:在编译的时候有些变化:
javac -d 存放目录 类名.java 表示将包放在该目录中,此时java源文件在当前目录,而生成的class文件在指定目录,这个操作将二者分开了,在运行java 包名.类名 前 , 要set classpath=存放目录,这里存放目录到包的父级即可,不包括包。不设置set classpath的话jvm找不到class文件。
javac -d . 类名.java 表示将包放在当前目录中
运行时
java 包名.类名
6、包与包之间关系
类A与类B在不同的包中,若在A中访问B中的成员与方法,那么类B必须是public的,B中的成员与方法也必须是public的。
不同包中的子类可以访问父类中被priotected权限修饰的成员
理解:类A继承类B ,类A 类B 类C 在三个不同的包中,类B是public的,B中部分成员时public的,部分成员时protected的,类A是public的,类A成员是public的
此时:类C可以访问A中所有成员,类C可以访问B中public的成员,类A可以访问B中所有成员。
所以:类B中protected修饰的成员是专为其子类而提供的,非其子类不能访问。
书写时:在C中访问A,需要在A前加上包名。
包与包之间可以使用的权限只有两种 public protected
public protected default private
同一个类 OK OK OK OK
同一个包 OK OK OK
子类 OK OK
不同包 OK
一个.java文件中,可以存在多个类或接口,但只能存在一个用public修饰的类或接口,此时.java文件名与用public修饰的类或接口名一致。
若想放问同一个包中的两个类,此时这两个类必须是public的,但是同一个.java文件中不能存在两个public类,因此可以将这两个public类分别写在两个源文件中即可,编译时生成两个.class文件,在同一个包中
包中有包的情况
package packa.packb.packc
public class Democ
{
}
此时编译后的Democ.class文件放在packc中,packc在packb中,packb在packa中。
在一个包中,导入另一个后,再访问时就不用写包名了,用import,导入的是包中的类,不能导入包
packd
import packb.*;//导入packb中所有类
import packa.packb.packc.*;导入包packc中所有类
class
{
}
建议:不适用.*,而是使用包中哪个类导入哪个类
另外:在导入另个包时,有重名的类,此时类名前必须加包名,但是一般都是尽量避免类名重复。尽量避免包名重复,对于包名可以使用url来完成定义。例如网址:www.itcast.cn
包名可以定义为:cn.itcast.demo
7、jar包
在目录c:\myclass中存在两个包packa packb,将这两个包形成jar包
在命令提示行中:jar 显示jar中所有命令
进入到c:\myclass,jar -cf haha.jar packa packb
参数命令 jar包名 包名
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>jar
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] file
s ...
选项包括:
-c 创建新的归档文件
-t 列出归档目录
-x 解压缩已归档的指定(或所有)文件
-u 更新现有的归档文件
-v 在标准输出中生成详细输出
-f 指定归档文件名
-m 包含指定清单文件中的清单信息
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储;不使用任何 ZIP 压缩
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。
示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
jar cvf classes.jar Foo.class Bar.class
示例 2:使用现有的清单文件 "mymanifest" 并
将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
jar cvfm classes.jar mymanifest -C foo/ .
查看jar包中内容 ,命令: jar -tf haha.jar
在把多个包打成一个jar包时,set classpath=jar包路径,这时可以直接编译运行就可以。
因此在网络上的一些jar包,可以把这些jar包放在classpath下,查看文档(docs 中的index.html),就可以直接使用了
将显示的信息存放在txt中,
如:dir > c:\1.txt ,此时dir出来的信息都放到1.txt中了。
又如将haha.jar中信息显示在2.txt中,jar -tf haha.jar > c:\2.txt
1、finally,存放的是一定会被执行的代码,无论任何情况都会执行,包括程序终止。通常用于关闭资源。
2、异常三种格式
格式一:
try
{
}
catch()
{
}
格式二:
try
{
}
catch()
{
}
finally
{
}
格式三:
try
{
}
finally
{
}
异常:问题只要被解决就不用再函数后声明,catch是用于处理异常的,有catch就表示被解决。没有catch就没有处理(此时异常必须被声明出去)。
注意以下几种情况:
情况一:
class Demo
{
public void method()
{
try
{
throw new Exception();//此时的异常内部处理,
//catch解决了,因此可以编译通过
}
catch(Exception e)
{
}
}
}
情况二:
class Demo
{
public void method()
{
try
{
throw new Exception();//抛异常
}
catch(Exception e)//接收异常并处理
{
throw e;//处理方式为抛异常
//这次抛出的异常没有方式解决,编译不通过
}
}
}
情况三:
class Demo
{
public void method()
{
try
{
throw new Exception();//抛异常
}
catch(Exception e)//接收异常并处理
{
try
{
throw e;//此时的异常内部处理,
}
catch(Exception e)//被处理,编译通过
{
}
}
}
}
情况四:
class Demo
{
public void method()
{
try
{
throw new Exception();//没有catch,因此编译不
//通,需要声明出去,即在method()后加 throws
//Exception
}
finally
{
//关资源,一些必须执行的语句
}
}
}
3、异常在子父类覆盖中的体现:
子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集。
如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常,那么就必须进行try处理,绝对不能抛。
class AException extends Exception
{
}
class BException extends AException
{
}
class CException extends Exception
{
}
class Fu
{
void show() throws AException//父类抛异常
{
}
}
class Zi extends Fu
{
void show() throws AException//父类抛AException ,因此子类
//只能抛AException,或其子类BException ,不能抛Exception
}
class Test
{
void function(Fu f)
{
try
{
f.show();//调用了抛AException异常的方法
}
catch(AException e)//因此此时用
AException
{
}
}
}
4、异常总结
异常:是对问题的描述,将问题进行对象的封装。
异常体系:Throwable
Error
Exception
RunTimeException
异常体系特点:异常体重的所有类以及建立的对象都具备可抛性。也就是说可以被throw 和throws所操作,只有异常体系具备这个特点。
throw 和throws用法:
throw定义在函数内,用于抛出异常对象
throws定义在函数上,用于抛出异常,可以抛出多个,用逗号分开。
当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,否则编译失败。注意:RunTimeException除外,也就是说,函数内如果抛出的是RunTimeException,函数上可以不用声明
注意:throw语句下面不要放语句,因为永远执行不到,编译会失败,因为只要执行到throw,程序就终止到这里或跳转到catch了,throw后面的语句无法执行到。但是可以把throw封装到一个方法里,在该方法下面可以写语句,因为throw时,有函数声明,表明该方法可能出现问题,但也可能不出现,所以方法下面的语句有可能执行到,因此编译不出错
如果函数声明了异常,调用者需要进行处理,处理方法可以是throws或者try catch
异常有两种
编译时被检测异常
该异常在编译时,如果没有处理(没有抛也没有try)编译失败
该异常被标示,标示可以被处理
运行时异常(编译时不检测)
在编译时,不需要处理,编译器不检查
该异常发生,建议不处理,让程序停止,需要对代码进行修正。
异常处理语句
try
{
被检测的语句
}
catch()
{
异常处理语句
}
finally
{
一定执行的语句
通常是关闭资源代码,因为资源必须释放
}
finally 注意:只有一种情况finally读不到,执行到System.exit(0),表示系统退出,JVM结束。不读finally。(有return ,仍然执行finally)
自定义异常:定义类继承Exception或RunTimeException
为了让该自定义类具备可抛性
让该类具备操作异常的共性方法
当要定义自定义异常的信息时,可以使用父类已经定义好的功能,异常信息传递给父类的构造函数即可
class MyException extends Exception
{
MyException(String message)
{
super(message);
}
}
自定义异常,按照java的面向对象思想,将程序中出现的特有问题进行封装
异常的好处:
将问题进行封装
将正常流程代码和问题处理代码相分离,方便于阅读。
异常的处理原则:
a、处理方式有两种,try catch 或者throws
b、调用到抛出异常的功能时,抛出几个就处理几个,一个try多个catch
c、多个catch,父类的catch必须放到最下面,否则编译失败
d、catch,需要定义针对性的处理方式,不要简单的定义printStackTrace输出语句,也不要不写。
当捕获到异常,本功能处理不了时,可以继续在catch中抛出
try
{
trow new AException();
}
catch(AException e)
{
throw e;
)
该如果该异常处理不了,但并不属于该功能出现的异常。可以将异常转换后,再抛出和该功能相关的异常
或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道,并处理,也可以将捕获异常处理后,转换新的异常。
try
{
}
trow new AException();
catch(AException e)
{
//对AException进行处理
throw new BException();
)
异常注意事项:
在子父类覆盖时:
子类抛出的异常必须是父类的异常或者父类异常的子集
如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛。
5、包package
对类文件进行分类管理;
给类提供多层命名空间;
写在程序文件的第一行;
类名的全称是:包名.类名;
包也是一种封装形式;
package pack;//包名所有字母小写
class PackageDemo
{
public void main(String[] args)
{
}
}
注意:在编译的时候有些变化:
javac -d 存放目录 类名.java 表示将包放在该目录中,此时java源文件在当前目录,而生成的class文件在指定目录,这个操作将二者分开了,在运行java 包名.类名 前 , 要set classpath=存放目录,这里存放目录到包的父级即可,不包括包。不设置set classpath的话jvm找不到class文件。
javac -d . 类名.java 表示将包放在当前目录中
运行时
java 包名.类名
6、包与包之间关系
类A与类B在不同的包中,若在A中访问B中的成员与方法,那么类B必须是public的,B中的成员与方法也必须是public的。
不同包中的子类可以访问父类中被priotected权限修饰的成员
理解:类A继承类B ,类A 类B 类C 在三个不同的包中,类B是public的,B中部分成员时public的,部分成员时protected的,类A是public的,类A成员是public的
此时:类C可以访问A中所有成员,类C可以访问B中public的成员,类A可以访问B中所有成员。
所以:类B中protected修饰的成员是专为其子类而提供的,非其子类不能访问。
书写时:在C中访问A,需要在A前加上包名。
包与包之间可以使用的权限只有两种 public protected
public protected default private
同一个类 OK OK OK OK
同一个包 OK OK OK
子类 OK OK
不同包 OK
一个.java文件中,可以存在多个类或接口,但只能存在一个用public修饰的类或接口,此时.java文件名与用public修饰的类或接口名一致。
若想放问同一个包中的两个类,此时这两个类必须是public的,但是同一个.java文件中不能存在两个public类,因此可以将这两个public类分别写在两个源文件中即可,编译时生成两个.class文件,在同一个包中
包中有包的情况
package packa.packb.packc
public class Democ
{
}
此时编译后的Democ.class文件放在packc中,packc在packb中,packb在packa中。
在一个包中,导入另一个后,再访问时就不用写包名了,用import,导入的是包中的类,不能导入包
packd
import packb.*;//导入packb中所有类
import packa.packb.packc.*;导入包packc中所有类
class
{
}
建议:不适用.*,而是使用包中哪个类导入哪个类
另外:在导入另个包时,有重名的类,此时类名前必须加包名,但是一般都是尽量避免类名重复。尽量避免包名重复,对于包名可以使用url来完成定义。例如网址:www.itcast.cn
包名可以定义为:cn.itcast.demo
7、jar包
在目录c:\myclass中存在两个包packa packb,将这两个包形成jar包
在命令提示行中:jar 显示jar中所有命令
进入到c:\myclass,jar -cf haha.jar packa packb
参数命令 jar包名 包名
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>jar
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] file
s ...
选项包括:
-c 创建新的归档文件
-t 列出归档目录
-x 解压缩已归档的指定(或所有)文件
-u 更新现有的归档文件
-v 在标准输出中生成详细输出
-f 指定归档文件名
-m 包含指定清单文件中的清单信息
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储;不使用任何 ZIP 压缩
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。
示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
jar cvf classes.jar Foo.class Bar.class
示例 2:使用现有的清单文件 "mymanifest" 并
将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
jar cvfm classes.jar mymanifest -C foo/ .
查看jar包中内容 ,命令: jar -tf haha.jar
在把多个包打成一个jar包时,set classpath=jar包路径,这时可以直接编译运行就可以。
因此在网络上的一些jar包,可以把这些jar包放在classpath下,查看文档(docs 中的index.html),就可以直接使用了
将显示的信息存放在txt中,
如:dir > c:\1.txt ,此时dir出来的信息都放到1.txt中了。
又如将haha.jar中信息显示在2.txt中,jar -tf haha.jar > c:\2.txt
相关文章推荐
- 黑马程序员_JAVA笔记09—面向对象5(内部类、异常)
- 黑马程序员——JAVA学习笔记——面向对象(三大特性)
- 黑马程序员_Java基础_面向对象(内部类、异常1)
- (15)Java学习笔记——面向对象08——异常
- 黑马程序员——Java练习笔记——面向对象
- 黑马程序员-Java学习笔记之面向对象(多态 在上一篇笔记中)
- 【黑马程序员】Java学习笔记--异常
- 【黑马程序员】异常,File类,IO流——Java复习笔记
- 黑马程序员笔记——Java面向对象之异常和包
- 《黑马程序员》java笔记->【03.2.1】关于异常
- 黑马程序员_JAVA学习笔记10
- 学习笔记 Java_毕向东_面向对象_静态_异常 2014.8.2
- 黑马程序员——Java要点笔记——面向对象(二)
- 黑马程序员java学习笔记——内部类、异常、包
- 黑马程序员——Java笔记——异常
- 【黑马程序员】 java笔记——异常
- 黑马程序员_JAVA笔记08——面向对象4(多态)
- 黑马程序员_java基础2(面向对象、内部类、异常)
- 黑马程序员_java编程基础10面向对象
- 黑马程序员—7—Java基础:有关异常学习笔记和学习心得体会