。 问:什么是平台无关性,Java是如何做到平台无关的? 解: 大家说的都很对,看来大家对这个概念掌握的很可以。我简单总结一下。 跨平台指的是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行。 平台无关有两种:源代码级和目标代码级。 我们常说的跨平台,或者平台无关,指的就是目标代码,或者说是软件交付件跨平台。 C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。但是,关键是要重新编译。可是,一般软件交付都是给你个成品,对于C或者C++开发出的软件,只能运行在某个平台的。没有源码,怎么编译。 Java编译出来的是字节码,去到哪个平台都能用,只要有那个平台的JDK就可以运行,所以,Java程序的最大优势就是平台无关。对于Java,交付的就是一堆jar包或者war包,只要系统上有个Java虚拟机,就可以直接运行,这不就是跨平台了么。 我们使用的C、C++还有Java等高级语言,都需要最终被编译成机器语言,才能被计算机执行。 C语言和C++语言的编译过程是把源代码编译生成机器语言。这样机器可以直接执行。但是不同系统对同一段“机器语言”的处理结果可能是不一样的,原因可能有很多,比如CPU的指令集不同的。C语言不能实现跨平台运行,就是因为它编译出来的文件的格式,只适用于某种cpu,其他cpu无法识别。 那么Java是如何实现跨平台的呢? 我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。这种字节码文件需要经过JVM虚拟机,然后翻译成机器语言,才能被机器执行。 那么,由于我们可以在不同的操作系统上安装不同的JVM,而JVM封装了所有对于.class文件的处理,即JVM帮我们把字节码翻译成机器语言的过程中就已经充分考虑到对应平台的特性了。比如,一个.class文件,在不同机器上最终生成的机器语言可能是不同的,但是这种不同不需要我们关心,JVM会保证他可以正常运行,完整的表达正确的程序语义。

直面Java 第003期的更多相关文章

  1. 直面Java 第004期。

    什么是值传递,什么是引用传递.为什么说Java中只有值传递 对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的 ...

  2. 直面Java 第002期

    . Java和C++同为面向对象语言,Java和C++主要区别有哪些?双方个有哪些优缺点? 解: C++ 被设计成主要用在系统性应用程序设计上的语言,对C语言进行了扩展.对于C语言这个为运行效率设计的 ...

  3. java 复习003 之排序篇

    由java 复习003跳转过来的C语言实现版见some-sort-algorithms 快速排序(不稳定 O(n log n)) package vell.bibi.sort_algorithms; ...

  4. java在编译期和运行期都做了什么

    Java对象内存存储,引用传递,值传递详细图解 java对象在内存中的分配 编译过程: 编译器把一种语言规范转化为另一种语言规范的这个过程需要哪些步骤?回答这个问题需要参照<编译原理>,总 ...

  5. 深入分析Java的编译期与运行期

    不知大家有没有思考过,当我们使用IDE写了一个Demo类,并执行main函数打印 hello world时都经历了哪些流程么? 想通过这篇文章来分析分析Java的执行流程,或者换句话说想聊聊Java的 ...

  6. 深入了解JVM虚拟机8:Java的编译期优化与运行期优化

    java编译期优化 java语言的编译期其实是一段不确定的操作过程,因为它可以分为三类编译过程:1.前端编译:把.java文件转变为.class文件2.后端编译:把字节码转变为机器码3.静态提前编译: ...

  7. java 复习003

    今天主要复习下数据结构的东西 树 自平衡二叉查找树 AVL树(高平衡树)(wiki) 特性:任何节点的两个子树的高度最大差别为一 时间复杂度:查找.插入和删除在平均和最坏情况下都是O(log n) 红 ...

  8. java实现——003二维数组中的查找

    import java.util.Scanner; public class T003 { public static void main(String[] args) { Scanner in = ...

  9. java - day014 - 编译期,运行期

    编译期 静态成员 私有变量 成员变量 运行期 非静态方法 package day1401; public class Test1 { public static void main(String[] ...

随机推荐

  1. Java 几种showMessageDialog的表示

    最近在做swing程序中遇到使用消息提示框的,JOptionPane类其中封装了很多的方法. 很方便的,于是就简单的整理了一下. 1.1 showMessageDialog 显示一个带有OK 按钮的模 ...

  2. Python发送四种格式的post请求的代码样例

    x-www-form-urlencoded: path = "/api/v1/topics/update"params={'accesstoken':'d38a77f0-6f29- ...

  3. transclude

    http://jsfiddle.net/ospatil/A969Z/157/ transclude :true  允许指令内部的dom元素, 保留到 自定义指令的template属性里的含有 ng-t ...

  4. dos命令:批处理

    批处理 一.call命令 1.介绍 从批处理程序调用另一个批处理程序. 2.语法 CALL [drive:][path]filename [batch-parameters] batch-parame ...

  5. Java学习笔记13(equals()方法;toString()方法)

    equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...

  6. 12.输入一个成绩计算其A,B,C,D,E等级

    #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int score; s ...

  7. SpringBoot(一) 入门篇,简单配置

    编辑工具:Intellij IDEA 一.SpringBoot的应用: 1.创建文件 2.项目结构 3.开始构建springboot项目,项目结构 第一步创建Person类: package com. ...

  8. python检测网络延迟

    #!/usr/bin/env python # coding: utf-8 # coding: cp950 ''' Create Date: 2012-11-06 Version: 1.0 Descr ...

  9. phpcms pc_base::load

    //数据库pc_base::load_model(‘*_model’) 加载数据库模型 (一张表对应一个数据库模型类),即 modle/*_model.class.php每一个数据库模型类都会继承底层 ...

  10. 搭建使用create-react-native-app 搭建app开发环境

    文档地址 react-native expo 官网 expo 文档 两种创建react-natvie-app的方法 react-native init projectName create-react ...