如何使用类加载器或类以编程方式加载类



我有两个类

package pack2;
import java.lang.*;
import java.io.*;
class eg
{
    public void show()
    {
        System.out.println("ClassPath set to this class");
    }
}

这是在 C:\NNK\pack2 中。完全限定的名称是 pack2.eg

另一个程序是

import java.io.*;
import java.lang.*;
import java.net.*;
class classload
{
    public static void main(String args[])
    {
        //have to load the eg class here. Dont know what i have done below is right or wrong
        try 
        {
            Class b=Class.forName("pack2.eg");
        }
        catch(ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        try
        {
            eg z=(eg) b.newInstance();
        }
        catch(InstantiationException l)
        {
            l.printStackTrace();
        }
        z.show();
        System.out.println("b.getName()="+b.getName());
    }
}

此程序位于 C:\NNK我必须在这里加载 eg 程序。我试图在Oracle中学习它,看到了它的其他相关堆栈溢出问题。在 Java 中动态加载类但是它不起作用,我一直收到错误b是未知的,z是未知的符号。还有没有办法使用目录文件名(例如:C:\NNK\pack2\eg)来加载类

这是一个范围问题。将 bz 的声明移到第一个try之外,如下所示:

public static void main(String args[])
{
    //have to load the eg class here. Dont know what i have done below is right or wrong
    Class b;
    eg z;
    try 
    {
        b=Class.forName("pack2.eg");
    }
    catch(ClassNotFoundException e)
    {
        e.printStackTrace();
    }
    try
    {
        z=(eg) b.newInstance();
    }
    catch(InstantiationException l)
    {
        l.printStackTrace();
    }
    z.show();
    System.out.println("b.getName()="+b.getName());
}

您可能还必须制作pack2.eg public

除了 Jim Garrison 答案已经识别出的多个错误之外,您还声明了您的类具有"默认"范围。这意味着它只能通过同一包中的类引用。

应该是

public class eg   // <== public
{
    public void show()
    {
        System.out.println("ClassPath set to this class");
    }
}

而且不需要单独的尝试捕获,为什么不直接从主要方法中扔掉......如果任何步骤失败了,例如定义 b,无论如何你都不能再做任何事情了......

public static void main(String[] args) throws Exception {
    Class b = Class.forName("pack2.eg");
    eg z = (eg)b.newInstance();
    z.show();
    System.out.println("b.getName()=" + b.getName());
}

相关内容

  • 没有找到相关文章

最新更新