1.多态:
意义:
同一个对象被造型为不同的类型时,有不同的功能----------所有的对象都是多态的
同一类型的引用指向不同的对象时,有不同的实现----------所有抽象方法都是多态的
向上造型:
超类型的引用指向派生类的对象(前面时超类型,后面时派生类型)
能点出来什么,看引用的类型
能向上造型的类型有:超类+所实现的接口
强制类型转换,成功的条件有如下两种:
引用所指向的对象,就是该类型
引用所指向的对象,实现了该接口或继承了该类型
强转时若不符合如上条件,则发生ClassCastException类型转换异常
建议再强转之前一定要通过instanceof来判断引用所指向的对象是否是该类型
2.内存管理:由JVM来管理的
堆:
存储的是new出来的对象(包括实例变量,数组的元素)
垃圾:没有任何引用所指向的对象
垃圾回收器(GC)不定时到堆中清扫垃圾,回收过程是透明的(看不到的),并不一定,已发现垃圾就立刻回收,通过System.gc()建议虚拟机尽快调度GC来回收
实例变量的声明周期:
在创建对象时存储在堆中,对象回收时一并被回收
内存泄漏:不再使用的对象还没有被及时的回收,严重的泄漏会导致系统的崩溃
建议:
不再使用的对象应及时将引用设置没null
栈:
存储正在调用的方法中的局部变量(包括方法的参数)
调用方法时会在栈中为该方法分配一块对应的栈帧,栈帧中存储局部变量(包括方法的参数),方法调用结束时,栈帧被自动清除,局部变量一并被清除
局部变量的声明周期:
调用方法时存储在栈中,方法调用结束时与栈帧一并被清除
方法区:
存储.class字节码文件(包括静态变量,所有方法)
方法只有一份,通过this来区分具体的调用对象
3.面向对象三大特征总结:-------------------重要知识点
封装:
类:封装的是对象的属性和行为
方法:封装的是具体的业务逻辑功能实现
访问控制修饰符:封装的是具体的访问权限
继承:
作用:代码复用
超类:所有派生类所共有的属性和行为
接口:部分派生类所共有的属性和行为
派生类:派生类所特有的属性和行为
单一继承、多接口实现、具有传递性
多态:
所有对象都是多态的-------------通过向上造型来体现的
所有抽象方法都是多态的--------通过方法的重写来体现的
向上造型、强制类型转换、instanceof判断
4.String:字符串类型
java.lang.String使用finel修饰,不能被继承
String的底层封装的是一个字符数组
String在内存中采用Unicode编码格式,每个字符占用两个字节空间
字符串一旦创建,对象内容永远无法改变,但字符串引用可以重写赋值(指向新的对象)
5.字符串常量池:
java对String字符串有一个优化措施:字符串常量池(堆中)
java推荐我们使用字面量/直接量的方式来创建对象,并且会缓冲所有以字面量形式创建的字符串对象到常量池中,当使用相同字面量再创建对象时将会复用常量池中的对象,以减少内存开销。
注意:
只有使用字面量方式创建的对象,才会存储再字符穿常量池中