聊聊"鸡肋"的Java跨平台
2017-12-22 15:26
148 查看
我们初学Java的,只怕最深的印象就在于Java的跨平台了,我们的前辈教师,总是会将Java的跨平台夸赞的不得了,可实际接触开发一段时间后,会不会有这么一个疑问呢?那就是Java源自于C,那C是如何操作的呢?Java的跨平台究竟在C的基础上,做出了哪些进步呢?为什么网上有了一种说法,说Java的跨平台很"鸡肋"呢?是这样吗?下边针对这些问题聊聊;
C语言本来就是跨平台的,不过是“源码级”跨平台。本来就存在针对linux、windows的不同的编译器。所以有C语言“一次编写,到处编译”,Java是“一次编译,到处运行”的说法。如C++创始人酸溜溜的说法,JVM造了一个新的平台,让所有Java程序只能在这个平台上运行,而C和C++的代码可以在几十个不同的平台上运行,从源码这个角度而言,C和C++是跨平台的,而Java不是。这里所说的源码是经过编写未曾编译的。那么这么看起来Java的跨平台是不是真的有些鸡肋了呢?
这种说法也是有失偏颇的,因为Java和C针对的方向不同所以跨平台承担的责任也就不同了,C主要用于系统底层的开发,如操作系统:Linux,硬件驱动程序。所以对于跨平台就是源码级别的。而Java呢?
Java的起源, 发明的初衷, 最开始Java是为了机顶盒开发的, 机顶盒用的CPU不是x86架构的intel CPU而是单片机, 而单片机的发展是很迅速的, 你花了半年为某种单片机开发了程序, 等程序出来了可能这个型号的单片机已经没人用了, Sun当时是为了解决这个问题, 提出了程序只用写一遍编译一遍, 然后让JVM来适应单片机型号的不同.这是最初的跨平台,而发展到了今天呢?我们知道Java已经成为了web开发的主流语言,可是我们开发的时候是在Windows下开发,而部署往往是部署在Linux和Unix下的,所以此时Java的跨平台就又可以大展神威了,因为不管什么时候,Java说白了都是运行在JVM上的,真正需要跨平台的是JVM,所以对于我们编写程序来说,就让编码和跨平台分开了,便利了开发。Java的跨平台说白了就是下面的一张图:
我们作为编写段,只注重在编写代码,中至于跨平台的任务就交给了JVM来处理,中间码是跨平台的,但JVM却不是跨平台的,这点要注意!
综上;我们说Java的跨平台鸡肋,是很片面的,针对性不同,没有可比性!
C语言本来就是跨平台的,不过是“源码级”跨平台。本来就存在针对linux、windows的不同的编译器。所以有C语言“一次编写,到处编译”,Java是“一次编译,到处运行”的说法。如C++创始人酸溜溜的说法,JVM造了一个新的平台,让所有Java程序只能在这个平台上运行,而C和C++的代码可以在几十个不同的平台上运行,从源码这个角度而言,C和C++是跨平台的,而Java不是。这里所说的源码是经过编写未曾编译的。那么这么看起来Java的跨平台是不是真的有些鸡肋了呢?
这种说法也是有失偏颇的,因为Java和C针对的方向不同所以跨平台承担的责任也就不同了,C主要用于系统底层的开发,如操作系统:Linux,硬件驱动程序。所以对于跨平台就是源码级别的。而Java呢?
Java的起源, 发明的初衷, 最开始Java是为了机顶盒开发的, 机顶盒用的CPU不是x86架构的intel CPU而是单片机, 而单片机的发展是很迅速的, 你花了半年为某种单片机开发了程序, 等程序出来了可能这个型号的单片机已经没人用了, Sun当时是为了解决这个问题, 提出了程序只用写一遍编译一遍, 然后让JVM来适应单片机型号的不同.这是最初的跨平台,而发展到了今天呢?我们知道Java已经成为了web开发的主流语言,可是我们开发的时候是在Windows下开发,而部署往往是部署在Linux和Unix下的,所以此时Java的跨平台就又可以大展神威了,因为不管什么时候,Java说白了都是运行在JVM上的,真正需要跨平台的是JVM,所以对于我们编写程序来说,就让编码和跨平台分开了,便利了开发。Java的跨平台说白了就是下面的一张图:
我们作为编写段,只注重在编写代码,中至于跨平台的任务就交给了JVM来处理,中间码是跨平台的,但JVM却不是跨平台的,这点要注意!
综上;我们说Java的跨平台鸡肋,是很片面的,针对性不同,没有可比性!
相关文章推荐
- Exception in thread "main" java.lang.NoClassDefFoundError: org.jaxen.NamespaceContext
- Exception in thread "main" java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
- 2.5在Eclipse里面编译samples/Cpp/里面的几个例子,会出错 "Unable to execute dex: java.nio.BufferOverflowException"
- java跨平台运行【有关路径获取】
- java去全半角空格,trim(), replaceAll(" +",""),replaceAll("\\s*", ""), replaceAll(" | ", "")
- JAVA实现跨平台的原理?
- Java中@SuppressWarnings("unchecked")的作用
- SWT/Jface 异常-Exception in thread "main" java.lang.UnsatisfiedLinkError
- JSP报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- Exception in thread "Timer-2" java.lang.OutOfMemoryError: Java heap space
- Maven项目红色叹号+JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java B
- java"=="与equals()方法的对照
- ideallij之Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/Filter
- java 项目request.getParameter("")接收不到值
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
- An internal error occurred during: "Initializing Java Tooling". Eclipse启动发生的错误
- java命令运行时错误(Exception in thread "main" java.lang.NoClassDefFoundError)
- DataNode启动异常"java.io.IOException: Cannot lock storage /i/dfs/dn. The directory is already lock"
- Exception in thread "main" java.lang.UnsupportedOperationException
- java.net.UnknownHostException: Unable to resolve host "api102.meishi.cc": No address associated with hostname