(一)编译型语言和解释型语言
首先我们区分这样一个概念,编译型语言和解释型语言。我们编程用的都是高级型语言(写汇编和机器语言的除外),计算机只理解和运行机器语言,所以必须把高级语言翻译成机器语言计算机才能运行高级语言编写的程序。翻译方式有编译和解释。编译需要一个专门的编译过程,通过编译系统把高级语言翻译成机器语言,然后就可以直接运行*.exe文件了,如c/c++语言等都是典型的编译型语言。
解释型语言则不同,解释型语言在运行的时候才翻译,专门有一个解释器能将解释型语言翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。如VB、python语言。
java是一种编译型-解释型语言,它同时具备了编译型语言和解释型语言的特征,追本溯源,其实java就是解释型语言,它的编译特征就是把*.java文件转化为*.class文件,并不是像c一样直接编译成机器语言,而jvm对*.class文件的翻译则是解释型的。字节码文件被加载到内存中去,读出一条指令,翻译一条,运行一条,这个过程是解释型的,这个过程是java虚拟机完成的。java开发工具JDK提供了两个很重要的命令来完成上面的编译和解释(翻译)过程。两个命令分别是java.exe和javac.exe,前者加载java类文件,并逐步对字节码文件进行编译,而另一个命令则对应了java语言的解释(javac.exe)过程。在次序上,java语言是要先进行编译的过程,接着解释执行。
(二)动态语言与静态语言
动态语言在运行时才去做数据类型检查,永远不用指定数据类型,第一次赋值时会在内部记录数据类型,如python、Ruby都是典型的动态语言。
静态语言在编译的时候就会检查,写程序时要声明数据类型,如c/c++,java都是静态的。
(三)强类型语言与弱类型语言
强类型的数据类型是不会变的,如果不经过强制转换,那么它就永远是这个数据类型了。而弱类型的是数据类型可以被忽略的语言。
综上如python就是一门动态解释型的强类型定义语言,java就是一门静态编译型-解释型的强类型定义语言。