一、面向对象和面向过程比较
面向过程:自顶而下的编程模式
把问题分解成一个一个步骤,每个步骤用函数实现,一次调用即可。案例:冒泡排序
面向对象:将事物高度抽象化的编程模式
将问题分解成一个一个步骤,对每个步骤进行相应的抽象,形成对象,通过不同对象之间的调用,组合解决问题。
二、面向对象三大基本特征和五大基本原则
1、三大基本特征:
1.1 封装
1.2 继承
继承的根本原因是能复用;实现的根本原因是需要定义一个标准。
1.3 多态(动态多态)
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
必要的三个条件:
a.有类继承或者接口实现
b.子类要重写父类的方法
c.父类的引用指向子类的对象
有一种说法是多态分动态多态和静态多态,认为java中的函数重载(方法名一样,但是参数不一样)是一种静态多态。
补充:重写VS重载
重载是一个编译期的概念,重写是一个运行期的概念。
重载是在编译期就决定使用哪个方法,重写是在运行期才引用变量所指向的实际对象的类型来掉员工方法。
2、五大基本原则
2.1 单一职责原则
一个类只干一件事
2.2 开放封闭原则
开放扩展,封闭修改
2.3 Liskov替换原则
子类可以替换基类,但是基类不一定能替换子类。如果违反了Liskov替换原则,则一定违反开放封闭原则。
2.4 依赖倒置原则
依赖于抽象
2.5 接口隔离原则
使用多个小的专门的接口,而不要使用一个大的总接口。
分离手段:
a. 委托分离。通过一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是回增加系统的开销。
b.多重继承分离。通过接口多继承来实现客户的需求。
三、平台无关性
在计算机上的运行不受平台的约束,一次编译,到处执行。
对于java开发者来说,Java减少了开发和部署到多个平台的成本和时间。真正的做到一次编译,到处执行。
1、编译原理基础
主要角色有Java语言规范、Class文件、Java虚拟机(JVM)等。
Java语言规范:通过规定Java语言中基本数据类型的取值范围和行为。
Class文件:所有Java文件要编译成统一的Class文件。
Java虚拟机:通过Java虚拟机将Class文件转成对应平台的二进制文件等。
Java的平台无关性是建立在Java虚拟机的平台有关性基础之上的,是以为Java虚拟机屏蔽了底层操作系统和硬件的差异。
编译流程:
2、语言无关性
真正和虚拟机交互的是Clss文件,虚拟机并不关心字节码是那种语言编辑而来的,所以现在已经出现Java之外打批在JVM上运行的语言。
现在加上java有10中语言可以在JVM上运行:Kotlin、Groovy(Apache)、Scala、Jruby、Jython、Fantom、Clojure、Rhino、Ceylon、Java
建议学习:Groovy、Scala、Kotlin
三、Java中的值传递(java中没有引用传递)
此结果未完全理解,故只列出名词定义。
1、形参和实参
形式参数:在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。
实际参数:再调用函数时,主调函数和被调函数之间有数据传递关系,在主调函数中调用一个函数时,函数名后面括号中的参数成为“实际参数”。
2、值传递,引用传递
值传递:在调用函数时将实际参数复制一份传递到函数中,在函数中对参数进行修改不会影响实际参数。
引用传递:在调用函数时将实际参数的地址直接传递到函数中,在函数中对参数进行修改将影响实际参数。
共享对象传递:特殊的值传递
求值策略:
变成语言中需要进行方法间的参数传递,这个传递的策略叫做求值策略。