本文目录一览:
- JAVA中定义了函数,有返回值,怎么调用?
- java中的函数调用怎么理解?
- java 在主函数中调用函数的方法
- 怎样通过Java调用自己编写的R函数?
- JAVA如何调用C函数
- java怎么在一个函数里调用另一个函数的数组
JAVA中定义了函数,有返回值,怎么调用?
你可以这样理解 add(a,b)
中向 a、b 传值,在方法 add
中处理 a 和 b,然后得出一个数,例如 sum = a + b
,然后这个方法就返回这个数,当然这个数的类型是你定义的。然后在某个地方你要用到这个 sum
,你就可以这样用 sums = add(a,b)
;可以这样用,其实有返回类型的方法你可以认为它就是一个值来用就行了。
public static void main(String args[]){
System.out.println("add(a,b)当a=1,b=2的时候,a+b的值为" + add(1,2)); // 有返回类型的方法可以直接看成是一个值
}
java中的函数调用怎么理解?
函数调用可以理解为: 你想去买一样东西,这时,可能会叫你的秘书去帮你买它。 您的秘书可能不熟悉市场,这时她委任采购部门去帮她购买你需要的东西。 不好意思,昨天有事匆忙留下一段,还有一段没有完成。。。 在 JAVA 中怎么使用?什么时候能用到? 我就大致的回答一下吧。如果不合心意,还请谅解! OOP 强调低耦合,高内聚。单一职责原则。还有许多模式以及原则,使你的系统富有弹性,易于扩展,修改,维护。 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。 所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。 耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。) 对于低耦合,粗浅的理解是: 一个完整的系统,模块与模块之间,尽可能的使其独立存在。 也就是说,让每个模块,尽可能的独立完成某个特定的子功能。 模块与模块之间的接口,尽量的少而简单。 如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。 这样有利于修改和组合。[1] 引用: 代码的话,我就不多说了。自己估量估量,就知道是怎么回事了。
java 在主函数中调用函数的方法
调用方法:先生成一个对象,用“对象.方法()”的方式调用。 调用说明:Java 中的 main 方法是静态的,用于程序的入口,在静态方法中无法调用非静态方法,只能调用静态方法。想调用静态方法的话就要先生成该类的一个对象,通过对象调用非静态方法。 调用举例:
public class A {
public static void main(String[] args) {
A a = new A();
a.aaa();
}
public void aaa() {}
}
怎样通过Java调用自己编写的R函数?
Java 调用 R,就是使用 JRI.jar 中的 API,执行一条 R 语言命令,当然首先你要了解 R 语言的语法。
1. JRI 中主要的 API
Rengine
R 引擎,通过它进行 R 语言的启动、运算、画图、关闭等功能。 一个线程只能实例化一次,推荐使用单例模式。 实例化代码:Rengine engine = new Rengine(null, false, null);
Rengine.versionCheck()
// R 版本校验,返回 true:版本校验通过 返回 false:版本校验未通过engine.waitForR()
// R 加载校验,返回 true:加载成功 返回 false:加载失败engine.end()
// 结束 R,在后续没有调用 R 的情况下使用,否则 R 将退出,不能继续使用 R。
2. REXP
REXP
R 计算结果表达式REXP rexp = engine.eval_r(String str); // 执行 R 命令,返回结果 REXP rexp.asInt(); rexp.asDouble(); rexp.as.. // 将 REXP 转成 Java 类型 engine.assign(String name, double d); // 定义 R 变量,name 为 R 中变量的名字
以上大概了解了 JRI 的基本 API,下面写个简单的例子。
// 求 n 个数的最大值
Rengine engine = new Rengine(null, false, null);
int[] arr = new int[]{-1, 2, 1, -3, 5, 4, -2};
engine.assign("x", arr);
REXP rexp = engine.eval_r("max(x)");
int max = rexp.asInt();
System.out.println(max);
engine.end();
JAVA如何调用C函数
要在 Java 中调用 C 语言的库,需要使用 Java 提供了 JNI。
举例说明
在 C 语言中定义一个 void sayHello()
函数(打印 HelloWorld);然后在 Java 中调用这个函数显示 HelloWorld。
现在分别从 Java 和 C 语言两部分说明:
1. Java 部分
首先定义一个 HelloNative
,在其中声明 sayHello
函数,函数要声明为 native 类型。如下:
public class HelloNative {
public native void sayHello();
}
编译这个类,生成 class 文件:
javac HelloNative.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
用来实现显示 HelloWorld 的函数。如下:
#include <jni.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
中并不存在当前的目录。主要有以下的几个解决办法:
- 将生成的库复制到
java.library.path
有的路径中去,当然这样不是很好。 - 设置环境变量
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
,将当前的目录加入到LD_LIBRARY_PATH
中。 - 设置 Java 的选项,将当前的目录加入到其中。
java -Djava.library.path=.:$LD_LIBRARY_PATH
这样之后程序就能够成功运行了。可以看见显示的 "Hello World!" 了。
java怎么在一个函数里调用另一个函数的数组
import java.util.Scanner;
interface getGrade {
public void finGrade();
}
class First implements getGrade {
int a[];
public First() {}
public First(int grade[]) {
a = grade.clone();
}
public void finGrade() {
int sum;
for (int i = 0; i <= 4; i++) {
sum = sum + a[i];
}
int num;
num = sum / 5;
System.out.println("平均成绩为:" + num);
}
};
class Second implements getGrade {
int a[];
public Second() {}
public Second(int grade[]) {
a = grade.clone();
}
public void finGrade() {
int j, k, t;
for (j = 1; j < 5; j++) {
for (k = 0; k < 5 - j; k++) {
if (a[k] > a[k + 1]) {
t = a[k];
a[k] = a[k + 1];
a[k + 1] = t;
}
}
}
a[0] = 0;
a[4] = 0;
int sun;
for (int i = 0; i <= 4; i++) {
sun = sun + a[i];
}
int nun;
nun = sun / 3;
System.out.println("平均成绩为:" + nun);
System.out.println("(去掉一个最高分和一个最低分)");
}
};
public class exer4 {
public static void main(String args[]) {
System.out.println("请依次输入评委所给的分数");
System.out.println("(默认为五个评委)");
int a[] = new int[5];
Scanner reader = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
a[i] = reader.nextInt();
}
System.out.println("请选择评分方式");
System.out.println("1.直接求平均分");
System.out.println("2.去掉一个最高分和一个最低分");
int b = reader.nextInt();
if (b == 1) {
First first = new First(a);
first.finGrade();
} else if (b == 2) {
Second second = new Second(a);
second.finGrade();
}
}
}