Java基础语法(== 与 equals的区别、异常)
一、== 与 equals的区别
1、基本数据类型
如果是基本数据类型,是用==来判断二边的值是否相同,不能用equals.因为equals有些场景是要用到判断对象的地址,然后基本数据类型不是实例化出来的对象
2、包装类
如果包装类的类型 == 是比较地址值 equals是比较内容.
equals不能重写. 点eq 看源码
public boolean equals(Object obj) { if (obj instanceof Integer) { return value ==((Integer)obj).intValue(); } return false; }
3、String类型
如果是String 类型,== 是比较二边的地址值,equals是比较二边的内容是否相等。
Equals不能重写.
点eq 看源码
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
4、new出来的内容
如果是new出来的内容.==是比较地址值,equals是Object提供的方法
默认也是比较地址值。
public boolean equals(Object obj) { return (this == obj); }
但是可重新
//重写equals. obj是传入的参数,在obj传入之前,自己也有对象. public boolean equals(Object obj){ if(obj==null){ return false; } if(this==obj){//同一个地址,就是同一个对象 return true; } if(obj instanceof UserA){//判断传入的对象是不是UserA class实例化出来的 UserA o= (UserA) obj; //按照需求重写. return this.id==o.id && this.name==o.name; } return false; }
二、异常
1、异常机制
异常机制:是指当程序编译或运行出现风险 或出现错误时,程序处理的机制.
异常为程序提供了安全处理通道,异常处理正常,程序是正常运行的。
如果有异常没有正确处理,会导致程序无法执行。
程序错误:
- 编译错误,原因是语法,位置,顺序。比如 静态调用非静态的属性。
- 运行错误:运行程序时,发生错误.
- 逻辑错误: 程序没有按照预计的效果或逻辑执行。
所有的异常和错误,都是从Throwable开始
–error:错误,是程序无法处理的,表示运行时无法正常向下运行的。
–Exception:异常:程序存在的风险,只要引导和处理正常,程序是可以向下正常运行的。
子类:
–IoException
–ClassNotFondException
–RuntimeException
…
异常分类:
-
运行时异常:编译时是正常的,当程序执行时,当由数据或逻辑导致的风险,通过try catch 或throws 抛出异常,能正常运行的。比如 nullPointException、arrayIndexOutOfBoundsException 数组下标过界异常.
-
非运行异常:也叫编译异常,在写完代码,还没有运行之前,由于语法,或代码顺序,或结构导致程序不能编译通过。javac编译不了,在开发工具中会出现标红。如果不处理,程序不能运行下去.
从编译器处理的角度,又分:
-
可查异常:编译器要求必须要处理的异常,不处理,不会向下接着执行。
-
不可查异常:编译器不会要求强制处理的异常。比如RuntimeException
2、异常处理
-
捕获异常:尝试着自己去处理
Try…catch…finally.
Try{
//可能要发生的异常
//要接着运行的业务代码
}catch(异常类 e){
//放一些异常打印信息,方便捕获.
E.print()…打印出异常有关的信息
System.out.println(“xx”)–自己写打印也可以的
}catch(异常类 e){//catch可有多个子句,并catch要得先有try存在.
//放一些异常打印信息,方便捕获.
F.print()…打印出异常有关的信息
System.out.println(“xx”)–自己写打印也可以的
finally{
//最终,程序都会执行的,不管上面有没有风险,有没有错误,也不管什么错误。
并如果代码块中有return,此处代码是在 return 之前执行.
希望finally这块代码不执行:
1 system.exit(0) jvm退出了,程序结束了
2 cpu死了或关了
3 程序所在的线程停止。
}
Try{
}catch(){ //同级
}catch(){
}
比如io异常,也是空指针异常.
Try{
Try{
} catch(){
}
}catch(){ //不同级
}catch(){
} -
抛出异常:throws 抛出异常给上级去处理。让jvm或父类去处理.
Error错误与Exception区别
-
error是程序中的运行的错误,要通过修改程序或调整设备(因为有些项目中的程序是和网络,内存 数据库有关的)
-
exception 异常,是程序的可能存在的风险,只要处理得当,只能正常运行的。
finally可省,看业务。
常见异常:
- RuntimeException 运行时异常
- NullPointerException 空指针异常
- ArithmeticException 算术异常
- InputMismatchException 输入匹配异常
- ParseException 格式异常
- ArrayIndexOutOfBoundsException数组越界异常
e.printStackTrace(); 打印出异常信息,
Return是指此方法执行完,最后一个结果返回出来。
三、感谢阅读
这些是老师上课写的笔记,因为很多东西都是口述讲解,笔记不全面,没有时间整理,但是代码是全的,笔记目的用于自己复习使用,各位看官能看就看,看不懂就没办法咯。有其他系列的是整理的完整版的,大家可以去看看。
本文地址:https://blog.csdn.net/m0_46394124/article/details/107698818
上一篇: 从BIO和NIO到Netty入门
下一篇: Java HTTP请求接口返回值乱码