java查詢doc語言,Java查找

本文目錄一覽:

java調用c語言編寫的可執行文件

C代碼寫成這種形式吧:

#includestdio.h

#includestring.h

int main(string argv[]){

char a[100];

strcpy(a,argv[0]);

}

傳入的字串字符個數不能超過100個字符,用指針可以避免這一問題,C++代碼如下:

#includeiostream

using namespace std;

typedef char *String;

int main(String argv[]){

String str;

str=argv[0];

}

Java調用代碼如下所示:

Runtime.getRuntime().exec(“a.exe testString”)

testString是你自己輸入的測試字串

Java中的循環語句指什麼?

和c語言一樣

有fo循環;

while循環;

沒什麼區別.

請採納.

關於JAVA語言,和C語言有什麼聯繫嗎?

Java語言由語法規則和類庫兩部分組成,其中語法規則確定了Java程序的書寫規範,學習好語法規則是Java語言,也是所有編程語言的基本功。本文主要向大家簡單介紹一下Java的語法規則。Java語言與C/C++語言有着緊密的聯繫,Java中的許多術語來自於C++,起語法也來自於C++。因此Java的語法和c++的語法計劃一模一樣。下面簡單介紹一下Java的具體語法。

一、Java的詞法

1、標識符

標識符是類、變量和方法等的名字,作用是讓編譯器能夠識別它們。在Java語言中,標識符可以包含數字、字母、下劃線(_)和美圓符號($),但是不能以數字作為開頭。與C/C++語言不同的是,Java語言還可以將一些非拉丁字母包含在標識符中,這是因為Java語言使用的是Unicode字符,所有的十六進制00C0以上的Unicode字符都可以用在標識符中。但是Java語言的關鍵字是不能用來作為標識符的。

我們在使用標識符的時候應該盡量表達所要表示的類、變量、方法等的含義。另外,標識符中可以使用下劃線,我們應該充分利用這一點以提高程序的可讀性。

2、關鍵字

以下是Java的全部關鍵字:

abstractdoubleintstrictfp**

booleanelseinterfacesuper

breakextendslongswitch

bytefinalnativesynchronized

casefinallynewthis

catchfloatpackagethrow

charforprivatethrows

classgoto*protectedtransient

const*ifpublictry

continueimplementsreturnvoid

defaultimportshortvolatile

doinstanceofstaticwhile

*尚未使用的關鍵字

**為Java2增加的關鍵字

3、注釋

Java有三種形式的注釋:

第一種是C語言的傳統注釋方式,即將“/*”和“*/”之間的文本都視為注釋,這種注釋可以跨越多行。

第二種是C++風格的注釋,即將“//”之後直到行尾的文本都視為注釋,這種注釋只能包含一行。

第三種是Java新增加的注釋方式,即將“/**”和“*/”之間的文本都視為注釋,這種注釋也可以誇耀多行。注意,這種注釋方式生成的注釋將作為Javadoc文檔保存。

二、操作符

1、算術操作符

操作符用途優先級結合性

++,–自動遞增,自動遞減2(僅次於括號)從右到左

+,-一元加,一元減2從右到左

*,/乘,除3從左到右

%取余(求模)3從左到右

+,-加,減4從左到右

2、布爾運算與關係運算符

操作符用途優先級結合性

,,=,=測試相對大小6從左到右

==測試相等性7從左到右

!=測試不等性7從左到右

?:根據第一個操作數返回後兩個操作數之一13從左到右

!非2從右到左

布爾與8從左到右

^異或9從左到右

|布爾或10從左到右

條件與11從左到右

||條件或12從左到右

3、位操作符

操作符用途優先級結合性

~非(位求補)2從右到左

,左移,右移5從左到右

當作無符號右移5從左到右

位和8從左到右

^位異或9從左到右

|位或10從左到右

4、賦值操作符

操作符用途優先級結合性

=賦值14從右到左

*=操作同時賦值14從右到左

/=操作同時賦值14從右到左

%=操作同時賦值14從右到左

+=操作同時賦值14從右到左

-=操作同時賦值14從右到左

=操作同時賦值14從右到左

=操作同時賦值14從右到左

=操作同時賦值14從右到左

^=操作同時賦值14從右到左

|=操作同時賦值14從右到左

=操作同時賦值14從右到左

5、特殊操作符

cast操作符將一種數據類型轉換成為另一種數據類型,cast應寫成把要校正操作數的類型名放在括號中。

例如:inti;longl;l=7876547;i=(int)l;如果給高精度的變量賦予一個低精度值,則不需校正。類型校正操作符的優先級為2,結合性為從右到左結合。

將以上講到的操作符的優先級總結如下:

優先級運算符結合順序

1[]數組運算.點運算符()調用方法從左到右

2!~++–+(一元加)-(一元減)()強制類型轉換new從右到左

3*/%從左到右

4+(二元加)-(二元減)從左到右

5從左到右

6==instanceof從左到右

7==!=從左到右

8從左到右

9^從左到右

10|從左到右

11從左到右

12||從左到右

13?:從左到右

14=+=-=*=/=%==|=^====從右到左

三、常量

1、整型常量

在Java語言中,整型常量有三種形式,它們分別是:十進制、八進制、十六進制。

需要注意的是十進制數不能以0開頭,這是因為八進制的數是以0開頭的,而十六進制數以0x或0X開頭。

2、浮點型常量

浮點數只能表示十進制數。浮點數有兩種表示方法,即標準表示法和科學記數法。浮點數又分為單精度數和雙精度數。

3、布爾型常量

布爾型常量有兩個值:ture(或TURE)和false(或FALSE)它們分別表示真和假,這兩個值用來表示事物的狀態,它們必居其一。通過測量布爾值可以判斷是否執行某個步驟。

4、字符型常量

字符型常量是一個單一的字符,其形式是由兩個單引號引起來的一個字符。但是兩個單引號引起來的不能是單引號和反斜杠,即‘’’和‘\’是不正確的寫法。

大家一定要記住,Java語言中的字符是16位的Unicode字符,這與C/C++等語言是不一樣的。

同C/C++語言一樣,Java語言也有轉意序列。Java中的轉意序列的功能見下表:

轉義序列標準形式功能描述

\繼續

\nNL回車換行

\tHT水平製表符

\bBS後退一格

\rCR回車不換行

\fFF換頁

\”單引號

\\\反斜杠

\””雙引號

\ddd0ddd八進制模式

\xddd0xddd十六進制模式

\udddd0xddddUnicode雙字節字符

字符串常量

字符串常量是由雙引號引起來的一系列字符,與C/C++語言中不同的是,Java語言中的字符串不是通過字符數組來實現的,而是通過字符串類(即String類)來實現的。

四、變量和數據類型

在Java中,數據的類型可以分為四種:基本數據類型、數組類型、類和接口類型。任何數據都一定是上述數據類型的一種。

其中基本數據類型可以分為四大類:布爾型、字符型、整數型和浮點型。這些類型的數據與前面介紹的常量的類型基本相同,在此不再多說。下面將整數型和浮點型變量的取值範圍列出:

表一、

類型寬度取值範圍

byte8位-256到256

short16位-32768到32767

int32位-2147483648到2147483647

long64位-9223372036854775808到9223372036854775807

表二、

進制整數長整數

十進制最大正整數2147483647(2的31次方減1)923372036854775807L(2的63次方減1)

八進制最大正整數077777777777(2的31次方減1)07777777777777777777L(2的63次方減1)

最小負整數020000000000(-2的31次方)04000000000000000000L(-2的63次方)

十六進制最大正整數0x7fffffff(2的31次方減1)0x7fffffffffffffffL(2的63次方減1)

最小負整數0x80000000(-2的31次方)0x8000000000000000L(-2的63次方)

浮點數能表示的數值從小到大分別是:負無窮大、負有限值、負零、正零、正有限值及正無窮大。其中正零和負零在進行數值比較的時候是相等的,但仍有辦法分辨這兩個值,例如在進行1.0/0.0的時候會得到正無窮大的結果。其它非零非無窮大的有限值是以s*m*(2^e)來表示的,s和m的取值範圍見下表:

表三、

類型sme

float+1或-1小於2的24次方的正整數149到104的整數

double+1或-1小於2的53次方的正整數1045到1000的整數

表四、float最大值3640282347e+38f

非零最小值1.40239846e-45f

double最大值1.79769313486231570e+308

非零最小值4.940656458412465334e-324

另外浮點數還有一些特殊值,見下表:float最大值Float.MAX_VALUE

最小值Float.MIN_VALUE

正無窮大Float.POSITIVE_INFINITY

負無窮大Float.NEGATIVE_INFINITY

NaNFloat.NaN

double最大值Double.MAX_VALUE

最小值Double.MIN_VALUE

正無窮大Double.POSITIVE_INFINITY

負無窮大Double.NEGATIVE_INFINITY

NaNDouble.NaN

與C/C++語言中不同的是,在Java語言中,所有的基本數據類型都有預設值,就是說當我們聲明一個變量時,即使我們沒有對它賦值,它的值也是一定的,而不像在C/C++中那樣是不可預測的。具體個類型的預設值見下表:

基本數據類型預設值

Booleanfalse

Char’\u000′

Byte(byte)0

Short(short)0

Int0

Long0L

Float0.0L

Double0.0d

五、Java與C/C++的比較

由於Java的語法直接來源於C/C++,所以Java的程序控制語句與C/C++一模一樣,在此不再多說。以下重點介紹一下Java與C/C++的不同。

指針

大家在使用C語言編程的時候想必都曾經因為指針的複雜計算而煩惱,在C/C++語言編程過程中,指針可能引起許多錯誤,這些複雜的指針算法所產生的錯誤常常讓人迷惑不解,導致C/C++程序員在此浪費了大量的時間。考慮到這種原因,Java中取消了指針。指針的功能由參考(reference)所取代,這使得Java中對複雜數據結構的實現更加容易,因為用對象和對象數組實現複雜的數據結構更可靠。

函數

在Java中沒有C/C++中應用廣泛的函數,C/C++中通過函數實現的功能在Java中都是通過類和方法來實現的。

繼承

C++支持多重繼承,這是一個從多個父類中派生一個類的有效辦法,但這種派生很複雜,也很容易產生問題。因此,Java中沒有採用多重繼承,但Java的ObjectiveC協議接口能完成C++中多重繼承的所有功能。

goto語句

大家知道,在使用高級語言編程時過多的使用goto語句會使程序變得十分混亂,因此Java中也沒有使用goto語句。但是不可否認,當程序比較容易控制的時候,適當使用goto語句能使程序的運行更快捷,因此Java中使用了多重break和continue語句(允許break和continue語句使用標籤)實現C++種goto語句的功能。

聯合和結構

在C++中有三種數據結構:聯合、結構和類;Java中只有類,它可以實現上述三者的功能。

字符串

在C/C++中,字符串是通過字符數組實現的,但是由於數組的空間不是動態分配的,這容易出現越界錯誤,例如:常有預先設定的字符數組不能容納後輸入的字符串。在Java中,字符串是一類特定的對象,這使得字符串更具有一致性和可預見性。

Typedef、Define和預處理器

Java中不需要#define語句、預處理器或者typedef,但需要頭文件。在Java中一個類的信息必須包含在一個文件中,而C/C++中有關類的信息可能分散在多個文件中。

java如何調用c語言源文件並進行執行?

要在java中調用c語言的庫,需要使用Java提供了JNI。\x0d\x0a舉例說明\x0d\x0a在c語言中定義一個 void sayHello()函數(打印Hello World);然後在Java中調用這個函數顯示Hello Word.\x0d\x0a現在分別從Java和C語言兩部分說明:\x0d\x0a1. Java 部分\x0d\x0a首先定義一個HelloNative,在其中申明sayHello函數,函數要申明為Native 類型的.如下:\x0d\x0apublic class HelloNative {\x0d\x0apublic native void sayHello();\x0d\x0a}\x0d\x0a\x0d\x0a編譯這個類,生成class文件:\x0d\x0ajavac HelloWorld.java\x0d\x0a\x0d\x0a利用javah生成需要的h文件\x0d\x0ajavah HelloNative\x0d\x0a\x0d\x0a生成的 h文件大概如下:\x0d\x0a\x0d\x0a/* DO NOT EDIT THIS FILE – it is machine generated */\x0d\x0a#include \x0d\x0a/* Header for class HelloNative */\x0d\x0a\x0d\x0a#ifndef _Included_HelloNative\x0d\x0a#define _Included_HelloNative\x0d\x0a#ifdef __cplusplus\x0d\x0aextern “C” {\x0d\x0a#endif\x0d\x0a/*\x0d\x0a* Class: HelloNative\x0d\x0a* Method: sayHello\x0d\x0a* Signature: ()V\x0d\x0a*/\x0d\x0aJNIEXPORT void JNICALL Java_HelloNative_sayHello\x0d\x0a(JNIEnv *, jobject);\x0d\x0a\x0d\x0a#ifdef __cplusplus\x0d\x0a}\x0d\x0a#endif\x0d\x0a#endif\x0d\x0a\x0d\x0a可以看一下上面自動生成的程序,程序include了jni.h,這個頭文件在 $JAVA_HOME下的include文件夾下. 還可以發現生成的函數名是在之前的函數名前面加上了Java_HelloNative。\x0d\x0a2. C語言部分\x0d\x0a根據上面生成的h文件編寫相應的代碼實現,建立一個 HelloNative.cpp用來實現顯示Hello World的函數.如下:\x0d\x0a\x0d\x0a#include \x0d\x0a#include “HelloNative.h”\x0d\x0a\x0d\x0aJNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)\x0d\x0a{\x0d\x0aprintf(“Hello World!\n”);\x0d\x0a}\x0d\x0a\x0d\x0a代碼編寫完成之後,我們再用gcc編譯成庫文件,命令如下;\x0d\x0agcc -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\x0d\x0a\x0d\x0a這樣就會在當前目錄下生成一個libHelloNative.so的庫文件.這時需要的庫已經生成,在C語言下的工作已經完成了.\x0d\x0a接下來需要在Java中編寫一個程序測試一下.在程序前,需要將我們的庫載入進去.載入的方法是調用Java的 System.loadLibrary(“HelloNative”);\x0d\x0a\x0d\x0apublic class TestNative\x0d\x0a{\x0d\x0astatic {\x0d\x0atry {\x0d\x0aSystem.loadLibrary(“HelloNative”);\x0d\x0a}\x0d\x0acatch(UnsatisfiedLinkError e) {\x0d\x0aSystem.out.println( “Cannot load hello library:\n ” + e.toString() );\x0d\x0a}\x0d\x0a}\x0d\x0apublic static void main(String[] args) {\x0d\x0aHelloNative test = new HelloNative();\x0d\x0atest.sayHello();\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a但是再編譯後,運行的時候,問題又出現了.\x0d\x0aCannot load hello library:\x0d\x0ajava.lang.UnsatisfiedLinkError: no HelloNative in java.library.path\x0d\x0aException in thread “main” java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V\x0d\x0aat HelloNative.sayHello(Native Method)\x0d\x0aat TestNative.main(TestNative.java:13)\x0d\x0a\x0d\x0a載入庫失敗,但是庫明明就是放在當前文件夾下的,怎麼會載入失敗呢?\x0d\x0a用System.getProperty(“java.library.path”)查看,發現java.library.path中並不u存在當前的目錄.主要有以下的幾個解決辦法:\x0d\x0a1) 將生成的庫複製到java.library.path有的路徑中去,當然這樣不是很好\x0d\x0a2) 設置環境變量export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,將當前的目錄加入到LD_LIBRARY_PATH中\x0d\x0a3) 設置java 的選項,將當前的目錄加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH\x0d\x0a這樣之後程序就能夠成功的運行了.可以看見顯示的”Hello World!”了

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文件,雙擊,輸入代碼. 以下就是點”組建”菜單中的”編譯”、”組建”等命令進行調試了。 相信你會了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/156519.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-18 01:56
下一篇 2024-11-18 01:56

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論