java面向对象下第二部分学习日志

    技术2022-05-20  55

        java中的异常:

        异常指的是程序中遇到的非致命的错误,不是语法错误,可以通过编译,但运行时会使程序崩溃. 异常可以是访问的文件不存在,磁盘空间满等等.

      针对于异常,我门可以用try{来捕捉}catch{来对它门进行处理}.捕捉异常,我门可以防止程序的崩溃,并给用户一些自定义但更加详细的错误信息,并提供相应的解决方案,这是我门的目的: 完整的try...catch,如下

      try{

        用try包住可能发生异常的代码区域, 如果这段代码发生异常,

        程序就会产生一个Exception对象,并将它传给catch

     }

     catch(Exception e)

     {

         catch如果接收到一个异常对象,就会执行catch中的代码,常见的代码如下

         System.out.println(e.getMessage());

         getMessage()是异常对象中的一个方法,返回异常对应的错误信息.

         这里的e,相当于函数的一个形参,它的名字可变,你可以将其改为ex.

     }

       我门还可以在一个函数定义的原形后面 加上 throws Exception,这是一个声明,声明这个函数执行时可能会发生异常.

       加了这个之后可以提醒程序员,这里可能发生异常.并且它强制我门在调用这个函数的时候必须加上try..catch..,否则编译不通过.当然,你可以在调用这个函数的外面这个函数上,例如在main()函数上也加上throws Exception,那么你就可以不用加try..catch..了,当然这是不可取的.有异常发生,就应该处理,虽然可以骗过编译器,但发生问题就不好办了.

       java中许许多多异常类,每个类都有自己特定的错误信息,不过他们都是Exception的子类. 我门也可以定义自己的异常类,但必须继承 Exception类.定义完后,就可以和其他异常类一样使用了. 要使用它, 需要自己在特定的时候,在try中判断是否发生异常,然后可以 通过

    throw new MyException(),来扔出异常.然后由catch接收.

      其实catch可以这样写:

     catch(ArithmeticException e) {...} catch(MyException e) {...} catch(Exception e) {...}

    这里的catch有点想switch..case..语句,它会按顺序判断抛出的异常是否和当前的异常匹配.由于可能产生多种异常,每次产生哪个异常不知道. 这里的多个catch几可以匹配特定的异常而进行特定的处理. 注意一定要把Exception放在最后.因为它可以匹配所有的异常,主要用于捕获我门未知的异常.已知的异常应该让我门自己来匹配,而不是被Exception给屏蔽掉.

       在catch后面还可以加上finally{}语句,它里面的代码,不管try里面有没有发生异常,它都会执行.它和直接放在catch后面代码的区别是,

    除了在try或catch中调用exit()函数提前终止了程序,否则即使前面执行了return或break,它里面的代码也会执行.但普通的代码就不会执行了.我门可以在finally里面进行一些资源清理工作,并确保的它的执行. 值得注意的是,父类的某方法如果会发生异常,并且父类中另一方法调此方法时加上了try..catch..在这种情况下.子类如果覆盖了这个会发生异常的方法,它如果要扔出异常必须和父类相同.

     

        java中的包package:

       使用包,可以将类组织起来.它可以方便组织自己的代码,并将自己的代码和别人的代码分开管理.java的包具有层次结构,使用包的原因可以确保类名的唯一性. 要想将一个类放入包中,就必须将包的名字放在源文件的开头:

     package com.everpointer;

        如果没在源文件中放置package语句,那么这个源文件中的类就被放置在一个默认包中.默认包是一个没有名字的包.

        实际的开发中都应该创建包,不过只能写一条这样的语句哦.

       指定包名后, 包名所指定的结构必须要创建相对应的实际目录结构,并将类文件拷贝其中. 不过我门可以在使用 javac 的时候加上-d参数,来指定类文件所存放的目录.可惜它不回自动生成相应的目录,这算是sun的一个疏忽把.

        当对一个包中的类文件进行解释执行时,首先要将包所在目录加到classpath当中,才能被java程序找到. 并且在java 后所要解释的类,它的名字中一定要包含它所在的包名. 如 要解释执行 com.everpointer包中一个test类,那命令应该是 java com.everpointer.test.  加了包名的类才是这个类的完整的名称.否则只是写上test的话,系统会在classpath中按顺序一一查找,可能在很多目录中都有test类,这样找到的就不是我门要找的那个类了.加了包名,类名独一无二,就不会发生这样的问题了.

        import:

        import java.util.*;

        import 可以 让我们引入另一个包中的类.一个包要想被另一个包引入访问,它必须是public的.而一个类文件只能有一个public类,并且源文件的名字必须和类名一样.这些要注意.

       tips: 编译代码的时侯如果提示找不到类,则可能的原因有:

        1. 可能类名写错了,如大小写错误.

        2.  类在另一个包中,你没有import

        3. 是 classpath的路径问题,import在classpath设置的路径中找不到相应的包名.

        标准的java类库分布在多个包中,如jdk中常用的包 java.lang,我门常用的String类就在这个包中.不过象这种包,我门不需要写import语句,编译会自动引入. 还有列如ava.lang和java.lang.a包,它们之间没有任何的关系,这跟名字没有关系.

     

       访问控制: 有一个表格可以表现出不同类之间的访问控制形式,如下:(*代表可以访问)

                          private        default         protected       public

       同一个类            *                 *                   *                  *

       同一包中类                            *                   *                  *

       子类                                                          *                  *

       其他包中类                                                                     *  

     

      除了变量和函数有访问控制,类也有. 不过类只有 public 和 缺省两种.

     

        java的命名规范: (一多个单词组成一个名字为例)

       1. 包名, 单词全小写.

       2. 类名和接口名,单词首字母都大写.

       3. 方法和变量名, 第一个单词小写,剩余的单词首字母大写.

       4. 常量名都大写.

     

        jar文件:又称jar包,是一种压缩文件.(和winrar,winzip兼容,可用它来打开查看)

        jdk中的类包,就放在jar文件中.

        sun公司为我提供的 jar程序, 可方便的用来生成jar文件.下面是命令示例:

         jar  -cf lesson.jar  org (将org包压缩成 一个 叫 lesson.jar文件.

         jar  -tf lesson.jar > 1.txt  查看一个jar文件的内容,后面的是重定向命令.

         jar  -xf lesson.jar 解压jar文件.

        以后要引入jar文件包中的类的时候,只要把它当成是一个目录,设置classpath的时候路径的最后还要加上这个jar文件.我门就能找到其中的类并使用. 也就是编译器能够读取jar文件里的内容.这样的设置真的很便利,只需要把包放在一个jar文件就可以了.不需要棉队一大堆的文件夹.

        不过在使用jar命令生成jar文件的时候要注意,它会根据当前所在目录,目录中的所有文件夹都会被放入jar文件中.所以一定要进入包所在的目录后,再执行jar命令,这样jar文件中的包结构才会正确.如:

       要放入jar文件的org包的所在路径 D:/javawork/lesson/org

       当前路径:是 D:/javawork

       执行的命令是 jar -cvf lesson.jar lesson/org  表面上你的这条命令的意思把lesson目录中的org放入jar中. 但实际jar中的结构确是jar/org. jar把命令参数中的lesson也压缩了进去. 所以.一定要进入lesson这个目录,再压缩org包,才不会出错.

       好了今天就先到这把.

     

       

     

     


    最新回复(0)