java基础复习
1、 swith注意事项:
swith(表达式){
case 常量1:
代码块;
break;
case 常量2:
代码块;
break;
default:
代码块;
}
- 表达式的数据类型,应和case后的常量的数据类型保持一致,或者可以自动转换为可以相互比较的类型,比如输入的是字符而常量是int类型。
- swith(表达式)中表达式的返回值必须是(byte、short、int、char、enum[枚举类型]、String)。不支持double类型。
- case子句中的值必须是常量(1,‘a’),不能是变量。
- default 子句是可选的(不是必须的),当没有匹配的case时、执行default;
- break用来跳出swith语句,如果没有,就会据需依次执行下面的语句,除非遇到break。
swith和if语句的比较:
- 如果判断语句数量不多,而且符合byte、short、int、char、enum、String这六种类型,建议使用swith语句。
- 对区间的判断,对结果为boolean 类型判断,使用if,if使用的使用范围更广。
面向对象编程-继承(extends)
-
继承的本质:
当子类对象创建好后,建立了查找关系。
按照查找关系来返回信息:(子类不能访问父类中私有属性,可以通过父类中提供的方法来访问)
- 首先看自来中是否有该属性。
- 如果有这个属性,并且是可以访问的,则返回信息。
- 如果子类没有该属性,就看父类有没有这个属性(如果父类又该属性,并且可以访问,则返回该属性信息)。
- 如果父类中没有就按照上述规则查找,直到Object类。
如果父类的属性age是私有的,父类的父类中的age属性是共有的,当 子类在调用age这个属性的时候,查找过程中到达父类是遇到私有的age时就会直接报错了,不会跳过一级父类取到二级父类的age属性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-csh9hWru-1666361364388)(C:\Users\86151\Documents\Notes\image-20221021164808584.png)]
-
super的注意事项:
-
访问父类属性时,不能访问父类中的private属
-
在查找子类对象调用的方法时:
cal()//调用cal方法 等价于 this.cal( )
a. 先找本类,如果有并且可以调用,则直接调用
b. 如果没有,到父类中查找。。。
注意:如果查找的过程中,找到了,但是不能访问,则报错。
-
super.cal( ) 没有本类查找的过程,直接到父类中查找。
-
super 的访问不限于直接父类,如果有多个基类(上级类)都有同名的成员,使用super访问遵循就近原则。
-
super和this 的比较
No 区别点 this super 1 访问属性 访问本类属性,如果本类中没有此属性,从父类中查找 访问父类属性 2 调用方法 调用本类中的方法,如果没有此方法则从父类继续查找 直接调用父类中的方法 3 调用构造器 表用本类构造器,必须放在构造器的首行 调用父类构造器,必须放在子类构造器的首行 4 特殊 表示当前对象 子类中访问父类对象 -
-
方法的重写/覆盖(Override):
-
定义:子类的有一个方法,和父类的某个方法名称、返回值、参数一样,那么我们就说子类的这个方法覆盖了父类方法。
-
重写需要满足的条件:
-
子类方法的参数,方法名,要和父类方法的参数和方法名完全一致。
-
子类方法的返回类型和父类一样,或者是父类返回类型的子类比如父类返回值类型是Object,子类方法返回类型是String
-
子类方法不能缩小父类方法的访问权限。
public > protected>private
-
方法的重写和重载的比较
-
名称 | 发生范围 | 方法名 | 形参列表 | 修饰符 | 返回值 |
---|---|---|---|---|---|
重载overload | 本类 | 必须一样 | 类型、个数或者顺序至少有一个不同 | 相同 | 相同、不相同 |
重写override | 父子类 | 必须一样 | 相同 | 不能缩小父类方法的访问权限 | 和父类一致或者是父类返回值类型的子类 |
-
多态 (方法或者对象的多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。)
-
多态的具体体现:
-
方法的多态
重写和重载就体现多态。
-
对象的多态(多态的核心)
-
一个对象的编译类型和运行类型可以不一致
-
编译类型在定义对象时就确定了,不能改变
-
运行类型是可以变化的
-
编译类型看定义时 = 号的 左边,运行类型看 = 号的右边。
-
如:
Animal animal = new Dog( );
(编译类型是Animal,运行类型是Dog)
animal = new Cat();animal 的运行类型变为了Cat;
(编译类型是Animal,运行类型是Cat)
-
-
多态的前提:两个类存在继承关系
多态的向上转型:
-
本质:父类引用指向子类对象
-
语法:父类类型 引用名 = new 子类类型( );
-
特点:编译类型看左边,运行类型看右边。
可以调用父类中所有的成员(需要遵守访问权限)不能调用子类中特有的成员;
能调用那些成员由编译类型来决定;
具体运行效果看子类具体实现。
多态的向下转型:
- 语法 子类类型 引用名 = (子类类型) 父类引用
-
-
多态注意事项:
属性没有重写之说,属性的值看编译类型。
instanceOf 比较操作符,由于判断对象的类型是否为XX类型的子类型
-
-
JAVA的动态绑定机制(dynamic [dai`naemik])
- java重要特性:动态绑定机制
- 当调用对象方法时,该方法会和该对象的内存地址/运行类型绑定
- 当调用对象属性时,没有动态绑定机制,哪里声明哪里声明哪里使用
多态的应用:多态数组:数组定义的存储类型为父类类型,实际存储元素类型为子类类型。
多态参数:方法定义的形参类型为父类类型,实参类型允许为子类类型。
- java重要特性:动态绑定机制
-
== 和 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);
}
比较的也是内容是否一致相等。
- hashCode方法:
- 提高具有哈希结构容器的效率
- 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的
- 两个引用,如果指向的是不同对象,则哈希值是不一样的
- 哈希值主要根据地址号来的。不能完全将哈希值等价于地址
- 在集合中,hashCode 如果有需要,会重写该方法。
- toString方法:
- 默认返回:全类名+@+哈希值的16进制
- 子类往往重写toString 方法,用于返回对象的属性信息
- 重写toString时,打印对象或者凭借对象时,都会自动调用该对象的toString形式
- 当直接输出一个对象时,toString 方法会默认的调用
- finalize 方法:
- 当对象被回收时,系统自动调用该对象的finalize 方法。子类可以重写该方法,做一些释放资源的操作。(资源:数据库的连接、打开的文件。。)
- 什么时候被回收:当一个对象没有任何引用时,jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁对象,在销毁对象前,会先调用finalize 方法。
的toString形式
- 当直接输出一个对象时,toString 方法会默认的调用
- finalize 方法:
- 当对象被回收时,系统自动调用该对象的finalize 方法。子类可以重写该方法,做一些释放资源的操作。(资源:数据库的连接、打开的文件。。)
- 什么时候被回收:当一个对象没有任何引用时,jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁对象,在销毁对象前,会先调用finalize 方法。
- 垃圾回收机制的调用,是由系统来决定的,也可以通过System.gc()主动触发垃圾回收机制。