java基础复习

java基础复习

​ 1、 swith注意事项:

swith(表达式){
	case 常量1:
		代码块;
		breakcase 常量2:
		代码块;
		breakdefault:
		代码块;
}
  • 表达式的数据类型,应和case后的常量的数据类型保持一致,或者可以自动转换为可以相互比较的类型,比如输入的是字符而常量是int类型。
  • swith(表达式)中表达式的返回值必须是(byte、short、int、charenum[枚举类型]、String)。不支持double类型。
  • case子句中的值必须是常量(1,‘a’),不能是变量。
  • default 子句是可选的(不是必须的),当没有匹配的case时、执行default;
  • break用来跳出swith语句,如果没有,就会据需依次执行下面的语句,除非遇到break。

swith和if语句的比较:

  • 如果判断语句数量不多,而且符合byte、short、int、char、enum、String这六种类型,建议使用swith语句。
  • 对区间的判断,对结果为boolean 类型判断,使用if,if使用的使用范围更广。

面向对象编程-继承(extends)

  1. 继承的本质:

    当子类对象创建好后,建立了查找关系。

    按照查找关系来返回信息:(子类不能访问父类中私有属性,可以通过父类中提供的方法来访问)

    • 首先看自来中是否有该属性。
    • 如果有这个属性,并且是可以访问的,则返回信息。
    • 如果子类没有该属性,就看父类有没有这个属性(如果父类又该属性,并且可以访问,则返回该属性信息)。
    • 如果父类中没有就按照上述规则查找,直到Object类。

    如果父类的属性age是私有的,父类的父类中的age属性是共有的,当 子类在调用age这个属性的时候,查找过程中到达父类是遇到私有的age时就会直接报错了,不会跳过一级父类取到二级父类的age属性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-csh9hWru-1666361364388)(C:\Users\86151\Documents\Notes\image-20221021164808584.png)]

  1. super的注意事项:

    • 访问父类属性时,不能访问父类中的private属

    • 在查找子类对象调用的方法时:

      cal()//调用cal方法 等价于 this.cal( )

      a. 先找本类,如果有并且可以调用,则直接调用

      b. 如果没有,到父类中查找。。。

      注意:如果查找的过程中,找到了,但是不能访问,则报错。

    • super.cal( ) 没有本类查找的过程,直接到父类中查找。

    • super 的访问不限于直接父类,如果有多个基类(上级类)都有同名的成员,使用super访问遵循就近原则。

    • super和this 的比较

    No区别点thissuper
    1访问属性访问本类属性,如果本类中没有此属性,从父类中查找访问父类属性
    2调用方法调用本类中的方法,如果没有此方法则从父类继续查找直接调用父类中的方法
    3调用构造器表用本类构造器,必须放在构造器的首行调用父类构造器,必须放在子类构造器的首行
    4特殊表示当前对象子类中访问父类对象
  2. 方法的重写/覆盖(Override):

    • 定义:子类的有一个方法,和父类的某个方法名称、返回值、参数一样,那么我们就说子类的这个方法覆盖了父类方法。

    • 重写需要满足的条件:

      1. 子类方法的参数,方法名,要和父类方法的参数和方法名完全一致。

      2. 子类方法的返回类型和父类一样,或者是父类返回类型的子类比如父类返回值类型是Object,子类方法返回类型是String

      3. 子类方法不能缩小父类方法的访问权限。

        public > protected>private

    方法的重写和重载的比较

名称发生范围方法名形参列表修饰符返回值
重载overload本类必须一样类型、个数或者顺序至少有一个不同相同相同、不相同
重写override父子类必须一样相同不能缩小父类方法的访问权限和父类一致或者是父类返回值类型的子类
  1. 多态 (方法或者对象的多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。)

    • 多态的具体体现:

      1. 方法的多态

        重写和重载就体现多态。

      2. 对象的多态(多态的核心)

        1. 一个对象的编译类型和运行类型可以不一致

        2. 编译类型在定义对象时就确定了,不能改变

        3. 运行类型是可以变化的

        4. 编译类型看定义时 = 号的 左边,运行类型看 = 号的右边。

        5. 如:

          Animal animal = new Dog( );

          (编译类型是Animal,运行类型是Dog)

          animal = new Cat();animal 的运行类型变为了Cat;

          (编译类型是Animal,运行类型是Cat)

      3. 多态的前提:两个类存在继承关系

        多态的向上转型:

        1. 本质:父类引用指向子类对象

        2. 语法:父类类型 引用名 = new 子类类型( );

        3. 特点:编译类型看左边,运行类型看右边。

          可以调用父类中所有的成员(需要遵守访问权限)不能调用子类中特有的成员;

          能调用那些成员由编译类型来决定;

          具体运行效果看子类具体实现。

        多态的向下转型:

        1. 语法 子类类型 引用名 = (子类类型) 父类引用

    多态注意事项:

    属性没有重写之说,属性的值看编译类型。

    instanceOf 比较操作符,由于判断对象的类型是否为XX类型的子类型

  2. JAVA的动态绑定机制(dynamic [dai`naemik])

    • java重要特性:动态绑定机制
      1. 当调用对象方法时,该方法会和该对象的内存地址/运行类型绑定
      2. 当调用对象属性时,没有动态绑定机制,哪里声明哪里声明哪里使用

    多态的应用:多态数组:数组定义的存储类型为父类类型,实际存储元素类型为子类类型。

    ​ 多态参数:方法定义的形参类型为父类类型,实参类型允许为子类类型。

  3. == 和 equals对比

    • == 既可以判读基本数据类型,又可以比较引用类型;
    • == 用来判断基本数据类型时,判断的是值是否相等;
    • == 用来判断引用类型时,判断的是这两个引用类型的地址的hashCode值是否相同,即判断是否是同一个对象。、
    • equals 是Object中的方法,只能判断引用类型。
    • equals 默认判断的是地址是否相等,子类往往重写该方法,用于判断内容是否相等,比如:Integer、String

    Object类中的equals实现方式:(源码)

    public boolean equals(Object obj) {
        return (this == obj);
    }
    

    底层也是使用了 == 来判断地址是否相等。

    Integer 中的equals 实现方式:(源码)

    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            //先判断是否是Integer类型
            return value == ((Integer)obj).intValue();
            //判断值是否相等
        }
        return false;
    }
    

    Integer 中是重写了该方法,用于判断内容(值)是否相等。

    String中的equals方法:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    return (anObject instanceof String aString)
        && (!COMPACT_STRINGS || this.coder == aString.coder)
        && StringLatin1.equals(value, aString.value);
}

比较的也是内容是否一致相等。

  1. hashCode方法:
  • 提高具有哈希结构容器的效率
  • 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的
  • 两个引用,如果指向的是不同对象,则哈希值是不一样的
  • 哈希值主要根据地址号来的。不能完全将哈希值等价于地址
  • 在集合中,hashCode 如果有需要,会重写该方法。
  1. toString方法:
  • 默认返回:全类名+@+哈希值的16进制
  • 子类往往重写toString 方法,用于返回对象的属性信息
  • 重写toString时,打印对象或者凭借对象时,都会自动调用该对象的toString形式
  • 当直接输出一个对象时,toString 方法会默认的调用
  1. finalize 方法:
    • 当对象被回收时,系统自动调用该对象的finalize 方法。子类可以重写该方法,做一些释放资源的操作。(资源:数据库的连接、打开的文件。。)
    • 什么时候被回收:当一个对象没有任何引用时,jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁对象,在销毁对象,会先调用finalize 方法。
      的toString形式
  • 当直接输出一个对象时,toString 方法会默认的调用
  1. finalize 方法:
    • 当对象被回收时,系统自动调用该对象的finalize 方法。子类可以重写该方法,做一些释放资源的操作。(资源:数据库的连接、打开的文件。。)
    • 什么时候被回收:当一个对象没有任何引用时,jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁对象,在销毁对象,会先调用finalize 方法。
    • 垃圾回收机制的调用,是由系统来决定的,也可以通过System.gc()主动触发垃圾回收机制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值