java引用函数
⑴ 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的博文,作者并没有留名
