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、异常机制

异常机制:是指当程序编译或运行出现风险 或出现错误时,程序处理的机制.

异常为程序提供了安全处理通道,异常处理正常,程序是正常运行的。

如果有异常没有正确处理,会导致程序无法执行。

程序错误:

  1. 编译错误,原因是语法,位置,顺序。比如 静态调用非静态的属性。
  2. 运行错误:运行程序时,发生错误.
  3. 逻辑错误: 程序没有按照预计的效果或逻辑执行。

所有的异常和错误,都是从Throwable开始

–error:错误,是程序无法处理的,表示运行时无法正常向下运行的。

–Exception:异常:程序存在的风险,只要引导和处理正常,程序是可以向下正常运行的。
子类:
–IoException
–ClassNotFondException
–RuntimeException

异常分类:

  1. 运行时异常:编译时是正常的,当程序执行时,当由数据或逻辑导致的风险,通过try catch 或throws 抛出异常,能正常运行的。比如 nullPointException、arrayIndexOutOfBoundsException 数组下标过界异常.

  2. 非运行异常:也叫编译异常,在写完代码,还没有运行之前,由于语法,或代码顺序,或结构导致程序不能编译通过。javac编译不了,在开发工具中会出现标红。如果不处理,程序不能运行下去.

从编译器处理的角度,又分:

  1. 可查异常:编译器要求必须要处理的异常,不处理,不会向下接着执行。

  2. 不可查异常:编译器不会要求强制处理的异常。比如RuntimeException

2、异常处理

  1. 捕获异常:尝试着自己去处理
    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(){
    }
  2. 抛出异常:throws 抛出异常给上级去处理。让jvm或父类去处理.
    在这里插入图片描述

Error错误与Exception区别

  1. error是程序中的运行的错误,要通过修改程序或调整设备(因为有些项目中的程序是和网络,内存 数据库有关的)

  2. exception 异常,是程序的可能存在的风险,只要处理得当,只能正常运行的。

finally可省,看业务。

常见异常:

  1. RuntimeException 运行时异常
  2. NullPointerException 空指针异常
  3. ArithmeticException 算术异常
  4. InputMismatchException 输入匹配异常
  5. ParseException 格式异常
  6. ArrayIndexOutOfBoundsException数组越界异常

e.printStackTrace(); 打印出异常信息,

Return是指此方法执行完,最后一个结果返回出来。

三、感谢阅读

这些是老师上课写的笔记,因为很多东西都是口述讲解,笔记不全面,没有时间整理,但是代码是全的,笔记目的用于自己复习使用,各位看官能看就看,看不懂就没办法咯。有其他系列的是整理的完整版的,大家可以去看看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值