当前位置:首页 » 编程语言 » c语言运行java
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言运行java

发布时间: 2023-02-05 14:50:43

‘壹’ 如何用c语言调用JAVA的类文件

Java可以通过JNI调用本地C语言方法,而本地C语言方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式),通过调用本地的库文件的内部方法,使Java可以实现和本地机器的紧密联系,调用系统级的各接口方法。

‘贰’ C语言和JAVA语言的运行机制有何不同

c语言是直接在电脑系统上可以运行的,而java运行,则需要在电脑上安装java运行虚拟机jvm即JRE才能运行,不然就缺少库类,jar不能被识别~
另外,在编译的时候,二者也是不同的。C++编译器将C++编译成C,然后C语言直接转换成机器指令运行。而java通过java编译器之后则变为Bytecode,然后变成机器指令被识别。
java爱好者很高兴为你解答

‘叁’ 如何在c++中调用java代码

C语言调用Java,还有Java调用C,都使用到JNI技术,C语言调用需要创建Java虚拟机,可查看函数JNI_CreateJavaVM、DestroyJavaVM的资料,函数声明在jni.h头文件(JDK)中。需注意参数类型转换,两种语言的参数类型和传递有讲究,有多个返回的话,必须传递对象参数进行处理。

‘肆’ 我想学习java需要先学习c语言吗因为我基本上是零基础的!

可以不一定要学习C语言,首先C语言和Java完全是不同的两种语言,一种是面向过程编程的,一种是面对对象编程的。只不过你学习C语言以后会对你学习java有帮助,毕竟你有过编程的经验。

拓展资料

java的语言特点java

  • 简单性

Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。

  • 面向对象

Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法,而不是严格地用过程来思考。在一个面向对象的系统中,类是数据和操作数据的方法的集合。数据和方法一起描述对象的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。

  • 分布性

Java设计成支持在网络上应用,它是分布式语言。Java程序只要编写一次,就可到处运行。

  • 编译和解释性

Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。

  • 稳健性

Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。

  • 安全性

Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。

  • 可移植性

Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。Java环境本身对新的硬件平台和操作系统是可移植的。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。

  • 高性能

Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。

  • 多线索性

Java是多线索语言,它提供支持多线索的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。

  • 动态性

Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。

‘伍’ Java如何调用C语言代码

Java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现。 标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的 你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的 程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们 下面我们开始编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft VC++工具。编写java代码,我们在硬盘上建立一个hello目录作为我们的工作目录,首先我们需要编写自己的java代码,在java代码中我们会声明native方法,代码非常简单。如下所示 class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } } 注意我们的displayHelloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("hello")这句代码,它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so) 编译java代码 javac HelloWorld.java 生成HelloWorld.class文件 创建.h文件 这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到,我们运行 javah HelloWorld。这样我们可以看到在相同目录下生成了一个HelloWorld.h文件,文件内容如下 在此我们不对他进行太多的解释。 /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: HelloWorld * Method: displayHelloWorld * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif 编写本地实现代码 在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Project,然后创建一个HelloWorldImp.cpp文件,内容如下 #include <jni.h> #include "HelloWorld.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return; } 注意我们这里include了 jni.h和刚才得到的HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成hello.dll文件。 运行java程序 把上面生成的hello.dll文件复制到我们的工作目录,这时候我们的目录中包括HelloWorld.java,HelloWorld.class和hello.dll文件。运行java HelloWorld命令,则可在控制台看到Hello world| 的输出了。运行VC++; 文件---新建---选“win32 console application”(控制台程序)---在右方设置好路径并输入工程名---确定 接下来的几个提示框点确定就行了,那是提示是否要用VC++提供的框架之类的 在左边的工作空间中选“FILEVIEW”标签项,点开“+”号,右键点击“SOURCE FILES”,选“添加文件到目录”,此即添加你要建立的C++源程序文件,会提示你没有文件,是否添加,你点是,输入文件名保存就OK了 然后SOURCE FILES下就出现了你刚才建立的*.CPP文件,双击,输入代码. 以下就是点”组建”菜单中的”编译”、”组建”等命令进行调试了。 相信你会了。 http://hi..com/%C7%E9%D4%B5and%D3%D1%D2%EA/blog/item/34084645e8560f23cefca3b7.html

‘陆’ 如何用c语言来访问java的接口

: 你这种情况比较复杂!能,用Jni接口。 你可以直接使用Jni接口,也可以网上下载jni包。 推荐使用jnative,很实用,我写驱动接口都用这个。

‘柒’ 一段C语言程序转换为java的写法谢谢!

按照你的要求,C语言程序转换成的Java程序如下:

publicclassGGG{

(Stringinput_str){

Stringstr_buff_8="",str_buff_10="",str_return="";

longsum8_1=0,sum8_2=0,sum10_1=0,sum10_2=0;//分别存储八进制和十进制不同算法取值的合计for(inti=0;i<input_str.length();i++){//对输入字符串的每一个字节进行循环

str_buff_8+=Integer.toOctalString(input_str.charAt(i));//将ASCII码值转换成八进制字符串

str_buff_10+=Integer.toString(input_str.charAt(i));//将ASCII码值转换成十进制字符串

}

for(inti=1;i<=str_buff_8.length();i++){

sum8_1+=(str_buff_8.charAt(i-1)-'0')*i;

sum8_2+=(str_buff_8.charAt(str_buff_8.length()-i)-'0')*i;

}

for(inti=1;i<=str_buff_10.length();i++){

sum10_1+=(str_buff_10.charAt(i-1)-'0')*i;

sum10_2+=(str_buff_10.charAt(str_buff_10.length()-i)-'0')*i;

}

str_return=""+sum8_1%10+sum8_2%10+sum10_1%10+sum10_2%10;

returnstr_return;

}

publicstaticvoidmain(String[]args){

System.out.println(calculateBillMac("abcdef"));

}

}

运行结果:

2739

这个数据和C语言用字符串"abcdef"测试的结果相同.

‘捌’ java如何调用c语言源文件并执行

要在java中调用c语言的库,需要使用Java提供了JNI。x0dx0a举例说明x0dx0a在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.x0dx0a现在分别从Java和C语言两部分说明:x0dx0a1. Java 部分x0dx0a首先定义一个HelloNative,在其中申明sayHello函数,函数要申明为Native 类型的.如下:x0dx0apublic class HelloNative {x0dx0apublic native void sayHello();x0dx0a}x0dx0ax0dx0a编译这个类,生成class文件:x0dx0ajavac HelloWorld.javax0dx0ax0dx0a利用javah生成需要的h文件x0dx0ajavah HelloNativex0dx0ax0dx0a生成的 h文件大概如下:x0dx0ax0dx0a/* DO NOT EDIT THIS FILE - it is machine generated */x0dx0a#include x0dx0a/* Header for class HelloNative */x0dx0ax0dx0a#ifndef _Included_HelloNativex0dx0a#define _Included_HelloNativex0dx0a#ifdef __cplusplusx0dx0aextern "C" {x0dx0a#endifx0dx0a/*x0dx0a* Class: HelloNativex0dx0a* Method: sayHellox0dx0a* Signature: ()Vx0dx0a*/x0dx0aJNIEXPORT void JNICALL Java_HelloNative_sayHellox0dx0a(JNIEnv *, jobject);x0dx0ax0dx0a#ifdef __cplusplusx0dx0a}x0dx0a#endifx0dx0a#endifx0dx0ax0dx0a可以看一下上面自动生成的程序,程序include了jni.h,这个头文件在 $JAVA_HOME下的include文件夹下. 还可以发现生成的函数名是在之前的函数名前面加上了Java_HelloNative。x0dx0a2. C语言部分x0dx0a根据上面生成的h文件编写相应的代码实现,建立一个 HelloNative.cpp用来实现显示Hello World的函数.如下:x0dx0ax0dx0a#include x0dx0a#include "HelloNative.h"x0dx0ax0dx0aJNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)x0dx0a{x0dx0aprintf("Hello World!\n");x0dx0a}x0dx0ax0dx0a代码编写完成之后,我们再用gcc编译成库文件,命令如下;x0dx0agcc -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.cppx0dx0ax0dx0a这样就会在当前目录下生成一个libHelloNative.so的库文件.这时需要的库已经生成,在C语言下的工作已经完成了.x0dx0a接下来需要在Java中编写一个程序测试一下.在程序前,需要将我们的库载入进去.载入的方法是调用Java的 System.loadLibrary("HelloNative");x0dx0ax0dx0apublic class TestNativex0dx0a{x0dx0astatic {x0dx0atry {x0dx0aSystem.loadLibrary("HelloNative");x0dx0a}x0dx0acatch(UnsatisfiedLinkError e) {x0dx0aSystem.out.println( "Cannot load hello library:\n " + e.toString() );x0dx0a}x0dx0a}x0dx0apublic static void main(String[] args) {x0dx0aHelloNative test = new HelloNative();x0dx0atest.sayHello();x0dx0a}x0dx0a}x0dx0ax0dx0a但是再编译后,运行的时候,问题又出现了.x0dx0aCannot load hello library:x0dx0ajava.lang.UnsatisfiedLinkError: no HelloNative in java.library.pathx0dx0aException in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()Vx0dx0aat HelloNative.sayHello(Native Method)x0dx0aat TestNative.main(TestNative.java:13)x0dx0ax0dx0a载入库失败,但是库明明就是放在当前文件夹下的,怎么会载入失败呢?x0dx0a用System.getProperty("java.library.path")查看,发现java.library.path中并不u存在当前的目录.主要有以下的几个解决办法:x0dx0a1) 将生成的库复制到java.library.path有的路径中去,当然这样不是很好x0dx0a2) 设置环境变量export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,将当前的目录加入到LD_LIBRARY_PATH中x0dx0a3) 设置java 的选项,将当前的目录加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATHx0dx0a这样之后程序就能够成功的运行了.可以看见显示的"Hello World!"了

‘玖’ C语言和JAVA语言的运行机制有何不同

很简单,如果你有学习过编译原理就会明白的。
C和Java都是高级编程语言,计算机是不会明白的,而要让计算机明白,就得找个“翻译”。
而这个“翻译”有两类,第一个是“翻译程序”,第二个是“解释程序”。
“翻译程序”的工作就是一次过将高级编程语言编写的代码翻译成低级语言代码,让计算机执行翻译后的代码。
“解释程序”的工作就是读取一句高级编程语言写的指令就解释成低级语言编写的指令,而采取一边解释一边执行的方式。
C就是翻译之后,让计算机执行翻译得到的程序。
Java很特别,在翻译这一步上,它不是翻译成直接可以运行的程序,而是“字节码”。“字节码”由当前操作系统安装的Java虚拟机一边解释一边执行,注意,相同程序得到的“字节码”是一样的,但是在不同操作系统下的虚拟机则不同。这样,就可以“一次编写,处处运行”。但是,一边解释一边执行是效率很低的,所以Java又出了JIT技术,就是Just In Time Compiler及时编译器,在执行时对一些常用的类花费一定时间进行编译,但是编译后执行效率很高,而编译只需要很少的时间,相对于浪费运行的时候宝贵的相应时间来说是很值得的。
总之,C写的程序是编译后由系统直接运行,Java是编译成字节码再由JVM执行解释执行字节码来运行程序,前者执行效率高,后者相对低。