黑马程序员_JAVA笔记10——面向对象6(异常、包)

-------  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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值