三大特殊类(String Object 包装类)与异常

三大特殊类∶特殊处理优化的三个类


String:不可变性(内部存储数据的value数组对外不可见,外部无法直接使用,无法修改内容),字符串字面量直接赋值常量池,final修饰的类,常用方法(substring[start,end)、length()、equals、contains、spilt()、trim() ..)

Object类:Object类是所有类的默认父类(不需要使用extends显示继承),因此Object类的所有方法(private除外),所有类的对象都能使用。想要使用其达成不同的目标,可以使用方法复写

例:toString():将任意对象转为字符串输出,打印对象内容,System.out.,println()接收任意对象并输出,默认调用的就是toString。如果此时想改变输出的格式,就要复写toString方法。

想要比较两个不同的对象是否相等,需要复写equals方法。

除了复写以外,Object默认是所有类的父亲,所有对象都可以通过Object来接收。

Java中对Object做了扩充,Object不仅是所有类的父类,只要是引用数据类型,都可以向上转型变为Object包括数组和接口。Object类型可以接收所有引用数据类型。

Object是引用数据类型的最高参数统一化
如果你设计的方法需要接收所有引用类型,类型就声明为Object

包装类:Object类可以接收所有引用类型,基本类型不得行了,为了让Object接收Java中一切内容,把基本类型封装为类,一切皆对象。

JDK内置的包装类
对象型包装类(Object类的直接子类): Boolean(boolean)、Character(char)
数值型包装类(Number类的直接子类):Byte Short Integer(int) Long Float Double

包装类可以看成装拆箱子的过程
装箱:将基本类型变为包装类对象
拆箱:将包装类对象中的数值还原为基本类型

在进行数学运算的时候,JDK自动进行拆装箱,我们使用包装类和基本类型的用法基本一致,细节上基本类型的默认值是数值,包装类的默认值是NULL

关于类的对象的比较用equals!!

对于包装类而言(以int为例),自动装箱时,JVM会创建一个缓存处理对于[-128,127]的取值,Integer会缓存对象(String常量池)
Integer i1 = 10;1/第一次出现,创建对象进入常量池Integer i2 = 10;/第二次出现,复用上面对象
包装类的"=="比较的是两个包装类对象的地址是否相等! !!,要比值,请使用equlas

包装类和String的相互转换!!
包装类-> String:使用String.valueOf
String ->包装类∶使用包装类的parse***();

异常

首先明确一下 编译出错不属于这里的异常,这里的异常指空指针,下标越界等等。

关于异常,就简单的说下try{} catch(){} [finally]{}

 PS: try catch处理异常时,可以用多个catch捕获不同的异常,也可以使用Exception来捕获异常,这个是异常的父类,可以捕获所有异常类型,但是这样也不方便排查问题。

一旦finally中带了返回值,相当于try和catch的返回值就失效了,无论是否有异常产生,finally一定会执行,因此会覆盖try和catch的返回值。
在finally中不推荐写返回值,除非返回值和异常无关,默认返回值就可放在finally中

JDK7新增的自动关闭接口
一旦一个类实现了AutoCloseable接口,就表示该类具备了自动关闭的能力–声明在try代码块中会自动调用close方法。

异常是有调用链的 所以注意你的异常第一行,往往是你开始出错的地方,这些错误会一步一步的向上传递,直到传递给JVM,程序终止。

然后提一下throw 属于是人为的手动操作异常

异常体系结构

其中Error指的是Java运行时内部错误和资源耗尽错误.应用程序不抛出此类异常.这种内部错误一旦出现,除了告知用户并使程序终止之外,再无能无力.这种情况很少出现.
Exception是我们所使用的异常类的父类.
Error:指的是程序的内部错误,这种错误我们程序员无法捕获处理,一旦发生Error错误,程序只能告知用户出现错误,程序直接退出。
StackOverflowError:栈溢出Error-一般发生在递归调用链太深,递归没有出口
OutOfMemoryError :堆溢出Error

 

Java的异常体系分为两大类


非受查异常︰下图中蓝色方框以及其子类都属于非受查异常。所有的非受查异常不强制程序使用try catch块处理。
Error以及RuntimeException(运行时异常,空指针,类型转换,数组越界)及其子类都是非受查异常
受查异常:左图中红色方框以及其子类都属于受查异常


除了非受查异常外都是受查异常,必须显示使用try.. catch。。异常处理,或者throws抛出。
除了Error和RuntimeExcpetion以及其子类的其他异常都是受查异常,必须显示处理。

 

自定义异常类:


程序开发中,一定会有一些错误是和具体的业务相关的,这种错误JDK是不可能提供相应的异常类,此时我们就需要继承已有的异常类,产生自定义的异常类
若需要用户强制进行异常处理,继承Exception父类–受查异常
若不需要用户显示处理异常,继承RuntimeException父类-非受查异常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值