首页 > 编程知识 正文

java查询doc语言,Java查找

时间:2024-04-24 11:43:04 阅读:333697 作者:ZENJ

本文目录一览:

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。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!"了

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文件,双击,输入代码. 以下就是点”组建”菜单中的”编译”、”组建”等命令进行调试了。 相信你会了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。