第2章:程序设计语言
在源程序中,可由用户(程序员)为变量、函数和数据类型等命名。
脚本语言一般运行在解释器或虚拟机中,便于移植,开发效率较高。
变量是计算机内存单元的抽象,在程序中表示数据,具有名称、类型、值、地址、作用域、存储类别等属性,其值在运行过程中由指令进行修改。
常量也用于在程序中表示数据,但常量在程序运行过程中不能修改,常量也具有类型,如整型常量、浮点型常量、字符串常量等,也称为字面量或文字
编译和解释是语言处理的两种基本方式。编译过程包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段,以及符号表管理和出错处理模块。 解释过程在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的内部形式。 这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;而在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。解释器翻译源程序时不产生独立的目标程序,而编译器则需将源程序翻译成独立的目标程序。
编译是将高级语言源程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。反编译通常不能把可执行文件还原成高级语言源代码,只能转换成功能上等价的汇编程序。
事实上,脚本语言都是动态语言,而动态语言都是解释型语言,不管它们是否是面向对象的语言。
动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。程序运行过程中,把丽数(或过程)调用与响应调用所需要的代码相结合的过程称为动态绑定。
静态绑定是指在程序编译过程中,把函数(方法或者过程)调用与响应调用所需的代码结合的过程称之为静态绑定。
Java程序设计
1)抽象类
抽象类通过关键字abstract实现,抽象类的目的是定义一个框架,规定某些类必须具有的一些 共性。包含抽象方法的类一定是抽象类,所谓抽象方法是指没有函数体的方法。抽象类的直接 派生类必须实现其抽象方法,抽象类只能用于继承,不能创建对象。
2)接口 接口用关键字interface声明,只能用于继承。注意:此时关键字为implements(实现)。接口用 于替代多继承的概念,能实现多继承的部分特点,又避免了多继承的混乱,还能起到规定程序 框架的作用。注意:接口也可以用于多态。直接继承了接口的类,必须实现接口中的抽象方法 间接的则可以实现,也可以不实现。
3)抽象类与接口的异同 接口和抽象类都不能创建对像 抽象类不能参与多继承,抽象类可以有非静态的成员变量,可以有非抽象方法。 接口可以参与多继承,所有属性都是静态常量,所有方法都是public抽象方法。
Java是即时编译程序栈空间:当我们在创建一个变量时,在栈空间中会开辟一个空间来存放变量的类型和变量名。
当我们在给基本数据类型赋值时他的值同样也是存放在栈空间中,而在给引用类型赋值时,变量名时存放在栈空间中而数据时存放在堆空间中。
堆空间:当我们创建的变量类型不是基本数据类型而是引用类型的数据时,就要用到堆空间,所以堆空间在java
中存放的数据是引用类型的数据比如:数组、字符串、对象。
在C/C++语言的编译过程中,源代码会经过以下步骤来形成可执行程序: 1、预处理:预处理器会处理源代码中的预处理指令,如#include、#define等。 2、编译:编译器会将预处理后的代码转换为汇编语言。 3、汇编:汇编器会将编译生成的汇编代码转换为机器语言的目标文件。 4、链接:链接器会将多个目标文件以及必要的库文件链接起来,形成最终的可执行程序。
词法分析阶段依据语言的词法规则,对源程序进行逐个字符地扫描,从中识别出一个个“单词”符号,主要是针对词汇的检查。 语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序” 等。语法规则就是各类语法单位的构成规则,主要是针对结构的检查。 语义分析阶段分析各语法结构的含义,检查源程序是否包含语义错误,主要针对句子含义的检查。
编译器把源程序先翻译,得到目标代码。最后由机器直接执行。 整个过程运行效率高,但是只适合特定的机器,所以可移植性差。
函数调用与函数本身的关联,以及成员访问与变量内存地址之间的联系,称为绑定。在计算机语言中有两种主要的绑定方式,即静态绑定和动态绑定。静态绑定发生于数据结构和数据结构间,程序执行前,有编译时绑定,通过对象调用,因此不能运用任何运行期的信息。它针对函数调用与函数的主体,或是变量与内存中的区块:动态绑定则是运行时绑定,通过地址实现,只用到运行期的可用信息。题目中把调用和响应调用所需执行的代码加以结合发生在编译后,因此属于动态绑定