七 Java常用类&异常处理

本文详细介绍了Java API中的核心类`java.lang.Object`,包括equals()、hashCode()和toString()方法的使用。同时讲解了Java字符串常量池的概念和String类的特点。此外,还探讨了异常处理机制,包括运行时异常、非运行时异常的分类,以及try-catch-finally语句块的执行流程。最后,提到了异常处理的最佳实践和throw与throws的区别。

Java API学习思路:使用java核心语法作为依据,分析JDK中类或接口的设计并使用。比如,java.lang.Object类。
学习方法:查阅API文档

java.lang.Object类

Object类是所有类的共同父类。任何类都具备Object类的特性。

特点

没有属性;无参构造;有一些方法

方法

1、equals(Object obj)方法,判断两个对象的属性值是否相等.
【在参数表中使用多态 任何对象均可传入“is-a”Object】
结论:Object中默认equals比较的还是内存地址,如果需要比较其他数据,可以在子类中覆盖父类的equals方法。
比较运算符==:
基本类型比较值;
引用类型比较对象的内存地址值;
引用类型和null比较

2、Class getClass() 获取某个对象的类信息的对象
系统只会为一个类保存一份Class类型的对象(基因),java.lang.Class类 为Java反射编程提供了基础,是走向java高级程序员的必备技术

3、Int hashCode()返回对象的哈希码值
签名:public int hashCode()
功能:默认返回对象内存地址的十进制数形式

4、String toString()返回对象的字符串表达
签名:public String toString()
结论:直接打印引用(直接判断引用是否为null),如果引用是null,打印null;如果引用不是null,隐式调用s1.toString()方法。如果需要直接看到属性的值,可以覆盖toString方法
显式调用 s1.toString();
隐式调用 System.out.println(s1);

Java.lang.String类

含义

字符串是一组不变的unicode序列

特点

1.不变模式,final不能被继承、字符串数据不能改变
2.具备字符串常量池.(池就是缓存,使用内存空间缓存数据,以备使用),例如,
String s1 = “abc”; // 字符串常量,入池
String s2 = “abc”; // 先将对象入池,如果再出现相同的常量则共享同一个区域
s1 == s2;为true // 能够减少重复字符串常量的创建
注意:仅常量时符合上述入池规则,如果是变量则不符合此规则,需要各自入池。

使用方法

学习思路:先使用、熟悉;需要时再查找并实践;
大胆猜测,小心验证;

String拼接

少量字符串拼接“+”
大量字符串拼接使用java.lang.StringBuffer类.(使用“+”进行大量字符串拼接时,会产生大量的垃圾对象,增加GC负担,降低系统性能)
String是不可变的;StringBuffer是可变的字符串缓存
StringBuffer sb = new StringBuffer(); // 不断使用sb.appen()追加、拼接

异常处理

含义

异常Exception,就是一种引用类型,具备对象。可以在项目中通过不同的异常来模拟不同的业务问题。通过抛出、捕获、处理异常能够提供应急预案,从而提高系统的建壮性

相关类

java.lang.Throwable类(可抛的)
所有异常和错误的父类,可以通过throw关键字进行抛出,例如throw new Throwable();或者throw new Exception();

java.lang.Exception类(异常)
异常时可以捕获并处理的,主要关注异常

java.lang.Error类(错误)
错误一旦出现,是严重的底层错误,无法挽回
比如:java.langOutOfMemoryError 内存溢出。一旦出现,程序赖以生存的环境丧失,无需关注

分类

1、运行时异常:
RuntimeException类及其子类,未检测异常unchecked Exception,在编译时,编译器不会检测,运行时才出现。例如,
NullPointerException 空指针异常,
ArrayIndexOutBoundsException 数组下表越界,
ClassCastException 类型转换异常

2、非运行时异常:
除了RuntimeException之外,Exception及其其他子类

3、已检测异常 checked Exception
在编译时,编译器会检测,必须处理

RuntimeException常用子类

常用的运行时异常
1、ArithmeticException
算术异常,例如,1/0分母不能为0,抛出异常,加判断进行避免。
2、ClassCastException
类型转换异常.如何避免:使用instanceof判断
3、IllegalArgumentException
非法参数异常.如何避免:保证日期格式的正确,使用正则表达式来检测
4、IndexOutBoundsException
下标越界异常,有两个子类:ArrayIndexOutBoundsException和StringIndexOutBoundsException
5、NullPointerException
空指针异常 原因:访问空引用的成员,如何避免:调用之前先判断

处理异常

积极处理:

关键字try catch finally
尝试->捕获->最终处理
finally中写入无论是否发生异常,最终一定会执行的语句,主要用于写释放资源的代码

消极处理:

关键字:throws,方法签名后声明抛出某种异常

[修饰符] 返回值类型 方法名(参数表) [throws 异常类型1,异常类型2,…] {
      方法体
      可能抛出某种异常,自身无法处理,声明对外抛出(谁调用它,谁去处理异常)
}

粒度问题

Try{
        (1)
        (2)
        (3)
} catch(Exception e){
        (4)
} finally{
        (5)
}
        (6)

情况一:没有异常,处理顺序为(1)(2)(3)(5)(6)
情况二:在(2)处有异常,处理顺序(1)(2)(4)(5)(6)
情况三:有异常,没有被捕获(1)(2)(5)—>终止
情况四:如果(3)后有return语句,处理顺序(1)(2)(3)(5)
情况五:如果遇到System.exit(),则(5)不执行
允许的处理方式:
(1)try……catch()
(2)try……finally // 与throws配置使用
(3)try……catch…….finally
(4)try……catch(){} catch(){}…… // 配合多个catch,范围大的要写后面

throw与throws区别

throw 抛出 异常对象 代码中
throws 声明抛出 异常类型 方法声明后面
throw如果执行了则一定抛出某种异常,而throws表示可能出现。
编程建议:
1、编程时对可能出现异常的部分用try{…}catch{…}去捕捉并进行处理;
2、如果系统异常可以什么都不做,也可以针对方法抛出一个异常,但建议针对方法写一个throws,因为在完成大型任务时可以让别的程序员知道这里会出现什么异常。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值