高级语言执行方式分为两种:一种是编译型,一种是解释型。
编译型:将高级语言一次性翻译成机器代码,可以脱离开发环境运行,通常运行效率比较高。但是难以移植,C/C++、Pascal属于编译型语言。
解释型:用特定的解释器对源程序逐行解释成机器代码并立即执行,不会进行整体的编译和链接处理。效率低,但是跨平台比较容易。Ruby、Python都属于解释型语言。
java语言比较特殊,他需要经过编译,但是会生成一种与平台无关的字节码(.class文件),这种字节码需要用java解析器来执行。java可以看作即是编译型也是解释型的语言。java中负责执行字节码的就是虚拟机JVM。java生成的代码不面向任何平台,它只面向虚拟机,所以只要在特定平台上安装了JVM,便可运行java程序。相同的字节码是无法在不同的平台上运行的,JVM就相当于一个转换器,它的作用如下
:
JDK包含了JRE,而JRE就包含了java虚拟机。一个空类是可以被编译通过的,但是没法被执行通过,因为java中一个类要能被JVM执行,必须要包含main方法。
java与C、C++的区别:C++中需要自己回收动态分配的内存,这样往往不安全,容易造成内存泄漏。而java具有自动的垃圾回收机制(垃圾回收成为GC),java中的内存分配和回收都是JRE在后台自动完成的。JRE会自动回收那些不再使用的内存,通常JRE会提供一条超级线程来检测和控制,让CPU在空闲时或者内存不足时进行垃圾回收。java虚拟机的堆内存存放着正在运行的应用程序所创建的所有对象,这些对象通过垃圾回收机制来回收。当一个对象不再被引用的时候,JVM的一个超级线程便会释放这个空间。垃圾回收器还会整理内存中的记录碎片,然后把整理出来的内存分配给新的对象。垃圾回收使得java比C++更加安全。为了让垃圾回收机制更快的回收垃圾,当我们的对象不再使用时,将它的引用设置为null,这样可以暗示垃圾回收机制回收该对象。程序员也可以通过调用对象的finalize()或System.gc()来让系统进行垃圾回收,但只是建议。
面向过程语言与面向对象语言的区别:面向过程语言的不够直观,与人类的思维不够一致,其适应性差,可扩展性不强,当用户需求发生改变的时候,需要修改很多模块,它的维护成本非常大。而面向对象语言更加符合人类的思维,其可重用性、扩展性、可维护性更强,适用于开发大型软件。
C或C++中允许用goto语句让程序的控制流从一处转向另一处,这样使得程序的结构十分混乱。而java中去掉了goto语句,将goto语句作为保留字(也就是现在没有goto,也许以后会有)。
面向对象的三大特征:封装、继承、多态。封装就是将对象的实现细节隐藏起来,然后用一些公用的方法将对象的功能暴露出来。多态指的是子类的对象可以赋给父类变量,但是在运行的时候能够表现出子类的特征,这意味着同一类型的对象在运行时可能表现出不同的特征。
类的封装性:将各种信息细节隐藏起来,并通过公用方法来暴露该类对外所提供的功能。
继承:类之间共享属性和操作的机制叫做继承。java只支持单继承。
类的属性就是对对象的状态的抽象,类的操作就是对对象的为的抽象。
继承:属于is-a的关系
组合:属于has-a的关系,表现为在一个类里保存另一个对象的引用。
API文档:就是用来说明每个类、方法的功能,方便编程人员的调用。用注释/** */,然后利用命令javadoc可以生成API文档.