Java基础知识复习

1、计算机中常用的单位
字节:Byte (B)
比特:bit (b)
1 字节 == 8 位

2、oop(面向对象)的特点
面向对象引入封装、继承、多态性等概念来建立一种对象层次结构,用来模拟公共行为的一个集合

3、三大特性
封装:隐藏了内部类的实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据,对于外部而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法

继承:继承是为了重用父类代码。两个类若存在is-a 的关系就可以使用继承。同时继承也为实现多态做了铺垫。
多态:对于面向对象而言,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参列表的不同来区分不同的函数,通过编译之后会变成两个不同的函数。运行时多态是动态的,它是通过动态绑定实现的,也就是我们常说的多态性。

4、动态绑定和静态绑定
把一个方法与其所在的类/对象关联起来叫做方法的绑定。绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)。
静态绑定(前期绑定)是指:在程序运行前就知道方法是属于哪个类的,在编译的时候就可以直接连接到类中,定位到这个方法。
在Java 中,final,private, static 修饰的方法以及构造方法都是静态绑定的。
动态绑定(后期绑定)是指:在程序运行过程中,根据具体的实例对象才能具体确定调用的是哪个方法。
动态绑定是多态性得以实现得出重要因素,它通过方法表来实现:每个类被加载到虚拟机时,在方法区保存元数据,其中包括一个叫方法表的数据结构,方法表里面记录了这个类定义的方法的指针,每个指针指向一个具体的方法代码。如若这个类重写了父类的某个方法,则方法表里面的指针会执行新的代码实现处。从父类继承的方法位于子类定义的方法的前面。
动态绑定得出编译,运行原理:
(1、编译阶段
我们知道,向上转型时,用父类引用执行子类对象,并且可以用父类引用调用子类中重写了的同名方法。但是不能调用子类中国新增的方法,为什么呢?
在代码编译阶段,编译器通过声明对象的类型(即引用本身的类型)在方法区中该类型的方法表中国查找匹配的方法(最佳匹配法:参数类型最接近的被调用),如果有则编译通过。(这里是根据声明的对象类型来查找的,因为父类方法表里面没有子类新增的方法,所以不能被调用)。编译阶段是确保方法的存在性,保证程序能顺利,安全运行。
(2、运行阶段
在实际运行 Father ft = new Son() ,这一句创建了一个Son 实例对象,然后在ft.say()时,JVM会把刚才创建的Son对象压入操作数栈,然后用它来进行调用。
接下来就是进行实例方法的调用,这个过程就是动态绑定的过程:根据实例对象的类型,去查找其对应类的方法表,找到匹配的方法进行调用。如果子类重写了父类的方法,则方法表中,同名表项会指向子类的方法代码,若无重写,则按照父类中方法表的顺序保存在子类方法表中。故此:动态绑定根据对象的类型的方法表查找方法是一定会匹配的。

静态分派
在编译期间,可以根据变量的类型确定方法执行的版本的动作称之为静态分派。典型的实现是方法重载。
动态分派
在编译期间无法确定方法执行的版本,只有在方法调用时,根据对象的实际类型才能确定方法执行版本的分派动作称之为动态分派。典型的实现是方法重写。
动态分派的实现:
类在方法区中有一个方法表,方法表中存放着各个方法的实际入口地址,如果某个方法在子类没有被重写,那么子类的虚方法表里面的地址入口和父类相同方法的地址入口是一致的,都指向父类的实现入口。如果子类中重写了这个方法,子类方法表中的地址将会替换为指向子类的实现入口。

方法的接收者和方法的参数统称为方法的宗量。根据分派基于宗量多少(接收者是一个宗量,参数是一个宗量),可以将分派分为单分派和多分派。

单分派:是指根据一个宗量就可以知道调用目标(即知道应该调用哪个方法)
多分派:需要根据多个宗量才能确定调用目标。

5、基础规范
Java 命名规则:标志符由字母、数字、下划线、美元符号或者人民币符号组成,并且首字母不能是数字。
6、访问控制符范围
public:类内部、本包,子类,外部包
protected:类内部,本包、子类
default:类内部,本包
private:类内部

猜你喜欢

转载自blog.csdn.net/weixin_43352448/article/details/87913677
今日推荐