java是编译型的还是解释型的
解决方案 »
- 再次发贴 有关mouseRelease方法的问题
- 基于java的浏览器
- 如何使用FC7自带的jdk
- SWING对象怎么转换为byte[]数组????
- java排序方法?
- 如何在电脑上运行jar像运行EXE文件一样?
- 大家来帮我看看这两个"类型转换"的程序
- 请教:如何在模板图片上动态写字,然后生成一个新的图片文件?
- 请教,关于JAVA中变量的作用域的问题!
- 寻visibroker for java 4.51 的注册码?
- <property name="cronExpression" value="3/10 * * * * ?" />这个是啥意思啊
- 我使用了TableCellRenderer 但是在table中无法选中行了,怎么解决?高手来
.class需要jvm解释(+JIT技术编译),执行。
一、你可以说它是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。
二、你可以说它是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了。
三、但是,现在的JVM为了效率,都有一些JIT优化。它又会把.class的二进制代码编译为本地的代码直接运行,所以,又是编译的
如果解释的定义是这样,那Java绝对是编译型语言。因为,第一:Java首先被编译成了字节码,第二:字节码在执行时也不是翻译一句执行一句,而是全部翻译完成并加载入内存之后才开始执行(这个过程中JVM会进行代码优化)。所以,Java是编译型语言。
2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
6、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。 9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
10、Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
11、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
1.class不是机器语言,是经过编码的8位字节二进制流,它是由jvm加载后解释的。
2.不同的平台下虚拟机的细节实现是不同的,所以才能适应不同的平台。
但是, 硬要在解释型语言来分出个高下, 他又比Script一路的会快一点点. 比如是老牌的basic for dos, 一句一句的从原代码Parse过去, 在轮到语义, Parse的过程是很慢的. 但是, 如果已经生成中间语言了, 如.class文件, 那就不再需要Parse原文件啦. 这时候, 可以高速地一条一条地执行中间语言, 所以, java又快些.这还是编译理论.
然而, 他是解释型还是编译性的又有什么关系呢? 咱们就一打工的, 怎么写java都只是人的一条狗, 这条狗和名叫c的那条狗无论怎么分, 最后都可以归结为一条食屎狗, 管他呢.
从.java源代码到.class文件是编译
运行class文件是解释执行的。
那应该就是解释型的吧,不然编译型的肯定不能只是一次编译呀
JAVA绝对不会对字节码读入一句执行一句(这是解释执行的特点)。
而是在运行前即时编译成本地码,这个过程完全是编译型的。
java的编译+解释
其中:javac.exe 是java的编译器,编译之后生产.class 的字节码文件
java.exe 是java 的解释器,可以直接运行结果的
然后在执行的时候,通过加载这些字节码来执行