JAVA的技术特点及运行机制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA的技术特点及运行机制相关的知识,希望对你有一定的参考价值。
2017.11.5 阴
一、Java的技术特点
Java包含了很多技术,从整体上分,Java技术可分为:Java编程语言和Java平台
Java编程语言是一种高级的编程语言,其特点有:
>简单 >结构中立
>面向对象 >健壮性
>可移植性强 >高性能
>多线程 >安全性
>动态
1、跨平台性
所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。这是软件发展的趋势和编程人员追求的目标。
之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不
同的环境里正常运行,就需要独立于这些平台。
而在Java语言中, Java自带的虚拟机很好地实现了跨平台性。 Java源程序代码经过编译后生成二进制的字节码是与平台无关的,但是可被
Java虚拟机识别的一种机器码指令。 Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得Java语言具备跨平台性。
2. 面向对象
面向对象是指以对象为基本粒度,其下包含属性和方法。对象的说明用属性表达,而通过使用方法来操作这个对象。面向对象技术使得应用程序的开发变得简单易用,
节省代码。Java是一种面向对象的语言,也继承了面向对象的诸多好处,如代码扩展、代码复用等。
3. 安全性
安全性可以分为四个层面,即语言级安全性、编译时安全性、运行时安全性、可执行代码安全性。语言级安全性指Java的数据结构是完整的对象,这些封装过的数据
类型具有安全性。编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类。运行时Java类需要类加载器载入,并经由字节码校验器校
验之后才可以运行。 Java类在网络上使用时,对它的权限进行了设置,保证了被访问用户的安全性。
4. 多线程
多线程在操作系统中已得到了最成功的应用。多线程是指允许一个应用程序同时存在两个或两个以上的线程,用于支持事务并发和多任务处理。 Java除了内置的多线程
技术之外,还定义了一些类、方法等来建立和管理用户定义的多线程。
5. 简单易用
Java源代码的书写不拘泥于特定的环境,可以用记事本、文本编辑器等编辑软件来实现,然后将源文件进行编译,编译通过后可直接运行,通过调试则可得到想要的结果。
二、Java程序的编制和运行
我们大家都知道,计算机不能直接理解源代码中的高级语言,只能直接理解机器语言,所以必须要把“我们说的话”翻译成“机器能理解的语言”,这样二者之间才能进行有效的沟通,计算机也才能执行高级
语言编写的程序。
翻译的方式有两种:一个是编译,一个是解释。两种方式只是翻译的时间不同。
作为编译型语言,Java中的所有的源程序文件被编译后,统一生成一种被称为Java字节码的中间语言,与C语言生成特定硬件和操作系统平台不同的是,Java程序编译后
生成的字节码对所有计算机是相同的。因为编译后的文件名后缀为.class,所以字节码文件又称为Java类文件。
作为解释型语言,Java源代码编译后生成的字节码文件是不能直接执行的,需要一个称为Java虚拟机(Java Virtual Machine,简称JVM)的程序翻译成本地的机器码
后才能执行。
下面请看一张图:
1、编译
Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件。好让JVM(java虚拟机)里的解释器可以正常读取。
2、运行
三步 代码的装入、代码的校验和代码的执行
2.1 、 代码的装入
JVM控制解释器中的“类装载器”去读取和装载程序所需的类(class的字节码)。然后解释器开始建立类与类之间的关系。
2.2、 代码的校验
字节码校验器进行检查:校验器可发现操作数栈溢出,非法数据类型转化等多种错误。
2.3、 代码的执行
3、执行
执行分两种情况
即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。
解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。
通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作
JVM运行Java程序的方式有两种:jar包 与 Class
运行jar 的时候,Java.exe调用GetMainClassName函数,该函数先获得JNIEnv实例然后调用JarFileJNIEnv类中getManifest(),从其返回的Manifest对象中取
getAttrebutes("Main-Class")的值,即jar 包中文件:META-INF/MANIFEST.MF指定的Main-Class的主类名作为运行的主类。之后main函数会调用Java.c中
LoadClass方法装载该主类(使用JNIEnv实例的FindClass)。
运行Class的时候,main函数直接调用Java.c中的LoadClass方法装载该类。
以上是关于JAVA的技术特点及运行机制的主要内容,如果未能解决你的问题,请参考以下文章