當前位置:首頁 » 編程語言 » java引用函數

java引用函數

發布時間: 2023-02-11 09:14:53

java函數調用(在一個類中怎麼調用另一個類的變數和函數)

import java.util.Scanner;

public class Student {//帶有主函數的類,Score類在下面
String name;
Score score=new Score();//此句有重大嫌疑

public String introce()
{

return(name+"\t"+score.java+"\t"+score.db+"\t"+score.c+"\t"+score.sum()+"\t"+score.avg());//name之後的全部顯示為0
}

public static void main(String args[])
{
Student stu[]=new Student[10];
Score score[]=new Score[10];
Scanner in=new Scanner(System.in);

for(int i=0;i<3;i++)
{
stu[i]=new Student();
score[i]=new Score();
System.out.println("學生"+(i+1)+"的名字:");
stu[i].name=in.next();
System.out.println("學生"+(i+1)+"java成績:");
score[i].java=in.nextFloat();
System.out.println("學生"+(i+1)+"DB成績:");
score[i].db=in.nextFloat();
System.out.println("學生"+(i+1)+"c語言成績:");
score[i].c=in.nextFloat();
}
System.out.println("姓名\tjava成績\tDB成績是\tc語言成績\t總成績\t平均成績");
for(int j=0;j<3;j++)
{
System.out.println(stu[j].introce());
}

}
} //錯誤之二:少了一個右邊大括弧,造成第一個類不完整
class Score {//score類 錯誤地方一:在一個java文件中只允許有一個功能類 去掉public 就好了

float java,db,c;
public float sum()
{
float ssum=java+db+c;
return ssum;
}
public float avg()
{
return sum()/3;
}
}

⑵ java中調用c語言函數

要在java中調用c語言的庫,需要使用Java提供了JNI。
舉例說明
在c語言中定義一個 void sayHello()函數(列印Hello World);然後在Java中調用這個函數顯示Hello Word.
現在分別從Java和C語言兩部分說明:
1. Java 部分
首先定義一個HelloNative,在其中申明sayHello函數,函數要申明為Native 類型的.如下:
public class HelloNative {
public native void sayHello();
}

編譯這個類,生成class文件:
javac HelloWorld.java

利用javah生成需要的h文件
javah HelloNative

生成的 h文件大概如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */

#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

可以看一下上面自動生成的程序,程序include了jni.h,這個頭文件在 $JAVA_HOME下的include文件夾下. 還可以發現生成的函數名是在之前的函數名前面加上了Java_HelloNative。
2. C語言部分
根據上面生成的h文件編寫相應的代碼實現,建立一個 HelloNative.cpp用來實現顯示Hello World的函數.如下:

#include <stdio.h>
#include "HelloNative.h"

JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)
{
printf("Hello World!\n");
}

代碼編寫完成之後,我們再用gcc編譯成庫文件,命令如下;
gcc -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

這樣就會在當前目錄下生成一個libHelloNative.so的庫文件.這時需要的庫已經生成,在C語言下的工作已經完成了.
接下來需要在Java中編寫一個程序測試一下.在程序前,需要將我們的庫載入進去.載入的方法是調用Java的 System.loadLibrary("HelloNative");

public class TestNative
{
static {
try {
System.loadLibrary("HelloNative");
}
catch(UnsatisfiedLinkError e) {
System.out.println( "Cannot load hello library:\n " + e.toString() );
}
}
public static void main(String[] args) {
HelloNative test = new HelloNative();
test.sayHello();
}
}

但是再編譯後,運行的時候,問題又出現了.
Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
at HelloNative.sayHello(Native Method)
at TestNative.main(TestNative.java:13)

載入庫失敗,但是庫明明就是放在當前文件夾下的,怎麼會載入失敗呢?
用System.getProperty("java.library.path")查看,發現java.library.path中並不u存在當前的目錄.主要有以下的幾個解決辦法:
1) 將生成的庫復制到java.library.path有的路徑中去,當然這樣不是很好
2) 設置環境變數export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,將當前的目錄加入到LD_LIBRARY_PATH中
3) 設置java 的選項,將當前的目錄加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH
這樣之後程序就能夠成功的運行了.可以看見顯示的"Hello World!"了

⑶ java中一個類怎麼調用另一個類中的函數

首先這兩個類不在同一個包
1 在usermn中導包
import md.md5;
2.在usermn中創建md5的對象
md5 XX = new md5();
接下來就可以用XX.getMD5ofStr(String inbuf);
調用到md5類裡面的函數

滿意請採納 多謝合作!!

⑷ java中的函數調用怎麼理解

函數調用可以理解為:
你想去買一樣東西,這時,可能會叫你的秘書去幫你買它。
您的秘書可能不熟悉市場,這時她委任采購部門去幫她購買你需要的東西。
不好意思,昨天有事匆忙留下一段,還有一段沒有完成。。。
在JAVA中怎麼使用 什麼時候能用到?
我就大致的回答一下吧。如果不合心意,還請諒解!
OOP強調低耦合,高內聚。單一職責原則。還有許多模式以及原則,使你的系統富有彈性,易於擴展,修改,維護。
內聚就是一個模塊內各個元素彼此結合的緊密程度,高內聚就是一個模塊內各個元素彼此結合的緊密程度高。
所謂高內聚是指一個軟體模塊是由相關性很強的代碼組成,只負責一項任務,也就是常說的單一責任原則。
耦合:一個軟體結構內不同模塊之間互連程度的度量(耦合性也叫塊間聯系。指軟體系統結構中各模塊間相互聯系緊密程度的一種度量。模塊之間聯系越緊密,其耦合性就越強,模塊的獨立性則越差,模塊間耦合的高低取決於模塊間介面的復雜性,調用的方式以及傳遞的信息。) 對於低耦合,粗淺的理解是:
一個完整的系統,模塊與模塊之間,盡可能的使其獨立存在。
也就是說,讓每個模塊,盡可能的獨立完成某個特定的子功能。
模塊與模塊之間的介面,盡量的少而簡單。
如果某兩個模塊間的關系比較復雜的話,最好首先考慮進一步的模塊劃分。
這樣有利於修改和組合。[1]
引用:http://ke..com/view/3082578.html
代碼的話,我就不多說了。自己估量估量,就知道是怎麼回事了。

⑸ java如何調用另個程序的main函數

Main方法是用static修飾的,有2種方法可以調用:

1、類名.main(參數);

2、new創建實例,實例.main(參數);

這個地方注意必須傳遞字元串數組的參數 或者 null !另外舉一個用反射機制調用Main方法的例子。

這個類是被調用的main方法類:

Java代碼:

public class Run

{

public static void main(String[] args)

{

String str=args[0]+"Hello World";

System.out.println(str);

}

}

下面是調用main方法的類:

Java代碼:

public class JobRun

{

public static void main(String[] args)

{

String idStr = "YAya";

try

{

Method method = Run.class.getMethod("main", String[].class);

method.invoke(null, (Object) new String[] { idStr });

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

(5)java引用函數擴展閱讀:

main方法是一個特殊的方法,是程序執行的入口,一個Java程序從main方法開始執行。Java虛擬機在執行Java程序之前會事先分配一個主線程,然後在主線程裡面執行我們這個main方法。

線程就是一個程序裡面不同的執行路徑!總之,就記住,Java程序從main方法開始執行,

比如:

public static void main(String[] args) {

System.out.println("nihao");

}

在這里當程序運行的時候,從main方法進來,然後做的第一件事就是System.out.println("nihao");

注意: main方法執行結束,程序也就執行結束了!

⑹ java 在主函數中調用函數的方法

調用方法:先生成一個對象,用「對象.方法()」的方式調用。
調用說明:java中的main方法是靜態的,用於程序的入口,在靜態方法中無法調用非靜態方法,只能調用靜態方法。想調用靜態方法的話就要先生成該類的一個對象,通過對象調用非靜態方法。
調用舉例:
public class A{
public static void main(String[] args){
A a = new A();
a.aaa();
}
public void aaa(){}
}

⑺ 如何用java調用c語言寫的函數

我知道的有兩種方法,一種是直接用JNI,另一種是則是用Jacob(實質上也用的是JNI)
先講講第一種方法
1.編寫Java程序TestDll,注意,這個類有兩個作用,一個是用來做頭文件,另外一個作用就是通過它來調用dll
public class TestDll {
static
{
System.loadLibrary("DLLSample");//載入dll
}
public native static int DoubleValue(int i);//函數聲明
}
2.編譯: javac TestDll
3.生成頭文件: javah TestDll
生成TestDll.h文件,這裡面只對函數DoubleValue作了聲明
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestDll */
#ifndef _Included_TestDll
#define _Included_TestDll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestDll
* Method: DoubleValue
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_TestDll_DoubleValue
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif

4.用VC製作DLL
修改DLLSample工程,程序中添加函數DoubleValue的實現,函數名必須用jni規定格式,可以照到.h文件里的聲
明來寫:
#include "jni_md.h"
#include "TestDll.h"
JNIEXPORT jint JNICALL Java_TestDll_DoubleValue (JNIEnv *, jclass, jint p)
{
int j = p*2;
return j;

JNIEXPORT,JNICALL,JNIEnv *, jclass請都不要動,jint對應是java里的int
別忘了把TestDll.h,jni.h(這個文件在JDK/include下),jni_md.h(這個文件在jdk/include/win32下)復制到VC
工程目錄中,然後編譯生成dll
5.把生成的DLLSample.dll復制到jdk/bin下(確保PATH指向了這個目錄)
6.應用
我看到他們舉的例子都是把調用寫在了main里, 在這里我把應用取出來放在一個Servlet類中的測試的,同樣可
以得到正確結果,這里體現國TestDll的第二個作用,它是調用dll的一個紐帶
......
TestDll td = new TestDll();
System.out.println("result= " td.DoubleValue(25));
.....

注意:
如果更改了TestDll的內容或重使命名了這個文件,必須重新用它生成頭文件,在dll里也要做相應修改,
因為必須要和java裡面的聲明一致才行

----------------------------------------
本文隨寫,若有什麼錯誤,請多多指出,謝謝

說明:本文是west263的博文,作者並沒有留名

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:583
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:877
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:572
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:758
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:674
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1001
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:245
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:104
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:796
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:702