别人编译生成的java文件.class,我怎样调用呢?比如别人生成了accountServcice.class类,这个.class还需要配置文件,我在我的类中怎么调用它呢?谢谢! 

解决方案 »

  1.   

    不知道里面内容的话  用java反射
      

  2.   

    反射里面的方法 try {
    Class cls = Class.forName("com.goodtion.sweetop.Method1");
    Method methlist[] = cls.getDeclaredMethods();
    for (int i = 0; i < methlist.length; i++) {
    Method m = methlist[i];
    System.out.println("name = " + m.getName());
    System.out.println("decl class = " + m.getDeclaringClass());
    Class pvec[] = m.getParameterTypes();
    for (int j = 0; j < pvec.length; j++)
    System.out.println("param #" + j + " " + pvec[j]);
    Class evec[] = m.getExceptionTypes();
    for (int j = 0; j < evec.length; j++)
    System.out.println("exc #" + j + " " + evec[j]);
    System.out.println("return type = " + m.getReturnType());
    System.out.println("-----");
    }
    } catch (Throwable e) {
    System.err.println(e);
    }
      

  3.   

    调用里面的方法 try {
    Class cls = Class.forName("com.goodtion.sweetop.Method2");
    Class partypes[] = new Class[2];
    partypes[0] = Integer.TYPE;
    partypes[1] = Integer.TYPE;
    Method meth = cls.getMethod("add", partypes);
    Method2 methobj = new Method2();
    Object arglist[] = new Object[2];
    arglist[0] = new Integer(37);
    arglist[1] = new Integer(47);
    Object retobj = meth.invoke(methobj, arglist);
    Integer retval = (Integer) retobj;
    System.out.println(retval.intValue());
    } catch (Throwable e) {
    System.err.println(e);
    }
      

  4.   

    构造函数都知道的话,反射构造函数 try {
    Class cls = Class.forName("com.goodtion.sweetop.Constructor1");
    Constructor ctorlist[] = cls.getDeclaredConstructors();
    for (int i = 0; i < ctorlist.length; i++) {
    Constructor ct = ctorlist[i];
    System.out.println("name = " + ct.getName());
    System.out.println("decl class = " + ct.getDeclaringClass());
    Class pvec[] = ct.getParameterTypes();
    for (int j = 0; j < pvec.length; j++)
    System.out.println("param #" + j + " " + pvec[j]);
    Class evec[] = ct.getExceptionTypes();
    for (int j = 0; j < evec.length; j++)
    System.out.println("exc #" + j + " " + evec[j]);
    System.out.println("-----");
    }
    } catch (Throwable e) {
    System.err.println(e);
    }
      

  5.   

    调用构造函数 try {
    Class cls = Class.forName("com.goodtion.sweetop.Constructor2");
    Class partypes[] = new Class[2];
    partypes[0] = Integer.TYPE;
    partypes[1] = Integer.TYPE;
    Constructor ct = cls.getConstructor(partypes);
    Object arglist[] = new Object[2];
    arglist[0] = new Integer(37);
    arglist[1] = new Integer(47);
    Object retobj = ct.newInstance(arglist);
    } catch (Throwable e) {
    System.err.println(e);
    }
      

  6.   

    我把这个.class文件放在什么地方呢?
      

  7.   

    把他放在同一个目录下。然后直接调用就可以了,和正常的java类没有区别。当然要先向1楼import一下才可以使用。
      

  8.   

    和你自己写的类编译后的class文件房同一个地方就可以了,
    如果accountServcice有包名如com.goodtion.sweetop
    建文件夹com goodtion sweetop 3个
    com 包含 goodtion 
    goodtion包含 sweetop 再把accountServcice.class放里面如果有包的话  导入的时候也加上com.goodtion.sweetop.*;
      

  9.   

    我在src下有个包 cn/qdrk/tax/test 下面有个java文件,test.java我要在里面调用account.class,这个我放在哪里?又怎么调用呢?
      

  10.   

    如果有src 那么在同级目录下应该有个bin目录吧,放那里就可以了
    你得弄明白account.class有没包,没包直接放就可以了
      

  11.   

    和正常的.java文件无区别使用
    只是在一般的编译器里可能因为缺乏java文件而无法在编译期辨认
    javac编译 java命令执行
      

  12.   

    补充:存在class文件的前提下 在IDE无视编译错误运行 照样可以得到结果
      

  13.   

    AccountService有个包为cn.qdrk.tax.account,我的编译环境是intellij idea,工程的结构为:src,classes,编译好的.class都放在classes包中,我把AccountService.class放在什么地方呢/?
      

  14.   

    不用JVM加载,自己写类加载它,呵呵  比较变态的用法,刚写的package com.goodtion.sweetop;import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;public class FileClassLoader extends ClassLoader {
    public static final String drive="D:\\sweetop\\搜索引擎\\TomcatTest\\bin\\com\\goodtion\\sweetop\\";
    public static final String fileType=".class";

    public Class findClass(String name){
    byte[] data=loadClassData(name);
    return defineClass(name,data,0,data.length);
    } private byte[] loadClassData(String name) {
    FileInputStream fis=null;
    byte[] data = null;
    try {
    fis = new FileInputStream(new File(drive+name+fileType));
    ByteArrayOutputStream baos=new ByteArrayOutputStream();
    int ch=0;
    while((ch=fis.read())!=-1){
    baos.write(ch);
    }
    data=baos.toByteArray();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return data;
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
    FileClassLoader loader = new FileClassLoader();
    Class objClass=loader.loadClass("com.goodtion.sweetop.HelloWord",true);
    Object obj=objClass.newInstance();
    System.out.println(objClass.getName());
    System.out.println(objClass.getClassLoader().getClass().getName());
    System.out.println(((HelloWord)obj).getInfo());
    }
    }
      

  15.   

    解释执行的时候对jvm来说都是class文件
      

  16.   

    classes文件夹里放cn,  cn里放qdrk  qdrk里放tax  account是包还是类?是类 tax里放account.class   是包 tax里放acount再放acount.class
      

  17.   

    首先感谢各位对我的坚持不懈,我的classes包里面有production和test,其中production里面有我自己定义的test类编译好的test.class,它放在production/cn/qdrk/tax/test/包下,然后我建了一个包cn/qdrk/tax/account下放入AccountService.class,可是在调用import cn.qdrk.tax.account.AccountService时候不行 。
      

  18.   

    你在production/cn/qdrk/tax建个account文件夹放AccountService.class
    不行的话放在test文件夹建了一个包cn/qdrk/tax/account放AccountService.class
      

  19.   

    方法比较多,可以用:
    Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();//加载驱动
    这种方法或对源代码进行反编译或放到bin(classes)文件夹中在eclipse中直接用(会提示方法名称的)。
      

  20.   

    真晕,调个class也搞那么复杂,放在classpath里面不就行了.
      

  21.   

    别个的.class给你,总会告诉你是在哪个包里吧,没有的话就放在同一目录。我是这么想的。
      

  22.   

    包我也知道,可是放在class目录下却是不行。
      

  23.   

    包我也知道,可是放在class目录下却是不行。
      

  24.   

    会不会是这个.class类需要加载其他的类?
    你只拿到这一个类,并不能启动此类,因为它依赖于其他类
      

  25.   

    你可以想一楼那样,但要注意路径必须在跟.java相同的路径之下。你也可以将类导入包中,这其实一点也不难:
    在accountServcice.java文件里(如果你有accountServcice.java文件的话),所有import 的上端,输入:
    package XXX.XXX(路径名),比如:
    package com.horstmann.corejava;
    就是说在基目录的com/horsrmann/corejava下存放.class文件
    (这时候accountServcice.java和accountServcice.class都必须在这个目录之下,不然会报错。)然后另一个类的头部,输入:
    import com.horstmann.corejava.*;就可以引用那个类了。