继承
this
关键字有两个用途
- 引用隐式参数
- 调用该类其他的构造器。
super
关键字也有两个用途
- 调用超类的方法
- 调用超类的构造器
动态绑定(调用对象方法执行过程)
- 编译器查看对象的声明类型和方法名。
- 接下来,编译器将查看调用方法是提供的参数类型。如果没有找到与参数类型匹配的方法,或者发现经过类型装换后有多个方法与之匹配,就会报告一个错误。
至此,编译器疑已获得需要调用的方法名字和参数类型。
TIPS:方法的名字和参数列表称为方法的签名
- 如果是
private
方法,static
方法、final
方法或者构造器,那么编译器将可以准确地知道应该调用哪种方法,这种称为静态绑定。 - 当程序运行时,并且采用动态绑定调用方法时,虚拟机一定调用与x所引用对象的实际类型最合适的那个类的方法。
每次调用方法都要进行搜索时间开销相当大,所以虚拟机会预先为每个类创建了一个方法表。
阻止继承
将方法或类声明为
final
主要目的是:确保他们不会出现在子类中改变语义。
控制可见性的4个访问修饰符
- 仅对本类可见———private
- 对所有类可见———public
- 对本包和所有子类可见——protected
- 对本包可见——默认,不需要修饰符
反射
反射机制作用:
- 在运行中分析类的能力
- 在运行中查看对象,例如,编写一个tostring的方法供所有类使用
- 实现通用的数组操作代码。
- 利用Method对象
未完待续。。
参考链接:
Java基础与提高干货系列——Java反射机制
深入解析Java反射(1) - 基础
接口与内部类
标签(空格分隔): java学习笔记
接口
- 接口绝不能含有实例域,也不能在接口中实现方法。
- 提供实例域和方法实现的任务应该由实现接口的那个类来完成。
让类实现接口的步骤p216:
- 将类声明为实现给定的接口
- 对接口中的所有方法进行定义
每个类可以实现多个接口
异常、断言、日志和调试
标签(空格分隔): java学习笔记
异常分类
java异常层次结构
所有的异常都是从Throwable继承而来
派生于Runtime Exception的异常通常包涵下面几种情况
- 错误的类型转换
- 数组访问越界
- 访问空指针等
太多了,看书。。。
泛型
泛型很像C++中的模板。
局限性p539
- 不能用基本类型实例化类型参数
- 运行时类型查询只适用于原始类型
- 不能创建参数化类型的数组
- Varargs警告
p540
- java不支持泛型类型的数组
- 不能实例化类型变量
- 泛型类的静态上下文中类型变量无效(原文:Type Variables Are Not Valid in Static Contexts of Generic Classes)
- 不能抛出或捕获泛型类的实例
- 注意擦除后的冲突