多态习题小结
- 调用属性看编译类型,调用方法看运行类型
java的动态绑定机制(重要)
- 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
- 当调用对象属性时,没有动态绑定机制,哪里声明哪里使用(在哪个类里调用就用哪个类里的属性)
- 简而言之,只要是调用方法,先去看运行类型是否有,如果有,直接使用;若没有,再找编译类型
多态的应用
-
多态数组
数组的定义类型为父类类型,里面保存的实际元素类型为子类类型
-
多态参数
方法定义的形参类型为父类类型, 实参类型允许为子类类型
Object类详解
-
equals方法
- equals方法是Object类中的方法只能判断引用类型(可以查看jdk源码)
- 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等
-
== 是一个比较运算符
- ==:既可以判断基本类型,又可以判断引用类型
- ==:如果判断基本类型,判断的是值是否相等
- ==:如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
-
hashCode方法
- 提高具有哈希结构的容器的效率
- 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的
- 两个引用,如果指向的是不同对象,则哈希值是不一样的
- 哈希值主要根据地址号来的!不能完全将哈希值等价于地址
- hashCode也可以重写
-
toString方法
- 基本介绍:默认返回全类名(包名+类名)+@+哈希值的十六进制,子类往往重写toString方法,用于返回对象的属性信息
- 重写toString方法,打印对象或拼接对象时,都会自动调用该对象的toString形式
- 当直接输出一个对象时,toString方法会被默认的调用
-
finalize方法(面试用)
-
当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作
-
什么时候被回收: 当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用finalize方法。
Car car = new Car(); car = null; //此时Car对象没有引用,就是垃圾,垃圾回收器就会回收(销毁)对象,在销毁对象前,会调用该对象的finalize方法,程序员就可以在finalize方法中,写自己的业务逻辑代码(如释放资源:数据库连接,或者打开文件。。。)如果程序员不重写,就会调用Object类的finalize,即默认处理,如果程序员重写了finalize,就可以实现自己的逻辑 //有了垃圾不会立马回收,不是实时监控
-
垃圾回收机制的调用,是由系统来决定(即有自己的GC算法),也可以通过System.gc()主动触发垃圾回收机制(不一定调用成功)
-
-
断点调试
-
排错
-
在断点调试中,是运行状态,是以对象的运行类型来执行的
-
断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。进行分析从而找到这个Bug
-
断点调试是程序员必须掌握的技能。
-
断点调试也能帮助我们查看java底层源代码的执行过程,提高程序员的Java水平。
-
快捷键:F8逐行执行代码
F7(跳入)
F8(跳过)
shift+F8(跳出)
F9(resume,执行到下一个断点)
F7: 跳入方法内
F8: 逐行执行代码.
shift+F8: 跳出方法
-