Java基础(三)

异常与异常处理

1、Java异常机制用到的几个关键字:try、catch、finally、throw、throws

    try -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。

    catch   -- 用于捕获异常。catch用来捕获try语句块中发生的异常。

    finally  -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有                         finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw                     等终止方法的语句,则就不会跳回执行,直接停止。

    throw   -- 用于抛出异常。

    throws -- 用在方法签名中,用于声明该方法可能抛出的异常。主方法上也可以使用throws抛出。如果在主方法上使用了throws                      抛出,就表示在主方法里面可以不用强制性进行异常处理,如果出现了异常,就交给JVM进行默认处理,则此时会导                        致程序中断执行。

2、三种类型的异常

     检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,                               一个异常就发生了,这些异常在编译时不能被简单地忽略

     运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

     错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们                    在编译也检查不到的   

3、异常的根接口Throwable,其下有2个子接口,Error和Exception。

     Error:指的是JVM错误,这时的程序并没有执行,无法处理;

     Exception:指的是程序运行中产生的异常,用户可以使用处理格式处理。

     

4、异常的处理方案

    try...catch、try...catch...finally、try...finally
    try{
        可能会发生的异常
    }catch(异常类型 异常名(变量)){
        针对异常进行处理的代码
    }catch(异常类型 异常名(变量)){
        针对异常进行处理的代码
    }...
    [finally{
        释放资源代码;
    }]

注意:

catch 不能独立于 try 存在。
catch里面不能没有内容
在 try/catch 后面添加 finally 块并非强制性要求的。
try 代码后不能既没 catch 块也没 finally 块。
try里面越少越好。
try, catch, finally 块之间不能添加任何代码。
finally里面的代码最终一定会执行(除了JVM退出)
如果程序可能存在多个异常,需要多个catch进行捕获。
异常如果是同级关系,catch谁前谁后没有关系
如果异常之间存在上下级关系,上级需要放在后面

5、自定义异常

    在 Java 中你可以自定义异常。如果要自定义异常类,则扩展Exception类即可,因此这样的自定义异常都属于检查异常(checked          exception)。如果要自定义非检查异常,则扩展自RuntimeException。

    按照国际惯例,自定义的异常应该总是包含如下的构造函数

  • 一个无参构造函数
  • 一个带有String参数的构造函数,并传递给父类的构造函数。
  • 一个带有String参数和Throwable参数,并都传递给父类构造函数
  • 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。

   下面是IOException类的完整源代码,可以借鉴。

    
    

    finally块和return

    (1)、首先一个不容易理解的事实:在 try块中即便有return,break,continue等改变执行流的语句,finally也会执行。
    (2)、finally中的return 会覆盖 try 或者catch中的返回值。
    (3)、finally中的return或异常会抑制(消灭)前面try或者catch块中的异常。

 

Java中的字符串

1、String

      (1)、String对象创建后则不能修改,是不可变的,所谓的修改是创建了新的对象,所指向内存空间不同。

      (2)、一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串,我们可以使用StringBuffer或               者StringBuilder

     (3)、每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内               容是否相同,应使用 ”equals()” 方法,对象实体比较,通过重写Object中的equals方法来比较。

     (4)、String常用的类

             

             字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1;使用 indexOf 进行字符或字符串查找时,如果匹配返回位置               索引;如果没有匹配结果,返回 -1

      (5)、“==” 和 equals() 有什么区别:

               ”==“是判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象。

              ”equals“比较存储在两个字符串对象中的内容是否一致。

              字节是计算机存储信息的基本单位,1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储                需要 1个字节。

2、StringBuilder 或 StringBuffe

     当频繁操作字符串,不停的创建对象就会额外产生很多的临时变量,使用StringBuilder 或 StringBuffe就会避免这个问题。至于         StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功         能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。

          

Java中必须了解的常用类

1、包装类

     基本数据类型是不具备对象的特性的,比如基本类型不能调用方法、功能简单。。。,为了让基本数据类型也具备对象的特             性,Java为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。

     

    包装类主要提供两大类的方法:

    (1)、将本类型和其他基本类型进行转换的方法

    (2)、将字符串和基本类型及包装类互相转换的方法

2、日期类:Date(java.util) 和 SimpleDateFormat(java.text)

    (1)、使用 format() 方法将日期转换为指定格式的文本

             

    (2)、使用 parse() 方法将文本转换为日期(调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即                                    ParseException , 因此需要进行异常处理)

             

3、Calendar 类(处理日期)

   (1)、java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时             间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();

           

           

4、Math 类

   Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法           时,可以直接使用类名.方法名,如: Math.round()

    

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值