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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值