當前位置:首頁 » 編程語言 » 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執行解釋執行位元組碼來運行程序,前者執行效率高,後者相對低。