是的。所谓的“字节码”就是中间代码,它可以很快地被告知桐翻译成机器码,但是中间代码本身不包含与机器或操作系统相关的信息,这些信息只有虚拟机清楚。所以中间代码只是说“我要做什么”,由虚猛陵拟机根据机器和操作系统翻译成“怎么做”然后去执行。因此在linux下编译的java代码也可以直接运行在Windows或者其它装有虚拟机的系统下,反之亦然。而C或C++直接编译成与机器和操作系统相关的袜坦代码,所以C语言编译的程序没有跨平台性,就算没有使用到操作系统相关的API,在不同的系统下也必须重新编译才能运行。
㈡ 详解Java和C语言的区别在哪里
1Java与C语言各自的优势
C语言是面向过程的语言,执行效率高;Java是面向对象的语言,执行效率比C语言低。
C语言最关键的是比Java多了指针,这也说明了Java的健壮性,还有Java的多线程机制使程序可以并行运行,Java程序多用于网络。
C语言的安全性不如Java,C语言没有Java的垃圾回收机制,申请的空间要手动释放。
Java的通用性好,可以跨平台直接移植,只要有安装Java虚拟机(JVM)就可以了。
2Java和C语言谁的通用性会比较好
在速度上,C语言编写的程序要优于Java,因为Java必须运行在虚拟机的环境中,但是因为虚拟机,Java获得的平台无关性,而C语言的程序有可能需要重新修改编译才能实现平台的移植,
另一方面,C语言比Java语言更“底层”,因此可以用C编写例如硬件的驱动,而Java却不行。Java和C语言还有个明显的不同就是C语言注重的是算法,但是Java却不一样,想用的时候导包就可以了。
C语言的算法很重要,但是Java中的算法没有C语言那么复杂。打印的方法:C语言是printf("??.");而Java是System.out.print("??."),也可以用println,ln表示换行。
Java程序中的基本数据类型(boolean,char,byte,short,int,long,float,double),是对对象的引用;C语言也有许多种基本类型,还有struct,union,enum,数组和指针。
在Java没有枚举、联合类型。Java采用Unicode字符集,C语言通常采用的是ASCII字符集,A—65,a—97。C语言的变量可以不进行初始化,但Java的变量要进行初始化。
在C语言中,char类型占一个字节,在Java中char类型占2个字节。
3Java和C语言各自的特征
Java面向对象的特征主要有封装,继承,多态。类的继承关系是单一的、非多重的,一个子类只有一个父类,子类的父类又只有一个父类。C语言支持“运算符的重载”,这是它的一个很重要的多态特征,是数据抽象和泛型编程的利器。它允许直接对对象进行四则运算,正像基本数据类型那样Java不支持这种多态机制,也是为降低复杂性。
Java可以支持方法重载和重写,所谓重载就是一个类具备多个相同属性行为;重写就是在继承关系中父类的行为在不同的子类上有不同的实现。在Java中比C语言多了一些修饰符,如访问修饰符Public(公共的)、Private(私有的)、Protected(受保护的)、默认。
Java有super关键字,指代父类对象,通常被用于调用父类的构造方法或一般方法C语言则没有super关键字,两者都有this,指代当前对象。
在Java中,除了static、final、private是静态绑定以外,所有方法一律按动态绑定处理。Java中可以将类组织起来用Package打包,而C语言没有。
㈢ java语言和c语言的区别有哪些
java语言和c语言的区迟谈别有单文件的编译时间java比c语言快;c语言可以直接操作内存,java不能直接操作;c语言可以封装动态库,java不行;c语言有指针,java没有指针;c语言可以直接操作串口,java需要第三方jar包支持等等。
1、c语言可以直接操作串口,java需要第三方jar包支持;
2、c语言的线程更加灵活,java的线程都已经封装好了;
3、c语言做单独功能,可以增加效率,java适用做web应用开发;
4、unix是c语言编写的,java也是c语言编写的;
5、JAVA做web开发的时候,已经有很多成型的框架技术,c语言很少,且需要处理底层内容,对应不熟悉计算机原理的开发者难度很大;
6、JAVA的开源包太多了,c语言也有但是偏少,而且面向某个业务应用领域的框架没java多。
Java是在c语言的基础上,抛弃了一些指针之类的东西,和c完全不同的是Java是一门面向对象的语言,Java是跨平台的,Java是安全的,许多要求安全的企业对Java需求很大,Java也一直排名语言榜第一位。它的不足是不够简洁,不是底层语言,不能直接操作硬件,有些事情没有办法做的很好,比如硬件编程,嵌入式之类的等。
c语言更像是计算机程序语言的基础,所以学会c语言向其他语言转移也是非常简单的,c语言是完全底层的语言,比如驱动、通信协议之类,在Unix和Linux环境中也是不可或缺的,另外在嵌入式领域厅旦辩也大有作为,而且c语言效率极高。c语言也有一些问题,因为是面向过程的,所以不像面向语言的Java灵活,尤其在团队开发的时候,不是跨平台扮缺的,具有不可移植性。由于过于底层,所以对硬件依赖很高,导致一旦硬件环境变化,会出现一些问题,c语言的输入输出相对复杂等等问题。
㈣ 浅析C语言和Java语言的异同
【摘 要】 文章根据本人多年对C语言和Java语言教学过程中遇到的一些实际问题,诸如Java语言是不是C语言发展和衍生的产物等。基于此,文章将从它们的起源、特点、开发环境、程序调试过程、应用领域等方面的异同进行比较、归纳。
中国论文网 http://www.xzbu.com/8/view-4409732.htm
【关键词】 C语言 Java语言 异同 比较 归纳
1 举例
(1)C程序。
#include “stdio.h”
void main()
{printf(“大家好!\n”);
}
(2)Java程序。
public class java1
{
public static void main(String args[])
{ System.out.println(“大家好!”);}
}
从以上程序代码上看,二者既有相似之处,又有不同。相似的是二者完成的都是向输出终端输出字符串“大家好!”,不同的是前者是用C语言的main函数来实现的,C语言中main函数是程序执行的入口;后者用Java语言的类方法main的定义实现的, Java程序中main方法是程序执行的入口。
2 起源
C语言是在70年代初由两位程序员B.W.Kernighan和D.M.Ritchit在美国贝尔实验室研究让隐段出来的。后来由美国国家标准学会制定了一个C语言标准,于1983年发表。通常称之为ANSI C,是当代最优秀的程序设计语言。
Java语言是在1995年5月由Sun Microsystems公司推出的面向对象的程序设计语言。
3 特点
3.1 C语言的特点
C语言具有简洁、紧凑,方便、灵活;运算携裂符丰富;数据类型丰富;具有结构化的流程控制语句(if、switch、for、while语句等);语法限制不是很严格,程序设计自由度大;允许直接访问物理地址,能进行位操作,能够实现汇编语言的一些功能,可以直接对计算机硬件进行操作。因此有人又把它称作中级语言。生成目标代码的质量高,程序执行效率也非常高;程序可移植性非常好[1]。
3.2 Java语言的特点
Java语言的特点可以概括为:平台无关性、简单、面向对象、分布式、解释执行、健壮、安全性等[2]。
平台无关性是指Java语言能运行于不同的计算机平台,数据类型也与机器无关。安全性是指Java程序运行时,内存由操作系统分配,可以避免病毒侵入。另外,Java还对程序提供了安全管理器,防止非法访问;面向对象是指Java将数据和类封装在一起,利用类的特点,实现程序的简洁性和可维护性。通过类的继承性和封装性的特性,使程序代码只需编译一次,然后就可以反复利用。分布式是指Java建立在TCP/IP网络平台上。库函数提供了使用FTP和HTTP协议传送和接受信息的方法。健壮性是指Java主要致力于检查程序在编译和运行时的错误。由于Java本身操纵内存,这样会大大减少内存出错的可能性。
4 开发环境
C是面向过程的语言,运行环境主要有:TC、VC、Visual C++等,现主要使用Visual C++,它是一个功能非常强大的集成开发环境。
Java是面向对坦誉象的语言,JDK是许多初学者使用的开发环境,由一个标准的类库和一组测试及建立文档的Java应用程序组成。在Java语言学习的初期,可以在普通的文本编辑器编写Java源程序,利用Javac命令完成编译,利用Java命令完成程序的解释执行。在具备一定的的程序开发基础后,可以选择一些集成开发环境如Eclipse、NetBeans等,以便提高开发效率。
5 程序调试过程
(1)C语言程序调试以Visual C++6.0为例:下载Visual C++6.0并安装、运行,
进入后,点击文件(File)->打开(Open),选择你要打开的C语言文件,点击打开选择打开文件后,依次点击Build->Compile,编译文件无误后,按Ctrl+F5运行程序。
(2)Java语言程序调试介绍两种方法:
dos命令行运行步骤:
1)下载并安装JDK、环境变量设置:PATH、CLASSPATH和 JAVA-HOME。
2)编写:在记事本中编写Java代码,存为.java文件,文件名为代码入口类的名称。
3)编译:运行CMD进入dos系统。
输入javac代码文件名.java生成.class文件。
4)运行java程序:java*(*为主文件名)。
Eclipse运行步骤:
1)下载并安装JDK->下载并安装Eclipse 并运行,进入后点击文件(File)->新建(New)->Java项目(Java project)->输入项目名称->确定。
2)右键单击包资源管理器右键单击1)中的项目下的src节点,依次选择
新建(New)->类(class)->输入类名称->确定。
3)编写Java程序并保存。
4)运行Java程序:右键单击创建好的类文件,依次选择“run as” ->“Java Application(Java 应用程序)”—>确定。
6 应用领域
C语言是即具有高级语言的特点,又具有汇编语言的特点。它已先后被移植到大、中、小及微型机上。它可以作为系统设计语言,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写图形、动画和系统软件。
Java语言的应用领域:(1)行业和企业的信息化:如现在正在以惊人的速度发展起来的Android,它就是基于Java语言实现的手机操作系统。通过J2ME让手机可以运行Java程序,Java在手机世界的兴起对手机时代起着划时代的作用。(2)嵌入式设备及消费类电子产品:通过将Java虚拟机嵌入到其他设备中,就可以让Java在这些设备中发挥强大的作用。比如,非智能手机、机顶盒、嵌入式芯片及其他低功耗设备中都有Java的影子。(3)办公自动化:目前基于Java技术设计的办公自动化系统应用也非常广泛,如:军队办公自动化系统、网上书店系统、银行网上代缴费管理系统等。(4)辅助教学:远程教学系统、远程教育、交互式电站仿真系统等。
7 结语
在多年的C语言和Java语言课程的教学过程中,通过不断探索、学习和阅读文献,我对两种编程语言从以上几方面进行归纳,并将上述内容运用到教学中,采取比较式教学法,取得了较好的教学效果。
参考文献:
[1]姜雷,施泽全.C/C++程序设计教程.中国铁道出版社,2007,2-3.
[2]刘志成.Java程序设计实例教程.人民邮电出版社,2010,4-5.
转载请注明来源。原文地址:http://www.xzbu.com/8/view-4409732.htm
㈤ java程序的编写、编译、和运行与C语言程序有何不同
java是面向对象的,而c是面向过程的,java运行需借助于java虚拟机,可跨平坦运行,
Java是解释型语言,所有代码都会翻译成统一的、与系统无关的bytecode,然后放到JVM上运行;而C是编译式语言,代码要先通过编译器转换成与系统相关的中间代码,然后才能运行。
㈥ C语言和JAVA编程或者其他类型的编程有什么区别吗
两个都是高级语言,但是C语言更偏机器底层一点,比较万能,但是编写应用程序往往比JAVA复杂的多,性能高。JAVA建立在JAVA虚拟机之上,不用考虑指针,大多数小的喊肆操作都可以直接用别人写蔽竖好的类,编写应用较简宏渗大单,但是由于不能直接处理底层操作,导致性能不高
㈦ 如何用java调用c语言编译器实现在线编译c语
要在java中调用c语言的库,需要使用Java提供了JNI。
举例说明
在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.
现在分别从Java和C语言两部分说明:
1. Java 部分
首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native 类型的.如下:
public class HelloNative {
public native void sayHello();
}
编译这个类,生成class文件:
javac HelloWorld.java
利用javah生成需要的h文件
javah HelloNative
生成的 h文件大概如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
可以看一下上面自动生成的程序,程序include了jni.h,这个头文件在 $JAVA_HOME下的include文件夹下. 还可以发现生成的函数名是在之前的函数名前面加上了Java_HelloNative。
2. C语言部分
根据上面生成的h文件编写相应的代码实现,建立一个 HelloNative.cpp用来实现显示Hello World的函数.如下:
#include <stdio.h>
#include "HelloNative.h"
JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)
{
printf("Hello World!\n");
}
代码编写完成之后,我们再用gcc编译成库文件,命令如下;
gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp
这样就会在当前目录下生成一个libHelloNative.so的库文件.这时需要的库已经生成,在C语言下的工作已经完成了.
接下来需要在Java中编写一个程序测试一下.在程序前,需要将我们的库载入进去.载入的方法是调用Java的 System.loadLibrary("HelloNative");
public class TestNative
{
static {
try {
System.loadLibrary("HelloNative");
}
catch(UnsatisfiedLinkError e) {
System.out.println( "Cannot load hello library:\n " + e.toString() );
}
}
public static void main(String[] args) {
HelloNative test = new HelloNative();
test.sayHello();
}
}
但是再编译后,运行的时候,问题又出现了.
Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
at HelloNative.sayHello(Native Method)
at TestNative.main(TestNative.java:13)
载入库失败,但是库明明就是放在当前文件夹下的,怎么会载入失败呢?
用System.getProperty("java.library.path")查看,发现java.library.path中并不u存在当前的目录.主要有以下的几个解决办法:
1) 将生成的库复制到java.library.path有的路径中去,当然这样不是很好
2) 设置环境变量export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,将当前的目录加入到LD_LIBRARY_PATH中
3) 设置java 的选项,将当前的目录加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH
这样之后程序就能够成功的运行了.可以看见显示的"Hello World!"了