当前位置:首页 > 互联网百科 > 正文内容

java 和c的具体区别(怎样用 jni来交互java与 c/c++)

wang1年前 (2024-01-24)184

java 和c的具体区别

JAVA是面向对象语言,C是面向过程语言。
1、C需要在目标平台上编译为机器码(二进制可执行文件)才能执行;Java可以在任何平台上编译为字节码(class文件),便可以在几乎所有平台上执行;
2、C编译过的文件可以直接执行,效率更高;Java编译过的文件必须在特定平台上的虚拟机内运行,性能相对较差;
3、Java属于静态编译型、面向对象的高级语言;C也属于静态编译型,但是面向过程的中级语言;C对于计算机基础设施具有更强的操控能力,但需要较丰富的经验和技巧;Java中较底层的代码通常使用C并基于JNI方式实现;
4、实际应用中,C更多的应用于操作系统、硬件驱动、设备控制等开发场景;Java则在服务器端编程中占据了主导地位;
5、最近几个月的Tiobe编程语言排行榜中,Java的排行有下降的趋势,C有缓慢上升的趋势,前者和后者在最近的排行榜中占据了头两把交椅,占有率均在百分之十八点几;
6、还有好多

怎样用 jni来交互java与 c/c++

 JNI是Java Native Interface的缩写,中文为JAVA本地调用。使用JNI可以很方便的用我们的Java程序调用C/C++程序。很多时候,某些功能用Java无法实现,比如说涉及到底层驱动的一些功能,这时候我们就可以利用JNI来调用C或者C++程序来实现,这就是JNI的强大之处。但是JNI也有它的缺点,使用java与本地已编译的代码交互,通常会丧失平台可移植性。
  下面是一个JNI例子,调用C++输出"hello world":

之一步:创建Java类,在里面定义一个本地 *** (用native关键字修饰的 *** )
  public native void sayHello();
第二步:使用javah命令(javah 类的全路径)生成本地 *** 的C++头文件
  在DOS窗口中进入工程所在目录,然后执行javah com.test.TestNative命令,执行完之后就会在当前目录生成一个后缀名为.h的头文件,如com_test_TestNative.h,这个头文件是根据包名和类名来命名的。

1 /* DO NOT EDIT THIS FILE - it is machine generated */
2 #include <jni.h>
3 /* Header for class com_test_TestNative */
4
5 #ifndef _Included_com_test_TestNative
6 #define _Included_com_test_TestNative
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 /*
11 * Class: com_test_TestNative
12 * Method: sayHello
13 * Signature: ()V
14 */
15 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello
16 (JNIEnv *, jobject);
17
18 #ifdef __cplusplus
19 }
20 #endif
21 #endif

  15、16行是对TestNative类中的本地 *** sayHello()的声明。这个h文件相当于我们在java里面的接口,这里声明了一个 Java_com_test_TestNative_sayHello (JNIEnv *, jobject); *** ,然后在我们的本地 *** 里面实现这个 *** ,也就是说我们在编写C/C++程序的时候所使用的 *** 名必须和这里的一致。
第三步:编写C/C++本地代码,生成动态链接库文件
  首先在VC6.0(当然也可以用其他工具)中创建一个dll工程---Win32 Dynamic-Link Library工程。然后将上面生成的头文件com_test_TestNative.h添加到该工程中,然后创建一个源文件引用该头文件并且实现头文件中本地函数的功能:

1 #include<iostream.h>
2 #include"com_test_TestNative.h"
3
4 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello(JNIEnv *env, jobject obj)
5 {
6 cout<<"hello world!"<<endl;
7 }

  这里因为com_test_TestNative.h中引入了jni.h所以要将jni.h加入到VC6.0安装目录下的Include目录中。jni.h在JDK安装目录下的include中,同时得件include/win32中的两个头文件jawt_md.h、jni_md.h也导入到VC6.0中。
  将所依赖的头文件导入之后,我们就可以构建该工程了,按F7就行了,完了会在工程目录中的Degug目录下生成一个动态链接库文件,我这里生成的是NativeCode.dll。我们就可以将该dll文件拷贝到环境变量path所包含的目录下给咱们的Java程序调用了,为了方便,我们也可以将dll所在的工程目录加入到环境变量path中去,这样可以避免每次都要拷贝的麻烦。注意修改环境变量之后要重启myeclipse。

第四步:Java调用本地函数

1 package com.test;
2
3 public class TestNative {
4 public native void sayHello();
5
6 /**
7 * @param args
8 */
9 public static void main(String[] args) {
10 System.loadLibrary("NativeCode");
11 TestNative tNative = new TestNative();
12 tNative.sayHello();
13 }
14 }

  第10行是加载动态链接库,JVM只需要加载一次就可以调用了,“NativeCode”是上面生成的动态链接库的名字,不含后缀名。
  运行该程序,成功打印输出了"hello world"。

下面分享相关内容的知识扩展:

在DOS中编译JAVA文件时提示JAVAC找不到Hello.java

Hello.java是我的源文件,存放在 C:\javacode目录中,文件类型是JAVA文件,绝对不是TXT文本,
我的是vwindowsXP3系统,环境变量如下classpath=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_14
path=C:\Program Files\JavaFX\javafx-sdk1.2\bin;C:\Program Files\JavaFX\javafx-sdk1.2\emulator\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%JAVA_HOME%\bin
我已经设置好变量了,而且运行javac -version 也会有版本信息提示出来输入javac和java都显示正常,我保存的文件名前后加的双引号是用中文打的,会影响JAVAC读取JAVA文件吗? 还有我已经cd到javacode下了,输入javac Hello.java提示javac找不到Hello.java文件,然后是:用法:javac <options> <source files> —help 用于列出可能的选项
2.1.3 了解JDK
接着来了解一下安装的东西有哪些。这里假设JDK与公用JRE各安装至C:\Program Files\Java\jdk1.5.0_06\及C:\Program Files\Java\jre1.5.0_06\。
公用JRE主要是为开发好的Java程序提供执行的平台。前面曾经说过,JDK本身也有自己的JRE,这个JRE位于JDK安装目录的jre目录下。以前面的安装为例,就是在C:\Program Files\Java\jdk1.5.0_06\jre中,JDK本身所附的JRE主要是开发Java程序时做测试之用。与公用JRE的主要差别在于JDK本身所附的JRE比公用JRE多了个server的VM(Virtual Machine)执行选项,如图2-5和图2-6所示。通过查看C:\Program Files\Java\jdk1.5.0_06\jre\bin与C:\Program Files\Java\jre1.5.0_06\bin就可以了解。

图2-5 JDK的JRE有server选项 图2-6 公用JRE没有server选项
server与client选项的差别在于所使用的VM不同,执行Java程序时默认会使用client VM。若使用server VM,会花比较长的启动时间及消耗较多的内存,为的是启动Java程序后可以获得较好的执行效能。初学者现阶段不用在乎启动server或client VM的差别,只要先知道有这两种VM即可。
如图2-7所示,继续来看看JDK的安装目录下有哪些东西。

图2-7 JDK安装目录的内容
bin目录
提供的是JDK的工具程序,包括javac、java、javadoc、appletviewer等程序。
demo目录
一些使用Java编写好的范例程序。
jre目录
JDK自己附带的JRE。
lib目录
工具程序实际上会使用的Java工具类(例如,javac工具程序实际上会去使用tools.jar中的com/sun/tools/javac/Main类)。
src.zip
Java提供的API类的源代码压缩文件。如果将来需要查看API的某些功能是如何实现的,可以查看这个文件中的源代码内容。
在大致了解JDK与JRE安装目录下的内容之后,这里作个总结,您到底要记得哪些东西?答案是JDK安装目录下的bin目录。因为当您编写完Java程序之后,无论是编译或执行程序,都会使用到bin目录下所提供的工具程序。

2.2 设置Path与Classpath
对于习惯图形化接口操作的初学者而言,在命令符模式下执行程序是一件陌生的事,也因此不了解Path路径设置的 *** 与作用,而Java执行的平台也有自己的一套路径规则来寻找编写好的Java类,也就是所谓的Classpath设置。本节将介绍如何进行这些相关的设置。
2.2.1 设置Path
在安装好JDK程序之后,在JDK安装目录(假设是C:\Program Files\Java\jdk1.5.0_06)下的bin目录中,会提供一些开发Java程序时必备的工具程序。对于Java的初学者,建议从命令符模式(在Windows 2000/XP下称之为命令提示符)下来操作这些工具程序。您可以在Windows 2000/XP的“开始”菜单中选择“运行”,输入“cmd”命令来打开命令符模式。
虽然您知道JDK的工具程序是位于bin目录下,但您的操作系统并不知道如何找到这些工具程序。所以当您输入javac尝试执行编译程序时,命令符模式下会告诉您找不到javac工具程序,如图2-8所示。

图2-8 出现这个信息表示找不到指定的工具程序
您必须告诉操作系统,应该到哪些目录下尝试找到您所想使用的工具程序。有几个 *** 可以进行这项设置,最简便的 *** 就是设置系统变量中的Path环境变量。在Windows 2000/XP下可以选择桌面上的“我的电脑”并单击鼠标右键,选择“属性”后切换至“高级”页面,并单击下方的“环境变量”按钮,在“环境变量”对话框中编辑Path变量,如图2-9所示。

图2-9 选择Path变量并单击“编辑”按钮以进行路径设置
如图2-10所示,在Path变量的“编辑系统变量”对话框中,在“变量值”文本框中先输入一个“;”,接着输入JDK bin目录的路径(这里假设是C:\Program Files\Java\jdk1.5.0_06\bin),然后单击“确定”按钮即可完成设置。

图2-10 在Path变量中加入JDK的bin目录路径
设置Path变量之后,要重新打开一个命令符模式才能重新读入Path变量内容,接着如果执行javac程序,应该可以看到图2-11所示的画面。

图2-11 若设置Path变量成功,就可以找到指定的工具程序
也可以在命令符模式下执行以下的命令,直接设置目前的环境变量,包括Path变量(这个设置在下次重新打开命令符模式时就不再有效):
set Path=%Path%;C:\Program Files\Java\jdk1.5.0_06\bin
由于以上介绍的Path设置都是寻找JDK安装目录下的bin目录,所以操作系统会搜索JDK安装目录下的工具程序。这样当执行java程序时,默认会使用JDK所附的JRE(即C:\Program Files\Java\jdk1.5.0_06\jre),而不是公用的JRE(即C:\Program Files\Java\jre1.5.0_06\)。
简单地说,操作系统会尝试在指定的Path变量中寻找指定的工具程序。当输入javac命令时,由于Path变量中有设置JDK的bin目录的路径,操作系统就可以根据这个信息来找到javac工具程序。
2.2.2 设置Classpath
Java执行环境本身就是一个平台,执行于这个平台上的程序是已编译完成的Java程序(后面会介绍到Java程序编译完成之后,会以.class文件存在)。如果将Java执行环境比喻为操作系统,如果设置Path变量是为了让操作系统找到指定的工具程序(以Windows来说就是找到.exe文件),则设置Classpath的目的就是让Java执行环境找到指定的Java程序(也就是.class文件)。
有几个 *** 可以设置Classpath,最简单的 *** 是在系统变量中新增Classpath环境变量。在图2-9中的“系统变量”下单击“新建”按钮,在“变量名”文本框中输入Classpath,在“变量值”文本框中输入Java类文件的位置。例如可以输入“.;C:\Program Files\Java\jdk1.5.0_06\lib\tools.jar; C:\Program Files\Java\jdk1.5.0_06\lib\rt.jar”(jar文件是zip压缩格式,其中包括.class文件和jar中的Classpath设置),每一路径中间必须以;作为分隔。
事实上JDK 5.0默认就会到当前工作目录(上面的.设置),以及JDK的lib目录(这里假设是C:\Program Files\Java\jdk1.5.0_06\lib)中寻找Java程序。所以如果Java程序是在这两个目录中,则不必设置Classpath变量也可以找得到,将来如果Java程序不是放置在这两个目录时,则可以按上述设置Classpath。
如果所使用的JDK工具程序具有Classpath命令选项,则可以在执行工具程序时一并指定Classpath。例如:
javac -classpath classpath1;classpath3...
其中classpath1、classpath 2是实际要指定的路径。也可以在命令符模式下执行以下的命令,直接设置目前的环境变量,包括Classpath变量(这个设置在下次重新打开命令符模式时就不再有效):
set CLASSPATH=%CLASSPATH%;classpath1;classpath3...
总而言之,设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序。

良葛格的话匣子:
以上介绍的是几个简单的Path与Classpath设置方式,实际上还有一些设置方式。本章最后列出了几个介绍Path、Classpath设置的网络资源链接,内容包括其他操作系统下的设置方式,您可以从中进一步了解相关的设置。

2.3 之一个Java程序
完成JDK相关环境设置之后,无论如何就先写一个简单的Java程序,以测试一下环境设置是否正确,顺便增强一些学习的信心。以下要介绍的之一个Java程序是会显示“嘿!我的之一个Java程序!”这段信息的简单程序。
2.3.1 编写和编译Java程序
在正式编写程序之前,先确定可以看得到的文件的扩展名。在Windows 2000/XP下默认是不显示文件的扩展名的,这会造成重新命名文件时的困扰。如果目前在“资源管理器”下无法看到文件的扩展名,应先执行工具栏上的“工具”|“文件夹选项”并切换至“查看”页面,取消“隐藏已知文件类型的扩展名”复选框,如图2-12所示。

图2-12 取消“隐藏已知文件类型的扩展名”复选框以显示扩展名
接着选择一个目录来编写Java源代码文件。假设该文件存储在C:\workspace目录,您要新增一个“文本文件”(也就是.txt文件),并重新命名文件为HelloJava.java。由于是将文本文件的扩展名从.txt改为.java,所以系统会询问您是否更改扩展名,应确定更改,接着双击HelloJava.java打开文件,并照着图2-13所示编写程序。

图2-13 之一个Java程序
这个程序有几点必须注意:
Java的源文件必须以扩展名 .java结束
这也就是必须让“资源管理器”显示扩展名的原因。
主文件名与类名称必须一致
Java程序的类名称是指class关键词(Keyword)后的名称。就这个例子而言,也就是HelloJava,该名称必须与HelloJava.java的主文件名(HelloJava)一致。
注意每个字母的大小写
Java程序中会区分字母的大小写,System与system对Java程序来说是不一样的名称。
空白只能是半角空格符或是Tab字符
有些初学者可能不小心输入了全角空格符,这很难检查出来。
写好程序并存盘后,接着打开一个命令符模式,并使用以下的命令切换至HelloJava.java所在的目录(在此例中是C:\workspace):
> cd C:\workspace
接着使用javac工具程序来编译.java文件,这里指定编译HelloJava.java。命令如下:
C:\workspace\javac HelloJava.java
如果编译顺利成功,则在HelloJava.java所在的目录,会出现一个HelloJava.class文件,这是已经编译完成的Java字节码(Bytecodes)文件程序。
您可能会遇到以下的几个错误,这表示您有一些地方操作有误:
error: cannot read: HelloJava.java
这表示javac工具程序找不到您指定的.java文件,请检查文件是否存在目前的目录中,或是文件名称是否有误。
HelloJava.java:1: class HelloJava is public, should be declared in a file named HellJava.java
类名称与主文件名不符,请确定主文件名与类名称是相同的。
HelloJava.java:3: cannot find symbol
程序代码中某些部分输入错了,最常发生的原因可能是没有注意到字母大小写。
javac 不是内部或外部命令、可执行的程序或批量文件
Path设置有误或没有在Path中加入JDK的bin目录,请参考2.2节的内容。
2.3.2 执行Java程序
在顺利编译出 .class的文件之后,可以使用java工具程序来执行它。执行时必须指定类名称,就以上的例子来说,也就是指定HelloJava.class这个文件的主文件名。命令执行方式如下:
C:\workspace>java HelloJava
java工具程序会根据您指定的类名称,实际加载.class的文件,以上例来说,就是载入HelloJava.class并执行,执行的结果应该是图2-14所示的画面。

图2-14 执行之一个Java程序的成功画面
您可能会遇到以下的几个错误,这表示您有一些地方操作有误:
Exception in thread"main" java.lang.NoClassDefFoundError
java工具程序找不到您所指定的类,请确定指定的类存在目前的目录中,名称是否指定正确(如果是旧版的JDK,可能必须在Classpath中加入.,表示可于目前目录中找到所指定的类)。
Exception in thread "main" java.lan.NosuchMethodError: main
没有指定Java程序的入口(Entry Point)。java工具程序指定的类必须要有一个程序入口,也就是必须包括main(String[] args)这个 *** (Method),请确定您的程序中包括它,必须与图2-13所示的HelloJava.java内容一致。
在后面的章节中,如果不是要特别强调,就不再重复指出如何编译与执行Java程序。当在后面的章节中说要编译Java程序时,就是指使用javac工具程序来编译.java;而说要执行Java程序时,就是指使用java工具程序来执行指定的Java类。

为什么总是提示错误:无法读取:HelloWorld.java

新手求教一个老问题(折腾了几天都没有解决,甚是郁闷)
从网上下载了jdk1.5.0, 安装路径为C:\jdk1.5.0 另一个关于jre的安装路径就是系统缺省的路径;然后设置环境变量(系统变量),PATH=×××\;c:\jdk1.5.0\bin CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; HOME_PATH=c:\jdk1.5.0 (个人认为这一切都没有问题)
之后再在E盘新建文件夹放JDK代码 E:\java\HelloWorld.java 代码如下
public class HelloWorld
{
public static void main(String[]args)
{
System.out.println("helloworld");
}
}
最后在DOS下 编译代码 命令如下
E:\javac HelloWelcome.java 后出现错误“错误:无法读取:HelloWorld.java“
反复尝试都是如此,因为我的系统是VISTA所以就又下载安装了JDK1.6运行,但结果依然如此。
呵呵,问题有点长。希望高手能帮助我一下
对不起,拼写错误。应该是JAVA_HOME=c:\jdk1.5.0
C:\Users\IBM>set
CLASSPATH=.;C:\jdk1.5.0\lib\dt.jar;C:\jdk1.5.0\lib\tools.jar;
JAVA_HOME=C:\jdk1.5.0
Path=***;C:\jdk1.5.0\bin
这是set的输出(由于长度受限制,只取其中部分)
直接运行javac 也是可以的
2.1.3 了解JDK
接着来了解一下安装的东西有哪些。这里假设JDK与公用JRE各安装至C:\Program Files\Java\jdk1.5.0_06\及C:\Program Files\Java\jre1.5.0_06\。
公用JRE主要是为开发好的Java程序提供执行的平台。前面曾经说过,JDK本身也有自己的JRE,这个JRE位于JDK安装目录的jre目录下。以前面的安装为例,就是在C:\Program Files\Java\jdk1.5.0_06\jre中,JDK本身所附的JRE主要是开发Java程序时做测试之用。与公用JRE的主要差别在于JDK本身所附的JRE比公用JRE多了个server的VM(Virtual Machine)执行选项,如图2-5和图2-6所示。通过查看C:\Program Files\Java\jdk1.5.0_06\jre\bin与C:\Program Files\Java\jre1.5.0_06\bin就可以了解。

图2-5 JDK的JRE有server选项 图2-6 公用JRE没有server选项
server与client选项的差别在于所使用的VM不同,执行Java程序时默认会使用client VM。若使用server VM,会花比较长的启动时间及消耗较多的内存,为的是启动Java程序后可以获得较好的执行效能。初学者现阶段不用在乎启动server或client VM的差别,只要先知道有这两种VM即可。
如图2-7所示,继续来看看JDK的安装目录下有哪些东西。

图2-7 JDK安装目录的内容
bin目录
提供的是JDK的工具程序,包括javac、java、javadoc、appletviewer等程序。
demo目录
一些使用Java编写好的范例程序。
jre目录
JDK自己附带的JRE。
lib目录
工具程序实际上会使用的Java工具类(例如,javac工具程序实际上会去使用tools.jar中的com/sun/tools/javac/Main类)。
src.zip
Java提供的API类的源代码压缩文件。如果将来需要查看API的某些功能是如何实现的,可以查看这个文件中的源代码内容。
在大致了解JDK与JRE安装目录下的内容之后,这里作个总结,您到底要记得哪些东西?答案是JDK安装目录下的bin目录。因为当您编写完Java程序之后,无论是编译或执行程序,都会使用到bin目录下所提供的工具程序。

2.2 设置Path与Classpath
对于习惯图形化接口操作的初学者而言,在命令符模式下执行程序是一件陌生的事,也因此不了解Path路径设置的 *** 与作用,而Java执行的平台也有自己的一套路径规则来寻找编写好的Java类,也就是所谓的Classpath设置。本节将介绍如何进行这些相关的设置。
2.2.1 设置Path
在安装好JDK程序之后,在JDK安装目录(假设是C:\Program Files\Java\jdk1.5.0_06)下的bin目录中,会提供一些开发Java程序时必备的工具程序。对于Java的初学者,建议从命令符模式(在Windows 2000/XP下称之为命令提示符)下来操作这些工具程序。您可以在Windows 2000/XP的“开始”菜单中选择“运行”,输入“cmd”命令来打开命令符模式。
虽然您知道JDK的工具程序是位于bin目录下,但您的操作系统并不知道如何找到这些工具程序。所以当您输入javac尝试执行编译程序时,命令符模式下会告诉您找不到javac工具程序,如图2-8所示。

图2-8 出现这个信息表示找不到指定的工具程序
您必须告诉操作系统,应该到哪些目录下尝试找到您所想使用的工具程序。有几个 *** 可以进行这项设置,最简便的 *** 就是设置系统变量中的Path环境变量。在Windows 2000/XP下可以选择桌面上的“我的电脑”并单击鼠标右键,选择“属性”后切换至“高级”页面,并单击下方的“环境变量”按钮,在“环境变量”对话框中编辑Path变量,如图2-9所示。

图2-9 选择Path变量并单击“编辑”按钮以进行路径设置
如图2-10所示,在Path变量的“编辑系统变量”对话框中,在“变量值”文本框中先输入一个“;”,接着输入JDK bin目录的路径(这里假设是C:\Program Files\Java\jdk1.5.0_06\bin),然后单击“确定”按钮即可完成设置。

图2-10 在Path变量中加入JDK的bin目录路径
设置Path变量之后,要重新打开一个命令符模式才能重新读入Path变量内容,接着如果执行javac程序,应该可以看到图2-11所示的画面。

图2-11 若设置Path变量成功,就可以找到指定的工具程序
也可以在命令符模式下执行以下的命令,直接设置目前的环境变量,包括Path变量(这个设置在下次重新打开命令符模式时就不再有效):
set Path=%Path%;C:\Program Files\Java\jdk1.5.0_06\bin
由于以上介绍的Path设置都是寻找JDK安装目录下的bin目录,所以操作系统会搜索JDK安装目录下的工具程序。这样当执行java程序时,默认会使用JDK所附的JRE(即C:\Program Files\Java\jdk1.5.0_06\jre),而不是公用的JRE(即C:\Program Files\Java\jre1.5.0_06\)。
简单地说,操作系统会尝试在指定的Path变量中寻找指定的工具程序。当输入javac命令时,由于Path变量中有设置JDK的bin目录的路径,操作系统就可以根据这个信息来找到javac工具程序。
2.2.2 设置Classpath
Java执行环境本身就是一个平台,执行于这个平台上的程序是已编译完成的Java程序(后面会介绍到Java程序编译完成之后,会以.class文件存在)。如果将Java执行环境比喻为操作系统,如果设置Path变量是为了让操作系统找到指定的工具程序(以Windows来说就是找到.exe文件),则设置Classpath的目的就是让Java执行环境找到指定的Java程序(也就是.class文件)。
有几个 *** 可以设置Classpath,最简单的 *** 是在系统变量中新增Classpath环境变量。在图2-9中的“系统变量”下单击“新建”按钮,在“变量名”文本框中输入Classpath,在“变量值”文本框中输入Java类文件的位置。例如可以输入“.;C:\Program Files\Java\jdk1.5.0_06\lib\tools.jar; C:\Program Files\Java\jdk1.5.0_06\lib\rt.jar”(jar文件是zip压缩格式,其中包括.class文件和jar中的Classpath设置),每一路径中间必须以;作为分隔。
事实上JDK 5.0默认就会到当前工作目录(上面的.设置),以及JDK的lib目录(这里假设是C:\Program Files\Java\jdk1.5.0_06\lib)中寻找Java程序。所以如果Java程序是在这两个目录中,则不必设置Classpath变量也可以找得到,将来如果Java程序不是放置在这两个目录时,则可以按上述设置Classpath。
如果所使用的JDK工具程序具有Classpath命令选项,则可以在执行工具程序时一并指定Classpath。例如:
javac -classpath classpath1;classpath3...
其中classpath1、classpath 2是实际要指定的路径。也可以在命令符模式下执行以下的命令,直接设置目前的环境变量,包括Classpath变量(这个设置在下次重新打开命令符模式时就不再有效):
set CLASSPATH=%CLASSPATH%;classpath1;classpath3...
总而言之,设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序。

良葛格的话匣子:
以上介绍的是几个简单的Path与Classpath设置方式,实际上还有一些设置方式。本章最后列出了几个介绍Path、Classpath设置的网络资源链接,内容包括其他操作系统下的设置方式,您可以从中进一步了解相关的设置。

2.3 之一个Java程序
完成JDK相关环境设置之后,无论如何就先写一个简单的Java程序,以测试一下环境设置是否正确,顺便增强一些学习的信心。以下要介绍的之一个Java程序是会显示“嘿!我的之一个Java程序!”这段信息的简单程序。
2.3.1 编写和编译Java程序
在正式编写程序之前,先确定可以看得到的文件的扩展名。在Windows 2000/XP下默认是不显示文件的扩展名的,这会造成重新命名文件时的困扰。如果目前在“资源管理器”下无法看到文件的扩展名,应先执行工具栏上的“工具”|“文件夹选项”并切换至“查看”页面,取消“隐藏已知文件类型的扩展名”复选框,如图2-12所示。

图2-12 取消“隐藏已知文件类型的扩展名”复选框以显示扩展名
接着选择一个目录来编写Java源代码文件。假设该文件存储在C:\workspace目录,您要新增一个“文本文件”(也就是.txt文件),并重新命名文件为HelloJava.java。由于是将文本文件的扩展名从.txt改为.java,所以系统会询问您是否更改扩展名,应确定更改,接着双击HelloJava.java打开文件,并照着图2-13所示编写程序。

图2-13 之一个Java程序
这个程序有几点必须注意:
Java的源文件必须以扩展名 .java结束
这也就是必须让“资源管理器”显示扩展名的原因。
主文件名与类名称必须一致
Java程序的类名称是指class关键词(Keyword)后的名称。就这个例子而言,也就是HelloJava,该名称必须与HelloJava.java的主文件名(HelloJava)一致。
注意每个字母的大小写
Java程序中会区分字母的大小写,System与system对Java程序来说是不一样的名称。
空白只能是半角空格符或是Tab字符
有些初学者可能不小心输入了全角空格符,这很难检查出来。
写好程序并存盘后,接着打开一个命令符模式,并使用以下的命令切换至HelloJava.java所在的目录(在此例中是C:\workspace):
> cd C:\workspace
接着使用javac工具程序来编译.java文件,这里指定编译HelloJava.java。命令如下:
C:\workspace\javac HelloJava.java
如果编译顺利成功,则在HelloJava.java所在的目录,会出现一个HelloJava.class文件,这是已经编译完成的Java字节码(Bytecodes)文件程序。
您可能会遇到以下的几个错误,这表示您有一些地方操作有误:
error: cannot read: HelloJava.java
这表示javac工具程序找不到您指定的.java文件,请检查文件是否存在目前的目录中,或是文件名称是否有误。
HelloJava.java:1: class HelloJava is public, should be declared in a file named HellJava.java
类名称与主文件名不符,请确定主文件名与类名称是相同的。
HelloJava.java:3: cannot find symbol
程序代码中某些部分输入错了,最常发生的原因可能是没有注意到字母大小写。
javac 不是内部或外部命令、可执行的程序或批量文件
Path设置有误或没有在Path中加入JDK的bin目录,请参考2.2节的内容。
2.3.2 执行Java程序
在顺利编译出 .class的文件之后,可以使用java工具程序来执行它。执行时必须指定类名称,就以上的例子来说,也就是指定HelloJava.class这个文件的主文件名。命令执行方式如下:
C:\workspace>java HelloJava
java工具程序会根据您指定的类名称,实际加载.class的文件,以上例来说,就是载入HelloJava.class并执行,执行的结果应该是图2-14所示的画面。

图2-14 执行之一个Java程序的成功画面
您可能会遇到以下的几个错误,这表示您有一些地方操作有误:
Exception in thread"main" java.lang.NoClassDefFoundError
java工具程序找不到您所指定的类,请确定指定的类存在目前的目录中,名称是否指定正确(如果是旧版的JDK,可能必须在Classpath中加入.,表示可于目前目录中找到所指定的类)。
Exception in thread "main" java.lan.NosuchMethodError: main
没有指定Java程序的入口(Entry Point)。java工具程序指定的类必须要有一个程序入口,也就是必须包括main(String[] args)这个 *** (Method),请确定您的程序中包括它,必须与图2-13所示的HelloJava.java内容一致。
在后面的章节中,如果不是要特别强调,就不再重复指出如何编译与执行Java程序。当在后面的章节中说要编译Java程序时,就是指使用javac工具程序来编译.java;而说要执行Java程序时,就是指使用java工具程序来执行指定的Java类。

java运行显示“找不到或无法加载主类”!

如图
用javac编译记事本文件成功,并且生成了.class文件,但是用java运行时提示找不到或无法加载主类

该如何解决呢?解决办法如下:

1.由于是在运行阶段出现的问题,那么可能是环境变量配置不当的问题,即可能是classpath路径配置错误,而导致.class文件无法加载。那么此时你可以检查是否配置好classpath路径,一般来说classpath路径配置如下:

.;%java_home%\lib;%java_home%\lib\tools.jar; (注意前面的 . 以及 ; 缺一不可)

其中.表示当前路径,;表示分隔符。

2.如果你试过了很多次,classpath也配置对了,依旧出现这个错误,注意你使用的测试代码,是否在某一个包名的下面;

比如说如下测试代码:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文链接:http://www.370seo.com/16634.html

“java 和c的具体区别(怎样用 jni来交互java与 c/c++)” 的相关文章

十二星座都代表什么翅膀?十二星座专属翅膀是什么样的

十二星座都代表什么翅膀?十二星座专属翅膀是什么样的

本文共计14616个文字,预计阅读时间需要48分34秒,由作者编辑整理创作于2023年08月09日 06点28分22秒。十二星座都代表什么翅膀? 1、白羊座:蝴蝶翅膀白羊座的代表性翅膀是蝴蝶翅膀,大部分蝴蝶翅膀色彩鲜艳,这与白羊座热情外向的性格非常一致。大多数白羊座的外貌美丽迷人,很容易吸引人的眼球...

十二星座女生怎样对待心动男生(十二星座男生喜欢女生的表现)

本文共计5019个文字,预计阅读时间需要16分34秒,由作者编辑整理创作于2023年08月09日 14点00分52秒。十二星座女生怎样对待心动男生白羊座:一反常态默默在背后花痴 白羊座女生性格上热情直接,那她们对心动男生也是如此吗?其实反之,居然一反常态默默在背后花痴,变得畏畏缩缩的。只会默默...

得罪12星座的后果(12星座为什么会变心,得罪十二星座又会有什么后果)

得罪12星座的后果(12星座为什么会变心,得罪十二星座又会有什么后果)

本文共计2421个文字,预计阅读时间需要7分55秒,由作者编辑整理创作于2023年08月09日 15点47分53秒。得罪12星座的后果双子座12星座为什么会变心,得罪十二星座又会有什么后果 白羊座:失去兴趣。金牛座:经不起诱惑。双子座:喜欢新鲜感。巨蟹座:害怕负责任。狮子座:背叛过他。处女座:不敢肯...

十二星座男人背后的谎言是啥?十二星座男生是怎么样的性格

十二星座男人背后的谎言是啥?十二星座男生是怎么样的性格

本文共计5141个文字,预计阅读时间需要16分59秒,由作者编辑整理创作于2023年08月11日 12点18分51秒。十二星座男人背后的谎言是啥?情产始直谎言陪伴左右些善意些意些故意星座男谎言往往更加隐蔽掌握规律知道哪些誓言哪些弥谎认清谎言别让真冷落别让虚假情意逞白羊座 邪恶星级★★★★★ 美丽谎言...

一王九帅十二宫3什么时候出来(一王九帅十二宫4出了么?)

本文共计1238个文字,预计阅读时间需要3分58秒,由作者编辑整理创作于2023年08月12日 22点37分03秒。一王九帅十二宫3什么时候出来 要有具体的理由, 11月!我觉得,很有可能是一年后吧!gn就是喜欢吊胃口。没事写N本。一本过得不好看。 一王九帅十二宫4出了麽?RT没有,还要一段时间才...

洪七公死在哪一集?洪七公是怎么死的?是被谁气死的?

洪七公死在哪一集?洪七公是怎么死的?是被谁气死的?

本文共计3739个文字,预计阅读时间需要12分18秒,由作者编辑整理创作于2023年08月13日 14点54分59秒。洪七公死在哪一集? 在《神雕侠侣》的第10回,少年英侠 洪七公是怎么死的?是被谁气死的? 笑死的,晚年与欧阳锋于华山比武,两人出掌比起了内力,但这时发生了奇妙的状况,原来两人各将《九...