1

我有两节课

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)来加载一个类

4

2 回答 2

0

除了 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());
}
于 2016-07-16T05:51:03.057 回答
0

这是一个范围问题。将声明移出first b,如下所示:ztry

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

于 2016-07-16T05:53:01.980 回答