java調用函數
⑴ java如何調用javascript的函數
[java] view plainprint?
<span style="font-size:18px;">package suggestion16;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import javax.script.Bindings;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class ScriptText {
public static void main(String[] args) throws FileNotFoundException, ScriptException, Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Bindings bind = engine.createBindings();
bind.put("factor", 2); //這里綁定一個factor的值為2.
engine.setBindings(bind,ScriptContext.ENGINE_SCOPE);
Scanner input = new Scanner(System.in);
while(input.hasNext())
{
int first = input.nextInt();
int sec = input.nextInt();
System.out.println("輸入的參數為:"+ first+ " , " + sec);
engine.eval(new FileReader("E:/cal.js"));
if(engine instanceof Invocable)
{
Invocable in = (Invocable)engine;
Double result = (Double)in.invokeFunction("cal",first,sec);
System.out.println("運算結果為:" + result.intValue());
}
}
}
}
</span>
其中的「E:/cal.js」就是我們js文件的保存路徑。並且這個主函數可以循環的輸入。
我們運行一下這個程序得到的結果如下:
[html] view plainprint?
<span style="font-size:18px;">1
2
輸入的參數為:1 , 2
運算結果為:1
</span>
上面也就是 調用了 1 + 2 - 2 = 1 ,所以結果為1
我們將js文件中的function方法改變下,改編為下面的函數:
[javascript] view plainprint?
<span style="font-size:18px;">function cal(var1,var2)
{
return var1+var2*factor;
}</span>
⑵ java Main函數怎麼調用其他函數。 其他類。
主函數main前必須有static修飾符,static表示是靜態。
一般,在靜態的方法中,若要|-直接-|調用其他方法,那麼被調用的也必須是靜態。
你的程序中包含兩個部分
方法getInt() 和主函數main 其中主函數是靜態(main必須是靜態)。
那麼要在main中直接調用getInt()是不可以了,因為getInt沒有用static修飾,也就是說getInt不是靜態。
將public void getInt() 修改成 public static void getInt() ,追加靜態修飾符static後可直接調用。
主函數main修改為
public static void main(String[] args)
{
getInt(); //這里調用了上面的方法
System.out.println("總共有括弧對數:");
}
返回值:
有些方法是帶有返回值的,取決於你的用途。能不能帶返回值取決於void修飾符
普通方法,無返回值void修飾 。如 public void fangfa()這是無返回值的
public int fangfa() 這個是有返回值的,而且返回值必須是int
舉個例子
public int getPlayercounts()
{
int playercount = 0 ;//一般先初始化一個相應的變數待用(重要)
for (int i = 0 ; i < 99 ; i ++) //一些相關的計算和方法開始..
playercount ++ ;
return playercount; //返回一個int值(重要,而且是必須)
}
當你的方法不是用void修飾 而是用其他數據類型修飾,均是要有返回值的,也就是說在方法的結束為止至少要有一個return + 相應的數據類型的變數 來結束。
那麼返回值究竟有什麼意義呢?
看下面這個例子、
public static int getPlayercounts() //注意我用了static 這是一個靜態方法
{
int playercount = 0 ;//一般先初始化一個相應的變數待用(重要)
for (int i = 0 ; i < 99 ; i ++) //一些相關的計算和方法開始..
playercount ++ ;
return playercount; //返回一個int值(重要,而且是必須)
}
public static voin main(String[] args)
{
System.out.println("一共有"+getPlayercounts()+"個玩家");
}
看出來了吧,getPlayercounts()執行後 會獲得執行時得到的int數,在一些需要最後得到某個結果的方法中,用含有返回值的方法是非常方便的。
==============================================
你的代碼完全修改後如下,因為你需要的是得到括弧數,所以將你的原有方法改成一個返回int值得方法。
public class java
{
public static int getInt()// 原來是 public void getInt() ,修改後增加了static修飾, int替換了void
{
String strChar="a(bc)()()dnn()()j";
int iX=0;
int iY=0;
for(int p=0; p<strChar.length();p++)
{
String getstr=strChar.substring(p,p+1);
if(getstr.equals("(")){iX++;}
if(getstr.equals(")")){iY++;}
}
return Math.min(iY, iX);//取兩者之間的最小值(即括弧對數)作為返回值
}
public static void main(String[] args)
{
System.out.println("總共有括弧對數:"+getInt());
}
}
郁悶 寫了半天發現你已經認可了。。
⑶ 在java中如何用按鈕調用函數
給按鈕添加事情偵聽器。 當按鈕被按下時,調用相應的函數。ActionListener
⑷ Java語言裡面如何調用函數,請給出一段調用函數的代碼
public class HelloWord{
//自定義的輸出函數,列印字元串helloword!
public void printHelloWord() {
System.out.println("helloword!");
}
public static void main(String args[]){
//創建對象實例
HelloWord hw = new HelloWord();
//通過對象實例調用自己的成員函數
hw.printHelloWord() ;
}
}
你看看滿意不?
⑸ 如何讓一個.java文件調用另一個.java文件的主函數
首先這叫兩個類,.java只不過是java文件的後綴。
假設 有兩個類 分別命名為 Class1 和Class2 兩個類在同一個包下
在Class1中如下寫即可:
Class2 class2 = new Class2();
class2.test();//test()為class2聲明的方法
如果兩個類不再同一個包下則需要引入一下,在Class1頭部如下寫:
import com.main.Class2; //com.main為包名,其餘同上
⑹ 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 調用函數有幾種方法
在同一個類中 的方法可以直接調用。 等同於 this.method() 這里這個this.可以省略。
但是 在靜態方法中不能直接調用非靜態的方法。
再有其他的方式就是反射了 可以通過Class對象調用方法 java.lang.reflect
⑻ java函數調用
當你
informationvalue=(information)map.get(key);
System.out.println(value);
其實就是調用的 value 的toString方法
如果你沒有在information 類裡面 重寫 toString 方法的話,那麼默認調用的是 Object類的toString方法,也就是類似於輸出
student.information@25154f
這種格式
Object類中的toString類實現比較簡單,其源代碼為:
publicStringtoString(){
returngetClass().getName()+"@"+Integer.toHexString(hashCode());
}
⑼ java函數調用問題
調用靜態方法可以直接用類名,調用非靜態方法必須用對象。
舉例如下:
publicclassA{
//靜態方法
publicstaticvoida1(){
System.out.println("靜態方法");
}
//非靜態方法
publicvoida2(){
System.out.println("非靜態方法");
}
}
測試類:
publicclassTest{
//main方法也是靜態的
publicstaticvoidmain(String[]args){
//創建對象
Aaa=newA();
//通過類名訪問
A.a1();
//通過對象訪問
aa.a2();
}
}
運行結果:
⑽ 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;
}
}