
import javautilScanner;
public class Student {// 带有主函数的类,Score类在下面
String name;
Score score = new Score();// 此句有重大嫌疑 nested class object as an attribute, no mistake here!
public String introduce() {
return (name + "\t" + scorejava + "\t" + scoredb + "\t" + scorec
+ "\t" + scoresum() + "\t" + scoreavg());// name之后的全部显示为0
}
public static void main(String args[]) {
Student stu[] = new Student[10];
// Score score[] = new Score[10];
Scanner in = new Scanner(Systemin);
for (int i = 0; i < 3; i++) {
stu[i] = new Student();
// score[i] = new Score();
Systemoutprintln("学生" + (i + 1) + "的名字:");
stu[i]name = innext();
Systemoutprintln("学生" + (i + 1) + "java成绩:");
stu[i]scorejava = innextFloat();
// score[i]java = innextFloat();
Systemoutprintln("学生" + (i + 1) + "DB成绩:");
// score[i]db = innextFloat();
stu[i]scoredb = innextFloat();
Systemoutprintln("学生" + (i + 1) + "C语言成绩:");
stu[i]scorec = innextFloat();
// score[i]c = innextFloat();
}
Systemoutprintln("姓名\tjava成绩\tDB成绩是\tc语言成绩\t总成绩\t平均成绩");
for (int j = 0; j < 3; j++) {
Systemoutprintln(stu[j]introduce());
}
}
public class Score {// score类
float java, db, c;
public float sum() {
float ssum = java + db + c;
return ssum;
}
public float avg() {
return sum() / 3;
}
}
}
首先要说一下,java调用的是方法,不是函数,函数是在c语言中使用。
简单的例子
public class a{
public String b(){
String x="I love";
String y=c(x);
Systemoutprintln(y);
}
public String c(String st){
st=st+" China";
return st;
}
}
b方法运行后,会在后台打印出:I love China
希望对你有帮助
the 'aveRainfall' is a method, and you should add'(' ')', and it has an argument, you should pass it
我知道的有两种方法,一种是直接用JNI,另一种是则是用Jacob(实质上也用的是JNI)
先讲讲第一种方法
1编写Java程序TestDll,注意,这个类有两个作用,一个是用来做头文件,另外一个作用就是通过它来调用dll
public class TestDll {
static
{
SystemloadLibrary("DLLSample");//载入dll
}
public native static int DoubleValue(int i);//函数声明
}
2编译: javac TestDll
3生成头文件: javah TestDll
生成TestDllh文件,这里面只对函数DoubleValue作了声明
/ DO NOT EDIT THIS FILE - it is machine generated /
#include <jnih>
/ 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_mdh"
#include "TestDllh"
JNIEXPORT jint JNICALL Java_TestDll_DoubleValue (JNIEnv , jclass, jint p)
{
int j = p2;
return j;
}
JNIEXPORT,JNICALL,JNIEnv , jclass请都不要动,jint对应是java里的int
别忘了把TestDllh,jnih(这个文件在JDK/include下),jni_mdh(这个文件在jdk/include/win32下)复制到VC
工程目录中,然后编译生成dll
5把生成的DLLSampledll复制到jdk/bin下(确保PATH指向了这个目录)
6应用
我看到他们举的例子都是把调用写在了main里, 在这里我把应用取出来放在一个Servlet类中的测试的,同样可
以得到正确结果,这里体现国TestDll的第二个作用,它是调用dll的一个纽带
TestDll td = new TestDll();
Systemoutprintln("result= " tdDoubleValue(25));
注意:
如果更改了TestDll的内容或重使命名了这个文件,必须重新用它生成头文件,在dll里也要做相应修改,
因为必须要和java里面的声明一致才行
----------------------------------------
本文随写,若有什么错误,请多多指出,谢谢
说明:本文是west263的博文,作者并没有留名
java 一个类通过类名调用不在同一个包里的另一个类的函数,
这样你把函数写成静态的 static,然后就可以通过类名来调用了,
否则就是new对向后在调用
举个例子:
//文件 : Ajava
package comthread;
public class A {
public static void method(){
Systemoutprintln("call method");
}
}
//文件:Bjava
package comheatontest;
import comthreadA;
public class B {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public void callMethod(){
Amethod();//直接通过类名调用
}
}
这样调用
是指一个类调用另一个类的么?
如果是这样的话。。
//创建一个类
public class Text1{
public static void mian(String []agrs){
//实例化另一个类
Text2 t = new Text2();
tshow();
}
}
创建第二个类
public class Text2(){
//创建一个show方法
public void show(){
Systemoutprintln("我已经被调用了");
}
}
这就是类之间的调用。。
如果是想在方法里调用另一个类的方法
具体的也是和main()方法里的一样调用。(模仿main()方法)
首先明确一下 在java里面 函数就是方法 方法就是函数 这两者是一样的。
你的问题的意思是在静态方法里面怎么再调用其他方法 还是 怎么调用静态方法?
如果是静态方法里面怎么调用其他方法的话,分成调用静态方法和普通方法。
调用静态方法不需要实例就可以调用。直接通过类名静态方法名去调用。当然也可以用对象名静态方法名去调用。
如果是调用成员方法,那就只能通过实例,也就是对象名成员方法名去调用。
如果是怎么调用静态方法。那我上面已经说了 直接通过类名静态方法名去调用。当然也可以用对象名静态方法名去调用。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)