A. 用java程序
一、JAVA中所需要做的工作
在JAVA程序中,首先需要在類中聲明所調用的庫名稱,如下:
static {
System.loadLibrary(「goodluck」);
}
在這里,庫的擴展名字可以不用寫出來,究竟是DLL還是SO,由系統自己判斷。
還需要對將要調用的方法做本地聲明,關鍵字為native。並且只需要聲明,而不需要具 體實現。如下:
public native static void set(int i);
public native static int get();
然後編譯該JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就會生成C/C++的頭文件。
例如程序testdll.java,內容為:
public class testdll
{
static
{
System.loadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args)
{
testdll test = new testdll();
test.set(10);
System.out.println(test.get());
}
}
用javac testdll.java編譯它,會生成testdll.class。
再用javah testdll,則會在當前目錄下生成testdll.h文件,這個文件需要被C/C++程序調用來生成所需的庫文件。
二、C/C++中所需要做的工作
對於已生成的.h頭文件,C/C++所需要做的,就是把它的各個方法具體的實現。然後編譯連接成庫文件即可。再把庫文件拷貝到JAVA程序的路徑下面,就可以用JAVA調用C/C++所實現的功能了。
接上例子。我們先看一下testdll.h文件的內容:
#i nclude <jni.h>
#ifndef _Included_testdll
#define _Included_testdll
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
在具體實現的時候,我們只關心兩個函數原型
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass); 和
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);
這里JNIEXPORT和JNICALL都是JNI的關鍵字,表示此函數是要被JNI調用的。而jint是以JNI為中介使JAVA的int類型與本地的int溝通的一種類型,我們可以視而不見,就當做int使用。函數的名稱是JAVA_再加上java程序的package路徑再加函數名組成的。參數中,我們也只需要關心在JAVA程序中存在的參數,至於JNIEnv*和jclass我們一般沒有必要去碰它。
好,下面我們用testdll.cpp文件具體實現這兩個函數:
#i nclude "testdll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j)
{
i = j;
}
編譯連接成庫文件,本例是在WINDOWS下做的,生成的是DLL文件。並且名稱要與JAVA中需要調用的一致,這里就是goodluck.dll 。把goodluck.dll拷貝到testdll.class的目錄下,java testdll運行它,就可以觀察到結果了。
B. java應用程序是什麼
Java是Sun公司推出的一種編程語言。它是一種通過解釋方式來執行的語言,語法規則和C++類似。同時,Java也是一種跨平台的程序設計語言。用Java語言編寫的程序叫做「Applet」(小應用程序),用編譯器將它編譯成類文件後,將它存在WWW頁面中,並在HTML檔上作好相應標記,用戶端只要裝上Java的客戶軟體就可以在網上直接運行「Applet」。 Java非常適合於企業網路和Internet環境,現在已成為Internet中最受歡迎、最有影響的編程語言之一。 Java有許多值得稱道的優點,如簡單、面向對象、分布式、解釋性、可靠、安全、結構中立性、可移植性、高性能、多線程、動態性等。Java擯棄了C++中各種弊大於利的功能和許多很少用到的功能。 Jave可以運行與任何微處理器,用Java開發的程序可以在網路上傳輸,並運行於任何客戶機上。
C. JAVA程序是什麼
Java包含了一種計算機編程語言和一個平台。
Java編程語言是一種高級語言。由Sun微系統公司(Sun Macrosystem)發布,並作為一種開放的標准進行提供。
Java平台包括了Java虛擬機和Java應用程序介面(API)。
Java將原程序編譯成位元組碼(bytecode),並通過Java虛擬機(JVM)解釋位元組碼的方式來執行。因為這種運行方式,只要針對不同的計算機平台准備相應的Java虛擬機,就可以很方便的實現Java語言的跨平台性。因此,Java非常適合於企業網路和Internet環境,現在已成為Internet中最受歡迎、最有影響的編程語言之一。 Java有許多值得稱道的優點,如簡單、面向對象、分布式、解釋性、可靠、安全、結構中立性、可移植性、高性能、多線程、動態性等。
D. 編寫java程序
第3題,按照題目要求編寫的Java程序如下
public class VolumeTest{
int volume(int a){
return a*a*a;
}
int volume(int a,int b,int c){
return a*b*c;
}
double volume(double r,double h){
return Math.PI*r*r*h;
}
public static void main(String[] args){
VolumeTest vt=new VolumeTest();
System.out.println("立方體體積為"+vt.volume(3));
System.out.println("長方體體積為"+vt.volume(3,4,5));
System.out.println("圓柱體體積為"+vt.volume(3.2,5.2));
}
}
E. JAVA程序幾個經典的程序
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class ResponseToMouse extends Applet implements ActionListener,MouseListener,MouseMotionListener
{
int xPos,yPos,k=0;
Button btnDraw,btnClean,btnErase;
public void init()
{
btnDraw = new Button("畫圖");
btnClean = new Button("清屏");
btnErase = new Button("擦除");
add(btnDraw);
add(btnClean);
add(btnErase);
btnDraw.addActionListener(this);
btnClean.addActionListener(this);
btnErase.addActionListener(this);
addMouseListener(this);
addMouseMotionListener(this);
}
public void paint(Graphics g)
{
if(k==1)
{
g.setColor(Color.red);
g.fillOval(xPos-5,yPos-5,10,10);
}
if(k==2)
{
super.update(g);
}
if(k==3)
{
g.setColor(Color.white);
g.fillOval(xPos-5,yPos-5,10,10);
}
}
public void actionPerformed(ActionEvent e){
if (e.getSource()==btnDraw)
k=1;
if(e.getSource()==btnClean){
k=2;
repaint();
}
if(e.getSource()==btnErase)
k=3;
}
public void mouseClicked(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
showStatus("滑鼠鍵按下");
}
public void mouseReleased(MouseEvent e)
{
showStatus("滑鼠鍵釋放");
}
public void mouseEntered(MouseEvent e)
{
showStatus("滑鼠進入");
}
public void mouseExited(MouseEvent e)
{
showStatus("滑鼠移出");
}
public void mouseDragged(MouseEvent e)
{
xPos=e.getX();
yPos=e.getY();
repaint();
}
public void mouseMoved(MouseEvent e)
{
showStatus("滑鼠移動");
}
public void update(Graphics g){
paint(g);
}
}
F. 什麼是JAVA程序
Java手機軟體平台採用的基本Java平台是CLDC (Connected Limited Device Configuration)和MIDP (Mobile Information Device Profile),是J2ME (Java 2 Micro Edition)的一部分,在中國一般稱為「無線Java」技術。此前,有人把它叫做「K-Java」;其實,K-Java的叫法只是Sun公司在開發 KVM Java虛擬機時的項目代號,在該技術被正式命名為KVM後,就不再用K-Java了。
Java技術的開放性、安全性和龐大的社會已有資源,以及其跨平台性,即「編寫一次,到處運行」的特點,使Java技術成為智能手機軟體平台的事實標准。
Java,是一種可以編寫跨平台應用軟體的面向對象的程序設計語言,由升陽(太陽微電子,Sun Microsystems)公司的James Gosling等人於1990年代初開發
參考資料:zh.wikipedia.org/wiki/Java
Java好象隨處可見 - 甚至在TV中。盡管如此,說清楚Java是什
么和它能做什麼卻不那麼容易。剛開始接觸Java的人通常有三
個問題:
什麼是Java?
Java能做什麼?
Java怎樣改變我的生活?
讓我們先回答第一個問題:什麼是Java?
Java既是一種編程語言,又是一個平台。
Java程序語言
Java是具有以下特徵的高級程序語言:
* 簡單
* 面向對象
* 可分布
* 可解釋
* 強壯
* 安全性
* 結構化
* 輕便
* 功能強大
* 多線程
* 動態
Java既可以被編譯,也可以被解釋。通過編譯器,可以把Java
程序翻譯成一種中間代碼 - 稱為位元組碼 - 可以被Java解釋器
解釋的獨立於平台的代碼。通過解釋器,每條Java位元組指令被
分析,然後在計算機上運行。只需編譯一次,程序運行時解釋
執行。下圖說明了它是如何工作的:
1flow.gif (3652 bytes)
可以把Java位元組碼看作運行在Java虛擬機(Java VM)上的機器
代碼指令。每中Java解釋器,不管是Java開發工具還是可以運
行Java小應用程序的Web瀏覽器,都是一種Java VM的實例。Java
VM也可以由硬體實現。
Java位元組碼使「寫一次,到處運行」成為可能。可以在任何有
Java編譯器的平台上把Java程序編譯成位元組碼。這個位元組碼可以
運行在任何Java VM上。例如,同一個Java程序可以運行在Windows
NT、Solaris和Macintosh上。
2comp.gif (6076 bytes)
Java平台
平台是程序運行的硬體或軟體環境。Java平台與大多數其它平台
不同之處在於它是運行於其它基於硬體平台的純軟體平台。大
多數其它平台是硬體和操作系統的結合。
Java平台由兩部分組成:
* Java虛擬機(Java VM)
* Java應用程序界面(Java API)
我們已經介紹了Java VM,它是Java平台的基礎,可以移植到各
種基於硬體的平台上。
Java API是軟體組件的集合,它們提供了很多有用的功能,如圖
形用戶界面(GUI)。Java API被分組為相關組件的庫(包)。
下圖描述了一個運行在Java平台上的Java程序,如應用程
序(application)或小應用程序(applet)。如圖中顯示的,Java
API和VM把Java程序從硬體依賴中分離出來。
3play.gif (1479 bytes)
作為一種獨立於平台的環境,Java比本地代碼慢一些。然而,聰
明的編譯器、很好地調制過的解釋器和即時位元組碼編譯器可以
在不犧牲可移植性的條件下使Java的表現接近本地代碼。